Как правильно создать отношение 1 ко многим в моей базе данных? - PullRequest
0 голосов
/ 10 ноября 2011

Если у меня есть следующие таблицы (с PK в скобках) ...

Store { [StoreCode], PhoneNumber, Address, ...}

StoreHours { [id], DayofWeek, Open, Close, ClosedDate }

Теперь я думаю, что у каждого магазина не будет одинаковых часов, и они не будут иметь одинаковые часы каждый день, и вместо того, чтобы делать несколько столбцов в таблице Магазина, такие как "OpenTimeA, OpenTimeB, OpenTimeC, CloseTimeA, CloseTimeB, ... ", тогда я мог бы создать таблицу отношений. Тем не менее, я не привык делать их и хочу идти вперед и сделать все правильно с первого раза. Вот что я хотел добавить к приведенным выше таблицам ...

Has_a { [StoreCode, id ] }

Мои вопросы, если я сделаю это таким образом ...

  1. Есть ли лучший способ назвать таблицу, чем Has_a, или я могу назвать ее так и использовать для множества различных типов отношений для магазина. Например, добавьте еще одну таблицу Managers и добавьте столбец в таблицу Has_a для идентификаторов менеджера.

    как ...

StoreInformation { [StoreCode], TimeId, ManagerId, ...}

Ответы [ 2 ]

2 голосов
/ 10 ноября 2011

Самая большая проблема с созданием общей таблицы Has_a для отслеживания такого рода отношений заключается в том, что вы не сможете использовать отношения внешнего ключа между вашими таблицами, поскольку вы можете связать только одну исходную таблицу стаблица единого назначения.В дополнение к этому, если вы не используете GUID для своих ключей, нет способа узнать, к какой таблице принадлежит тот или иной ключ, поэтому вы, вероятно, получите поддельные результаты.

Кроме того, для отношений один ко многимтакого рода промежуточная таблица не нужна.Вы можете добавить столбец StoreCode в таблицу StoreHours с соответствующими внешними ключами.Единственным случаем, когда вам нужны промежуточные таблицы, являются отношения «многие ко многим», которые, вероятно, не нужны в этом случае (если вы не хотите, чтобы несколько хранилищ совместно использовали одну и ту же запись StoreHours).

2 голосов
/ 10 ноября 2011

Для первого вопроса одним из возможных решений является (стандартное отношение 1-ко-многим):

Store 
   StoreCode 
   PhoneNumber 
   Address
   ...
   PRIMARY KEY (StoreCode)

StoreHours 
  StoreCode 
  DayOfWeek 
  OpenTime 
  CloseTime
  PRIMARY KEY (StoreCode, DayOfWeek)
  FOREIGN KEY (StoreCode)
    REFERENCES Store(StoreCode) 

Если вы заметили, что у вас есть много магазинов, которые открываются и закрываются в одно и то же время, все днинедели вы можете добавить таблицу Schedule, чтобы несколько магазинов могли совместно использовать одно и то же расписание.

Store 
   StoreCode 
   ScheduleId
   PhoneNumber 
   Address
   ...
   PRIMARY KEY (StoreCode)
   FOREIGN KEY (ScheduleId)
     REFERENCES Schedule(ScheduleId) 

Schedule
  ScheduleId
  ScheduleTitle
  PRIMARY KEY (ScheduleId)

ScheduleHours 
  ScheduleId 
  DayOfWeek 
  OpenTime 
  CloseTime
  PRIMARY KEY (ScheduleId, DayOfWeek)
  FOREIGN KEY (ScheduleId)
    REFERENCES Schedule(ScheduleId) 
...