0

我有一个数据库,其中包含一些表,例如人员、员工、成员和支持者。

person 表包含有关每个员工、成员和支持者的信息。它包含的信息是姓名、地址、电子邮件和电话。我还创建了一个作为主键的 id。

我的问题是我还有一个用于工作人员、成员和支持者的主键 ID。

例如,在人员表中是 ID 为 1 的约翰。他是支持者,因此在支持者表中是 pID(用于人员 ID)以引用回约翰及其所有信息和 ID(用于支持者 ID)。

pID 引用人员表,每个人都有一个从 1 开始递增 1 的 ID。支持者 ID 适用于每个支持者,也从 1 开始并递增 1。

支持者表中是否可以有 pID = 1 和支持者 ID = 1?另一个人的 pID = 26 和支持者 ID = 5。

还是支持者 ID 必须与 pID 不同并且类似于“sup”?所以你会有 pID = 1 和支持者 ID = sup1 或 pID = 26 和支持者 ID = sup5

4

3 回答 3

3

主键仅在表的上下文中是唯一的。如果一个表中的列引用另一个表中的主键,那么您应该设置一个外键约束,以便在同步时引用不会意外退出。

于 2013-11-04T03:50:15.723 回答
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

在此处输入图像描述

于 2013-11-04T05:40:16.313 回答
0

是的,个人 ID 和支持者 ID 可以是相同的数字,只要您的代码跟踪哪个 ID 类型是哪个。

于 2013-11-04T03:46:10.383 回答