Соединительные таблицы в T-SQL - PullRequest
       34

Соединительные таблицы в T-SQL

0 голосов
/ 06 сентября 2010

В приложении базы данных при попытке прикрепить страницу к сайту появляется следующая ошибка:

System.InvalidOperationException: Can't perform Create, Update or Delete operations on 'Table(Junc_Page_Site)' because it has no primary key.

Я предполагаю, что страницу можно будет добавить к нескольким сайтам, используя таблицу соединений.

Ниже приведена схема для трех рассматриваемых таблиц (T-SQL). Любой совет будет оценен!

CREATE TABLE Site (
    Id     INTEGER    NOT NULL IDENTITY ,
    FkSiteId    INTEGER   ,
    Name     NVARCHAR(64)  NOT NULL ,
    Domain     NVARCHAR(128) ,
    Theme     NVARCHAR(32) ,
    ThemeVariation  NVARCHAR(32) ,
PRIMARY KEY(Id) ,
FOREIGN KEY(FkSiteId)
    REFERENCES    Site(Id));
GO



CREATE TABLE Page (
    Id      INTEGER    NOT NULL IDENTITY ,
    Title    NVARCHAR(64)  NOT NULL ,
    Description   NVARCHAR(256)  NOT NULL , 
    Keywords   NVARCHAR(1024)  NOT NULL ,
    ScriptName   NVARCHAR(64) , 
PRIMARY KEY(Id));
GO



CREATE TABLE Junc_Page_Site (
    FkPageId   INTEGER     NOT NULL ,
    FkSiteId   INTEGER    NOT NULL  ,
FOREIGN KEY(FkSiteId)
    REFERENCES Site(Id),
FOREIGN KEY(FkPageId)
    REFERENCES Page(Id));
GO

1 Ответ

2 голосов
/ 06 сентября 2010

Ты почти у цели. Вам просто нужно создать так называемый «составной первичный ключ», то есть вам нужно сообщить базе данных, что conbination FkPageId и FkSiteId будет уникальным:

CREATE TABLE Junc_Page_Site (
    FkPageId INTEGER NOT NULL ,
    FkSiteId INTEGER NOT NULL  ,
FOREIGN KEY(FkSiteId)
    REFERENCES Site(Id),
FOREIGN KEY(FkPageId)
    REFERENCES Page(Id),
PRIMARY KEY (FkPageId, FkSiteId));
...