我这样做是否正确?我知道它非常简单,但我现在正在获得一些DBA经验。
我有一个非静态的实体表,称为Emps。 Emps表存储所有员工个人信息,如电话号码等。然后我有一个名为EmployeeOfflineTraining的表。此表存储了所有经过叉车等课堂培训认证的员工。
我是否只是在EmployeeOfflineTraining表中放入一个外键,为该员工ID分配培训记录?
EMPS (电话,代理,姓名)
EmployeeOffLineTraining (GpcScore,Forklift Score,ForklifeCertified,EmpsId)
答案 0 :(得分:1)
我会创建一个间接表,将TrainingId映射到EmployeeOfflineTraining。这为您提供了灵活性,以便您需要引入多种培训类型 - 您只需在Training表中添加一行,而不必更改EmployeeOFflineTraining表。
您也可以考虑以同样的方式创建Agency
和EmployeeAgency
表。
CREATE TABLE Emps (
empId int unsigned not null auto_increment primary key,
phone varchar(255),
agency varchar(255),
name varchar(255)
);
CREATE TABLE Training (
trainingId int unsigned not null auto_increment primary key,
name varchar(255)
);
CREATE TABLE EmployeeOfflineTraining (
eotId int unsigned not null auto_increment primary key,
empId int unsigned not null,
trainingId int unsigned not null,
score smallint unsigned,
certifiedDate datetime,
foreign key (empId) references Emps(empId),
foreign key (trainingId) references Training(trainingId)
);
答案 1 :(得分:0)
是的。Wikipedia Entry On DB Normilzation您正在寻找的是Databse Normilzation
EmployeeID PrimaryKey
电话
EmployeeName
AgencyId
AgencyId PrimaryKey
AgencyName
EMployeeOfflineTrainingId PrimaryKey
EmployeeId ForiegnKey到员工表
GpcSocre
ForkliftScore
ForkliftCertified
<强> 修改 强> 正如Sean Lange所指出的那样,离线培训表存在一些主要问题,这些问题在本答复中没有解决。