2012-03-11 17 views
0

私は以下のように2つのテーブル従業員やゲストを持っているデータベース(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`)); 

を自動主キーを生成して、それそれらが主キーを人から共有する場合、適切ではない。すべての共通属性と2つの子テーブルをEmployeeとGuestとして持つpersonという名前のテーブルを作成することをお勧めしますか? これを実装するベストプラクティスは何ですか?

従業員は、ゲストまたはその逆もできますか?A:

は、考慮すべきいくつかのものがありますが、

+0

直接関係はありませんが、あなたの欲望の影響を感じるのには大いに役立ちます。 http://blogs.tedneward.com/2006/06/26/The+Vietnam+Of+Computer+Science aspx – kamahl

答えて

0

をありがとうございましたか それらを比較するには?

これがアプリケーションの役割を果たす場合は、従業員もゲストであるかどうかを簡単に把握できるため、私は親テーブルを検討します。だから簡単に比較することができます。

一方、第3のオプション: 「個人情報」という表を作成することができます。 従業員にはこれも参照されています。 従業員とゲストの両方が同じエントリを参照する場合、それらが同じ人物であることがわかります。

スキーマ:

はいスキーマは同様である:

表: PersonalInformation


ID(主キー、オート株式会社)
そして、ここ

をすべてのあなたの情報を入れます

テーブル従業員


ID(主キー、自動INC int型)
PersonalInformation_ID(PersonalInformation.IDにForeignKeyの)
あなたの従業員の特定の列を追加します。ここで

表ユーザーレビュー


ID(主キー、 auto inc int)
PersonalInformation_ID(PersonalInformation.IDへの外部キー)
ゲスト特有の列をここに追加します

希望すると、これを実装するのに役立ちます。そうでない場合は、もう一度お問い合わせください。

+0

私は第3の選択肢がより適切になると思っています。これを実装するための提案はありますか? – Sasha

+0

更新された記事を参照してください! – kamahl

関連する問題