‘创建表Employee ( employeeID INT (10)主键,姓名CHAR (20) );’
‘CREATE TABLE Salary ( employeeID INT (10) primary KEY,SALARY INT (10) );’是否可以在两个表中使用相同的主键?
发布于 2019-04-11 19:48:16
如果您的问题是您是否可以在多个表上使用相同的EMPLOYEEID列作为主ID,那么答案是“可以”
您可以在多个表上使用同一列作为主索引,但一个表上不能有多个主索引
发布于 2019-04-11 19:57:01
你可以做到这一点,但是,这是糟糕的设计。
我建议在employee表上使用EmployeeId作为PK,在Salary表上使用EmployeeId作为外键,并且Salary表有自己的PK (最有可能是SalaryId)。
另外,我个人也会避免使用字段名,因为" Name“在SQL中是一个保留字。
CREATE TABLE dbo.Employee
(
EmployeeId BIGINT IDENTITY(1,1)
,EmployeeName VARCHAR(20) NOT NULL
,CONSTRAINT PK_Emp PRIMARY KEY (EmployeeId)
);
GO
CREATE TABLE dbo.Salary
(
SalaryId BIGINT IDENTITY(1,1)
,EmployeeId BIGINT NOT NULL
,Salary INT NOT NULL
,CONSTRAINT PK_Sal PRIMARY KEY (SalaryId)
,CONSTRAINT FK_EmpSal FOREIGN KEY (EmployeeId)
REFERENCES Employee(EmployeeId)
);
GO综上所述,我认为多考虑一下db结构,你很可能最终会得到3个表。很可能很多员工的工资都是一样的,比如5个员工的工资是40,000,3个员工的工资是50,000,以此类推。你最终会多次存储相同的工资值。
一种更好的方法是将该值存储一次,然后创建第三个表,将员工与工资(在本例中,我将其称为收入)链接起来。在这种结构中,比如说40,000的薪水在数据库中存储了一次,并且您可以多次将employeeId链接到它。
CREATE TABLE dbo.Employee
(
Id BIGINT IDENTITY(1,1)
,EmployeeName VARCHAR(20) NOT NULL
,CONSTRAINT PK_Emp PRIMARY KEY (Id)
);
GO
CREATE TABLE dbo.Salary
(
Id BIGINT IDENTITY(1,1)
,Salary INT NOT NULL
,CONSTRAINT PK_Sal PRIMARY KEY (Id)
);
GO
CREATE TABLE dbo.Earnings
(
Id BIGINT IDENTITY(1,1)
,EmployeeId BIGINT NOT NULL
,SalaryId BIGINT NOT NULL
,CONSTRAINT PK_Ear PRIMARY KEY (Id)
,CONSTRAINT FK_EmpEar FOREIGN KEY (EmployeeId)
REFERENCES Employee(Id)
,CONSTRAINT FK_SalEar FOREIGN KEY (SalaryId)
REFERENCES Salary(Id)
);
GO发布于 2019-04-11 19:52:57
是。多个表中的主键可以具有相同的列名。
表中的列名应该是唯一的。一个表只能有一个主键,因为它定义了Entity integrity。
如果这个问题是关于数据建模的父子关系,那么有两种类型。你在这上面读到了more。
https://stackoverflow.com/questions/55631622
复制相似问题