两个相连的表中有相同的记录具有相同的外键
问题描述:
我有一个SQL表用户有一些用户与PK的。我需要使用表Users中的相同用户创建第二个表UserInfo。我将这些表格与FK连接起来。困难是我需要两个表的用户都有相同的主键。像User(UserId 5)的用户“Peter”必须在UserInfo表中具有(UserInfoId 5)。这是可能的,如果是这样,我该怎么做?两个相连的表中有相同的记录具有相同的外键
答
要么有一个一对一的关系Users
和UserInfo
之间,在这种情况下是UserInfo.UserID
同时PRIMARY KEY和外键。
CREATE TABLE UserInfo (
UserID int PRIMARY KEY,
Info varchar(max),
CONSTRAINT FK_UserInfo_User FOREIGN KEY (UserID) REFERENCES Users(UserID)
ON DELETE CASCADE
);
OR
你有一对多的关系Users
和UserInfo
之间,在这种情况下UserInfo.UserID
是一个外键,你需要一个单独的PRIMARY KEY UserInfo.UserInfoID
。
CREATE TABLE UserInfo (
UserInfoID int PRIMARY KEY,
UserID int NOT NULL,
Info varchar(max),
CONSTRAINT FK_UserInfo_User FOREIGN KEY (UserID) REFERENCES Users(UserID)
ON DELETE CASCADE
);
听起来这是一对一的关系,并且您希望强制在两个表中始终存在相应的记录。 由于插入到一个表中将是原子的,我不认为你可以执行一个循环的PK-FK-PK场景。 如果表格不太宽,则将这些字段添加到基表中。如果你需要一个单独的桌子,因为它实际上太宽了;那么您可以将可选/可空字段重构为第二个表,并在基表中保留必需/不可为空的字段。 – Aaron 2014-12-03 18:48:47