2010-10-31 2 views
0

Скажем, у меня есть таблица под названием «Сотрудники», и у каждого сотрудника есть ключевой ключ (E_ID) , и у меня есть другая таблица под названием «Позиции», и у каждой позиции есть основной ключ (P_ID) , и у меня также есть другая таблица, называемая офисами, и каждый офис имеет идентификатор (O_ID)Как создать сложную таблицу в sqlServer?

Теперь я хочу создать таблицу с тремя основными ключами, которые являются (E_ID) и (P_ID) и (O_ID) ... , конечно, эти три значения должны быть сняты с первые три таблицы, но я просто не могу это сделать? , пожалуйста, помогите мне, потому что я нееееед это плохо спасибо verymuch

+0

Какой двигатель базы данных вы используете? MS SQL Server? Oracle? MySql? .... –

ответ

0

Если бы это был я, я бы просто добавил P_ID и O_ID к Сотрудникам. Та же позиция может быть заполнена несколькими сотрудниками, и в данном офисе может быть несколько сотрудников, но маловероятно (без использования технологии клонирования), чтобы один и тот же Employee нужно было реплицировать несколько раз - таким образом, просто добавьте P_ID и O_ID в Сотрудник, и я думаю, что тебе хорошо. Конечно, вам понадобятся ограничения внешнего ключа от Employee to Position (P_ID) и Office (O_ID).

EDIT: После некоторого размышления и напоминания о том, что у меня были рабочие места, где я заполнял несколько позиций (хотя и в том же месте), я полагаю, что возможно, что один человек может заполнить несколько позиций, которые могут находиться в разных местах ,

Если вы действительно настроены на наличие таблицы соединений между сотрудниками, позициями и офисами - ОК, создайте таблицу EmployeePositionOffice (или что-то в этом роде), которая содержит три столбца E_ID, P_ID и O_ID. Первичный ключ должен быть (E_ID, P_ID, O_ID), и каждое поле должно быть привязано к внешней привязке к соответствующей базовой таблице.

EDIT: Не уверен в синтаксисе SQL Server, но в Oracle первым будет что-то вроде:

ALTER TABLE EMPLOYEES 
    ADD (P_ID NUMBER REFERENCES POSITIONS(P_ID), 
     O_ID NUMBER REFERENCES OFFICES(O_ID)); 

в то время как второй будет что-то вроде

CREATE TABLE EMPLOYEES_POSISTIONS_OFFICES 
    (E_ID NUMBER REFERENCES EMPLOYEES(E_ID), 
    P_ID NUMBER REFERENCES POSITIONS(P_ID), 
    O_ID NUMBER REFERENCES OFFICES(O_ID), 
    PRIMARY KEY (E_ID, P_ID, O_ID)); 

Делите и наслаждайтесь.

+0

Не могли бы вы показать мне упрощенный код для этого? – Mouayad

+0

Потому что я пытался сделать это аналогичным образом, но я не смог – Mouayad

+0

Я подаю заявку на SQL Server 2008 – Mouayad

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