Как создать сложную таблицу в sqlServer? - PullRequest
0 голосов
/ 31 октября 2010

Допустим, у меня есть таблица с именем Employees, и у каждого сотрудника есть первичный ключ (E_ID) и у меня есть еще одна таблица с именем Positions, и у каждой позиции есть первичный ключ с именем (P_ID) и у меня также есть другая таблица, называемая офисами, и у каждого офиса есть идентификатор (O_ID)

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

1 Ответ

0 голосов
/ 31 октября 2010

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

РЕДАКТИРОВАТЬ: После некоторых размышлений и напоминая, что у меня были рабочие места, где я занимал несколько должностей (хотя и в одном и том же месте), я предполагаю, что вполне возможно, что один человек может занимать несколько должностей, которые могут находиться в разных местах.

Если вы действительно настроили наличие таблицы соединений между сотрудниками, позициями и офисами - хорошо, создайте таблицу с именем 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));

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

...