我可以在两个不同的表中使用同一个主键吗?

nut*_*lla 3 sql database primary-key

CREATE TABLE Employee
(
employeeID INT (10) PRIMARY KEY,
Name CHAR (20)
);

CREATE TABLE SALARY
(
employeeID INT (10) PRIMARY KEY,
Salary INT (10)
);
Run Code Online (Sandbox Code Playgroud)

是否可以在两个表中使用相同的主键?

Ven*_*n R 7

是的。您可以在多个表中使用相同的列名作为主键。

列名在表中应该是唯一的。一张表只能有一个主键,因为它定义了实体完整性

如果这道题是关于数据建模父子关系的话,有两种类型。您将阅读更多相关内容。

  1. 识别关系:孩子在父母的帮助下识别自己。在这里,员工和薪资将共享相同的主键。父表(EmployeeId)的主键也将是子表(Salary)的主键。
  2. 非认同关系:孩子有自己的身份。在这里,员工和薪资将有不同的主键。子表将有自己的主键(例如 SalaryId),并将父表的主键作为外键(EmployeeId)。


Tho*_*ner 7

是的你可以。您可以为salary.employeeid员工表创建表的主键和外键:

CREATE TABLE salary (
  employeeid INT NOT NULL,
  salary INT NOT NULL,
  CONSTRAINT pk_salary PRIMARY KEY (employeeid),
  CONSTRAINT fk_salary_employeeid FOREIGN KEY (employeeid) REFERENCES employee (employeeid)
);
Run Code Online (Sandbox Code Playgroud)

这会在表之间创建 {1}:{0,1} 关系,并确保您在未存储员工的情况下无法存储薪水,并且无法为一名员工存储多份薪水。

这是我们很少做的事情。(我们宁愿把工资做成员工表中的一列。)我看到的单独工资表的唯一好处是,你可以在员工表上授予权限,但在工资表上撤销它们,从而使工资表对某些数据库用户不可见。


小智 5

如果您的问题是是否可以在多个表上使用相同的 EMPLOYEEID 列作为主 ID,那么答案是“是,您可以”

您可以在多个表上使用同一列作为主索引,但一张表上不能有多个主索引