我有一个包含几个表的数据库,例如人员,员工,成员和支持者。
人员表包含有关每位员工,成员和支持者的信息。它包含的信息是姓名,地址,电子邮件和电话。我还创建了一个主键ID。
我的问题是我还有员工,会员和支持者的主键ID。
例如,在person表中是John,ID为1。 他是支持者,所以在支持者表中是pID(对于人员ID)用他的所有信息和ID(对于支持者ID)引用回John。
pID引用人员表,每个人的ID从1开始递增1.支持者ID适用于每个支持者,也从1开始增加1。
是否可以在支持者表中使用pID = 1和支持者ID = 1?另一个人的pID = 26,支持者ID = 5。
或支持者ID必须与pID不同,是否像“sup”?所以你的pID = 1,支持者ID = sup1或pID = 26,支持者ID = sup5
答案 0 :(得分:3)
主键仅在表的上下文中是唯一的。如果一个表中的列引用另一个表中的主键,则应设置外键约束,以使引用在同步时不会意外丢失。
答案 1 :(得分:0)
是的,只要您的代码跟踪哪种ID类型,人员ID和支持者ID就可以是相同的号码。
答案 2 :(得分:0)
外键,这就是你要找的东西。所有其他表都可以引用person表中的主键。
CREATE TABLE person(personId INT PRIMARY KEY IDENTITY(1,1), FirstName VARCHAR(50), LastName VARCHAR(50))
CREATE TABLE staff(id INT PRIMARY KEY IDENTITY(1,1), personId INT REFERENCES person(personId))
CREATE TABLE member(id INT PRIMARY KEY IDENTITY(1,1), personId INT REFERENCES person(personId))
CREATE TABLE supporter(id INT PRIMARY KEY IDENTITY(1,1), personId INT REFERENCES person(personId))
INSERT INTO person VALUES ('Adrian', 'Sullivan'), ('Frank', 'Sullivan'), ('Another', 'Sullivan'),('John', 'Sullivan')
SELECT * FROM person
INSERT INTO staff VALUES (1),(3)
INSERT INTO member VALUES (2),(3),(4)
INSERT INTO supporter VALUES (1),(4)
SELECT
person.personId
, person.FirstName
, person.LastName
, staff.id [IsStaff]
, member.id [IsMember]
, supporter.id [IsSupporter]
FROM person
LEFT OUTER JOIN staff ON person.personid = staff.personId
LEFT OUTER JOIN member ON person.personid = member.personId
LEFT OUTER JOIN supporter ON person.personid = supporter.personId