数据库架构(帮助)

时间:2018-05-11 19:01:08

标签: mysql sql database

我这样做是否正确?我知道它非常简单,但我现在正在获得一些DBA经验。

我有一个非静态的实体表,称为Emps。 Emps表存储所有员工个人信息,如电话号码等。然后我有一个名为EmployeeOfflineTraining的表。此表存储了所有经过叉车等课堂培训认证的员工。

我是否只是在EmployeeOfflineTraining表中放入一个外键,为该员工ID分配培训记录?

EMPS (电话,代理,姓名)

EmployeeOffLineTraining (GpcScore,Forklift Score,ForklifeCertified,EmpsId)

2 个答案:

答案 0 :(得分:1)

我会创建一个间接表,将TrainingId映射到EmployeeOfflineTraining。这为您提供了灵活性,以便您需要引入多种培训类型 - 您只需在Training表中添加一行,而不必更改EmployeeOFflineTraining表。

您也可以考虑以同样的方式创建AgencyEmployeeAgency表。

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

EmployeeOfflineTraining

EMployeeOfflineTrainingId PrimaryKey

EmployeeId ForiegnKey到员工表

GpcSocre

ForkliftScore

ForkliftCertified

<强> 修改 正如Sean Lange所指出的那样,离线培训表存在一些主要问题,这些问题在本答复中没有解决。