【发布时间】:2014-07-26 19:24:16
【问题描述】:
下面的例子用来说明我想要达到的目的。考虑一个包含用户的表格,以及另一个包含主题的表格。每个用户应该能够对每个主题进行评分(一次),但不需要对每个主题进行评分。这些是示例的示例表:
CREATE TABLE [Topic](
[topicID] [int] NOT NULL,
[topic] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_Topic] PRIMARY KEY(topicID))
CREATE TABLE [User](
[userID] [int] NOT NULL,
[name] [nvarchar](50) NOT NULL
CONSTRAINT [PK_User] PRIMARY KEY(userID))
CREATE TABLE [Vote](
[topicID] [int] NOT NULL,
[userID] [int] NOT NULL,
[vote] [int] NOT NULL,
CONSTRAINT [PK_Vote] PRIMARY KEY
([topicID],[userID]))
选择主键PK_Vote 是为了指定一个约束条件,即每个用户最多只能为每个主题投票一次。
有没有办法使用这个组装的主键指定外键约束(关系)?据我了解,我只能整体引用一个键,所以这是不可能的,因为键的每个部分(列)都应该与不同表的主键匹配。
我想要这个 SQL Server 2008。
【问题讨论】:
-
Vote表的主键约束将保证唯一性。您可以为topicId和userId定义 2 个单独的外键约束。 -
如果您想创建与
Vote的FK 关系,您需要使用VotePK 中定义的both 列 - 您的子表需要两个TopicID和UserID。没有办法引用半个 PK... - 它要么涉及 ALL 列,要么没有 FK 关系。
标签: sql sql-server sql-server-2008