2013-02-20 2 views
4

У меня есть две таблицы: Employee (ID, имя, адрес) и Store (ID, адрес), и я хотел бы записать информацию о людях, которые работают в каждом магазине.SQL две таблицы и создание таблицы ссылок

Я думал о создании новой таблицы, называемой таблицей Employee_List. Мои вопросы:

1- Employee_List и Employee имеет отношение «один ко многим», не так ли?

2- Employee_list для хранения имеет отношение «один к одному», не так ли?

3- Как определить внешние и первичные ключи для таблицы Employee_List?

enter image description here

+0

Почему вы не просто добавить атрибут worksIn для сотрудника? Значения атрибутов worksIn тогда являются значениями store_id. worksIn является внешним ключом в store (store_id). – muehlbau

+0

Если сотрудник работает в более чем одном магазине, то, что сказал @muehlbau, просто добавьте столбец store_id сотруднику – Popnoodles

+0

True @popnoodles. Если сотрудник может работать более чем в одном магазине, чем создавать новое отношение works_in (employee_id, store_id) с использованием первичного ключа (employee_id, store_id) и внешнего ключа для сотрудника (employee_id) и store (store_id). – muehlbau

ответ

9

Employee_list должны иметь:

  • employee_listid (INT PK)
  • EMPLOYEE_ID (INT FK)
  • store_id (INT FK)

Я бы рекомендовал изменения имя таблицы для представления составной таблицы, то есть EmployeeStores. Это позволит масштабировать вашу схему, сотрудники могут работать в нескольких магазинах.

В SQL Server:

CREATE TABLE EmployeeStores 
(
    EMPLOYEEStoreID INT IDENTITY, 
    EMPLOYEEID INT FOREIGN KEY REFERENCES Employee(employee_id), 
    STOREID INT FOREIGN KEY REFERENCES Store(store_id) 
) 
+1

Вам не нужен employee_listid. PK - employee_id, storeid. – muehlbau

+0

@muehlbau PK новой таблицы не будет employee_id – Popnoodles

+0

@muehlbau - Employee_id и storeID являются составными ключами. У вас все еще может быть EmployeeStoreID или EmployeeListID, что облегчит поиск записей в новой таблице. - Это не должно гарантировать нисходящее движение, так как оно совершенно справедливо. –