Создание таблицы с составным ключом + внешний ключ в качестве составного ключа - PullRequest
0 голосов
/ 22 февраля 2011

У меня проблема с созданием базы данных в SQL Server Compact.

У меня в основном 5 таблиц (CentreDeCout, Profil, Groupe, CCProfilPivot, CCProfilGroupePivot)

В CentreDeCout в качестве первичного ключа используется NomCC
Профиль имеет NomProfil в качестве первичного ключа

CCProfilPivot имеет NomCC и NomProfil в качестве первичного ключа (по отношению к первичному ключу CentreDeCout и Profil)

Группа имеет NomGroupe в качестве первичного ключа

и мне нужно, чтобы CCProfilGroupePivot имел первичный ключ CCprofilPivot и NomGroupe в качестве своего первичного ключа.

Таким образом, первичным ключом будет NomCC, NomProfil и NomGroupe.
NomCC и NomProfil будут взяты из CCProfilPivot и NomGroupe из Groupe

Вот как я это сделал

  
CREATE TABLE CentreDeCout(
NomCC nvarchar(100) primary key
)

CREATE TABLE Profil(
NomProfil nvarchar(100) primary key
)

CREATE TABLE Groupe(
NomGroupe nvarchar(100) primary key
)

CREATE TABLE CCProfilPivot(
NomCC nvarchar(100) references CentreDeCout(NomCC),
NomProfil nvarchar(100) references Profil(NomProfil),
PRIMARY KEY(NomCC,NomProfil)
)


CREATE TABLE CCProfilGroupePivot(
NomCC nvarchar(100) references CCProfilPivot(NomCC),
NomProfil nvarchar(100) references CCProfilPivot(NomProfil),
NomGroupe nvarchar(100) references Groupe(NomGroupe),
PRIMARY KEY (NomCC,NomProfil,NomGroupe)
)

Последняя таблица создания дает мне эту ошибку

<Code>
SQL Exercution Error.</p>

<p>Exercuted SQL statement: CREATE TABLE CCProfilGroupePivot(
NomCC nvarchar(100) references CCProfilPivot(NomCC),
NomProfil nvarchar(100) references CCProfilPivot(NomProfil),
NomGroupe nvarchar(100) references Groupe(NomGroupe),
PRIMARY KEY (NomCC,NomProfil,NomGroupe)
)</p>

<p>error Source: SQL Server Compact ADO.Net Data Provider
Error Message: The referenced table must have a primary or candidate key.[FK Name = FK_CCProfilGroupePivot__00000000000000D7]</p>

<p>

Может кто-нибудь помочь мне?

Спасибо, Гибит

1 Ответ

2 голосов
/ 22 февраля 2011

Вы должны ссылаться на оба столбца составного ключа одновременно.

CREATE TABLE CCProfilGroupePivot(
  NomCC nvarchar(100) not null,
  NomProfil nvarchar(100) not null,
  NomGroupe nvarchar(100) references Groupe(NomGroupe),
  PRIMARY KEY (NomCC,NomProfil,NomGroupe),
  foreign key (NomCC, NomProfil) 
    references CCProfilPivot (NomCC, NomProfil)
);
...