以下示例用于解释我要实现的目标。考虑一个带有用户的表,另一个带有主题的表。每个用户都应该能够(一次)对每个主题进行评分,但不必对每个主题进行评分。这些是示例的示例表:
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。
我建议创建带有标识列的投票表,并添加唯一索引以限制插入重复的记录,并为用户和主题表创建外键约束。
CREATE TABLE [Vote](
VoteId INT NOT NULL IDENTITY(1,1),
[topicID] [int] NOT NULL,
[userID] [int] NOT NULL,
[vote] [int] NOT NULL,
CONSTRAINT [PK_Vote] PRIMARY KEY ([VoteId]))
GO
CREATE UNIQUE NONCLUSTERED INDEX UX_Vote ON dbo.Vote(TopicID, UserID)
ALTER TABLE [Vote] ADD CONSTRAINT FK_Vote_Topic FOREIGN KEY(TopicID) REFERENCES dbo.Topic(TopicID)
ALTER TABLE [Vote] ADD CONSTRAINT FK_Vote_User FOREIGN KEY(UserID) REFERENCES dbo.[User](UserID)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句