2012-03-11 69 views
0

我設計的數據庫(MySQL的),其中我有兩個表的員工和客人如下:我應該爲共享屬性創建父表嗎?

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創建,那麼這會是一個好主意嗎? 以及實施此操作的最佳做​​法是什麼?

謝謝你,

+0

沒有直接關係,但有很大的幫助獲得你的desicion的影響的感覺: http://blogs.tedneward.com/2006/06/26/The+Vietnam+Of+Computer+Science。 aspx – kamahl 2012-03-11 17:42:52

回答

0

有一些事情要考慮:

的員工可以客串,反之亦然? 如何比較它們?

如果這對你的應用程序起到了作用,我會考慮一個ParentTable,因爲如果一個Employee也是一個Guest,你可以很容易地弄清楚。所以你可以輕鬆地比較它們。

另一方面,您可以做第三個選項: 一個稱爲個人信息的表。 僱員也有此參考,客人也有。 如果一位員工和一位來賓都回避相同的條目,則知道他們是同一個人。

模式:

是該模式是這樣的:

表: PersonalInformation


ID(主鍵,自動增量)
,並把所有的信息在這裏

表員工


ID(主鍵,自動INC INT)
PersonalInformation_ID(ForeignKey的到PersonalInformation.ID)
添加您的員工在這裏特定的列

表客戶


ID(主鍵, auto inc int)
PersonalInformation_ID(ForeignKey to PersonalInformation.ID)
在此處添加您的訪客特定列

希望這可以幫助你實現它,否則再問一次。

+0

我認爲第三種選擇會更合適。任何建議來實現這個? – Sasha 2012-03-11 19:06:06

+0

看到更新後! – kamahl 2012-03-13 18:48:35