我应该为共享属性创建父表吗?

时间:2012-03-11 17:33:53

标签: mysql database parent auto-increment

我正在设计数据库(MySQL),其中有两个表Employees和Guests如下:

CREATE TABLE employee (
`EMP_ID` INT UNSIGNED NOT NULL AUTO_INCREMENT,
 `FIRST_NAME` VARCHAR(8) NOT NULL,
 `MID_NAME` VARCHAR(11), 
`LAST_NAME` VARCHAR(8) NOT NULL,
 `BIRTHDAY` DATE,
 `COUNTRY_ID` INT, 
`NAT_ID` VARCHAR(8) NOT NULL,
 `ID_EXP_DATE` DATE,
 `ID_TYPE` VARCHAR(8) NOT NULL,
 `Mobile` VARCHAR(8) NOT NULL,
 `PHONE` VARCHAR(8) NOT NULL, 
`EMAIL` VARCHAR(27) NOT NULL,
 `DEPT_ID` TINYINT NOT NULL references DEPARTMENT (ID), 
`POSITION` VARCHAR(20), 
`EMP_TYPE` TINYINT NOT NULL references EMP_TYPES (type),
 `JOINDATE` DATE,
 `SALARY` MEDIUMINT DEFAULT 0 ,
 `WORKEMAIL` VARCHAR(30), 
`MARITALSTAT` VARCHAR(7),
 `EMERGCONTACT` VARCHAR(22),
 `EMERG_CONT_PHN` VARCHAR(11), 
`GENDER` VARCHAR(6),
 `RESUMEURL` VARCHAR(60),
 `RELIGION` VARCHAR(11), 
PRIMARY KEY (`EMP_ID`));

CREATE TABLE Guest (
`guest_ID` INT UNSIGNED NOT NULL AUTO_INCREMENT,
 `FIRST_NAME` VARCHAR(8) NOT NULL, 
`MID_NAME` VARCHAR(11),
 `LAST_NAME` VARCHAR(8) NOT NULL, 
`BIRTHDAY` DATE, 
`COUNTRY_ID` INT,
 `NAT_ID` VARCHAR(8) NOT NULL, 
`ID_EXP_DATE` DATE, 
`ID_TYPE` VARCHAR(8) NOT NULL,
 `Mobile` VARCHAR(8) NOT NULL, 
`PHONE` VARCHAR(8) NOT NULL, 
`EMAIL` VARCHAR(27) NOT NULL, 
`WORKEMAIL` VARCHAR(30),
 `MARITALSTAT` VARCHAR(7), 
`EMERGCONTACT` VARCHAR(22),
 `EMERG_CONT_PHN` VARCHAR(11),
 `GENDER` VARCHAR(6),
`RELIGION` VARCHAR(11),
..................................// More attributes specific for guest table
 PRIMARY KEY (`Guest_ID`));

由于这两个表都有自动生成的主键,如果它们与人共享主键则不合适。是否一个好主意创建一个名为person的表,其中包含所有公共属性和两个子表作为Employee和Guest? 什么是实施这个的最佳实践?

谢谢,

1 个答案:

答案 0 :(得分:0)

有些事情需要考虑:

员工可以是客人,反之亦然? 如何比较它们?

如果这对您的应用程序起作用,我会考虑使用ParentTable,因为如果员工也是来宾,您可以轻松搞清楚。所以你可以很容易地比较它们。

另一方面,你可以做第三个选择: 一个叫做个人信息的表。 员工也有参考,客人也。 如果员工和访客都拒绝参加相同的条目,您就知道他们是同一个人。

架构:

是架构如:

表: 个人信息


ID(主键,auto inc)
并将您的所有信息放在这里

表员工


ID(主键,auto inc int)
PersonalInformation_ID(ForeignKey to PersonalInformation.ID)
在此处添加您的Employee特定列

表访客


ID(主键,auto inc int)
PersonalInformation_ID(ForeignKey to PersonalInformation.ID)
在此处添加您的Guest特定列

希望这有助于您实施,否则请再次询问。