2012-03-11 4 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 and Guest? и какова была бы лучшая практика для реализации этого?

Спасибо,

+0

Непосредственно, но помогает вам почувствовать влияние вашего чувства: http://blogs.tedneward.com/2006/06/26/The+Vietnam+Of+Computer+Science. aspx – kamahl

ответ

0

Есть некоторые вещи, чтобы рассмотреть следующие вопросы:

Может ли работник быть приглашенным или наоборот? Как с этим сравнивать?

Если это играет роль для вашего приложения, я бы рассмотрел ParentTable, потому что вы можете легко понять, если Employee также является Гостем или нет. Поэтому вы можете легко их сравнить.

С другой стороны, вы можете сделать третий вариант: Таблица под названием Персональная информация. Сотрудник имеет ссылку на это, гости также. Если Сотрудник и Гость оба реферируют к одной и той же записи, вы знаете, что они - одно и то же лицо.

Схема:

да схема похожа:

Таблица: Personalinformation


ID (первичный ключ, авто вкл)
и поставь вся информация здесь

Работник стола


ID (первичный ключ, авто вкл ИНТ)
PersonalInformation_ID (ForeignKey в PersonalInformation.ID)
Добавить Employee конкретные столбцы здесь

Таблица Гость


ID (первичный ключ, auto inc int)
PersonalInformation_ID (ForeignKey to PersonalInformation.ID)
Добавьте сюда свои конкретные столбцы

Надеюсь, это поможет вам реализовать его, иначе спросите еще раз.

+0

Я думаю, что третий вариант будет более уместным. Любые предложения по реализации этого? – Sasha

+0

см. Обновленный пост! – kamahl

Смежные вопросы