T-SQL 中的联结表
Posted
技术标签:
【中文标题】T-SQL 中的联结表【英文标题】:Junction tables in T-SQL 【发布时间】:2010-09-06 15:27:41 【问题描述】:在我的数据库应用程序中,当我尝试将页面附加到站点时,我收到以下错误:
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】:你快到了。你只需要创建一个所谓的“复合主键”,也就是说你需要告诉数据库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));
【讨论】:
以上是关于T-SQL 中的联结表的主要内容,如果未能解决你的问题,请参考以下文章