2013-09-05 2 views
2

Я пытаюсь создать отношения один к одному между Branch to BranchEmployee и Employee в BranchEmployee. Идея состоит в том, чтобы разделить данные сотрудников, которые работают в филиале. Я использую SQL Server Management Studio, но я борюсь с этим. В BranchEmployee идентификатор BranchID и UserID объединяются вместе как первичный ключ для таблицы.Создайте отношения один к одному в студии управления сервером sql

Большое спасибо

снимок экрана, как показано ниже

enter image description here

ответ

1

Почему даже это сделать? Вы можете напрямую добавить внешний ключ к ветке в таблице Employee. Это удаляет дополнительную таблицу и упрощает вашу схему. Единственный случай, который я вижу, что ваш дизайн будет в порядке, если каждый сотрудник либо всегда переходит из ветки в отрасль, либо привязан к нескольким ветвям, но оба сценария кажутся маловероятными, тем более, что вы говорите, что хотите моделировать отношения 1-1, а не NN.

Короче говоря, оставьте эту таблицу BranchEmployees.

+0

a 1 до 1? Имеет ли филиал много сотрудников, но у сотрудника есть 1 филиал? – automatic

+0

Я цитирую OP об этом. – ApplePie

+0

Извините, что прокомментировал вопрос, а не ваш ответ – automatic

0

Скорее всего, вы действительно имеете отношения 1: N или отношения M: N.

Если пользователь может работать только для ОДНОГО и ТОЛЬКО ТОЛЬКО ВПЕРЕД (1: N), то вы можете либо поместить BranchID (FK) в таблицу Employee, либо использовать дополнительную таблицу BranchEmployee (Link). . Предоставлял уникальное ограничение на (BranchID, UserId) в таблице BranchEmployee (Link).

Большинство предпочитает помещать BranchID (FK) в таблицу Employee, поскольку это меньше таблиц.

Однако предположим, что вы хотите изолировать эти данные, и поместите некоторые метаданные об этих отношениях. Скажите: «Сотрудник начал работу в филиале на эту дату», aka EmployeeBranchStartDate.

Затем дополнительный стол имеет немного больше смысла. Заметьте, я сказал «немного».

BranchEmployee(Link) (Table) 
----------- 
BranchEmployeeLinkSurrogateKey 
BranchId (FK) 
UserId (FK) 
EmployeeBranchStartDate (datetime) 
(unique on BranchId, UserId) 

Лично я бы пошел с BranchEmployee (Link) сейчас. Потому что, если есть довольно хороший шанс, что мне может понадобиться Сотрудник для работы в 2-х филиалах (что изменило бы отношение к M: N), тогда мне не нужно перепроектировать все. Я могу просто удалить ограничение (уникальное по BranchId, UserId). Ака, небольшой профилактический дизайн, чтобы сохранить много страдания позже.