创建2个具有相同列但没有主键的表

时间:2020-02-07 18:03:44

标签: sql sql-server database rdbms

(问题仅适用于大学项目,因为我坚持要求)

我想在SQL Server中创建2个表,例如在同一数据库中创建“ table1”和“ table2”。两者都应有一个列“ col1”,这不是主键。

那么我应该如何创建它,以便在将数据插入一个表中时,另一个表会自动更新?

注意:因此,这是针对一个大学项目的,要求我们输入特定类型的主键,因此无法进行引用,现在我必须在2个不同的表中具有相同的实体,那么以某种方式引用它们是一个好主意吗?

例如,,en员工的项目详细信息将具有其empID,而受抚养人的表也将具有empID。但是我不能将它作为主键,因为教授已经定义了它。但是更新一个也应该更新另一个,这有意义吗?

2 个答案:

答案 0 :(得分:1)

您可以有两种类型的父子关系。

  1. 识别关系:在这里,孩子依靠父母来标识自己。例如。项目要求员工存在。在这里,Project应该将EmployeeId作为其主键的一部分,或者将EmployeeId作为其主键。如果EmployeeId是项目的主键,则雇员只能有一个项目。
CREATE TABLE Employee
(
  EmployeeId INT,
  EmployeeName VARCHAR(255) NOT NULL,
  PRIMARY KEY(EmployeeId)
)
GO

CREATE TABLE EmployeeProject
(
  EmployeeId INT,
  EmployeeName VARCHAR(255) NOT NULL,
  PRIMARY KEY(EmployeeId),
  FOREIGN KEY (EmployeeId) REFERENCES Employee(EmployeeId),
)
GO
  1. 非身份识别关系:在这里,孩子并不依靠父母身份来识别自己。例如。无需员工即可定义项目。在这里,Project可以将EmployeeId作为外键。如果EmployeeId为NOT NULL列,则必须有一个雇员。如果EmployeeId为NULL列,那么拥有雇员不是强制性的。
CREATE TABLE Employee
(
  EmployeeId INT,
  EmployeeName VARCHAR(255) NOT NULL,
  PRIMARY KEY(EmployeeId)
)
GO

CREATE TABLE EmployeeProject
(
  EmployeeProjectId INT,
  EmployeeName VARCHAR(255) NOT NULL,
  EmployeeId INT NOT NULL, -- Can be NULL, if it is not mandatory
  PRIMARY KEY(EmployeeProjectId),
  FOREIGN KEY (EmployeeId) REFERENCES Employee(EmployeeId),
)
GO

答案 1 :(得分:0)

首先,在创建表时,将被称为外键的实体使其唯一:

表1:

[SIN] int NOT NULL UNIQUE,

第二,在另一个将[SIN]称为FK的表中,放置更新和删除的条件:

表2:

[SIN] INT CONSTRAINT [SIN_FK1] FOREIGN KEY REFERENCES Employee([SIN]) ON DELETE SET NULL ON UPDATE CASCADE

这样做,每当您更新或删除表1中的记录时,表2中的相应记录将被更新。