Я смотрю на существующую схему базы данных, и я немного запутался в отношении 1: 1 realtionship в примере ниже:Почему у вас соотношение 1: 1 - дизайн базы данных?
Event
-----
id int (PK)
Title varchar
Description varchar
OrganizerId int (FK)
EventSchedule
------------
id int (Pk)
EventId int (FK)
Start datetime
End datetime
RepeatRule varchar (ical format for repeating events)
Venue
-----
id int (PK)
EventId (FK)
Name varchar
Address1 varchar
Address2 varchar
City varchar
Region varchar
Postcode varchar
latitude float
longitude float
Событие только когда-либо происходит в одном месте, так что есть 1 : 1 между Событием и Местом. Аналогично, событие имеет отношение 1: 1 к EventSchedule - правило повторения повторяет повторяющиеся события.
Будет ли какая-либо причина или экземпляр для разделения таблиц как это? Что было бы неправильно в том, одну таблицу следующим образом:
Event
-----
id int (PK)
Title varchar
Description varchar
OrganizerId int (FK)
Start datetime
End datetime
RepeatRule varchar (ical format for repeating events)
Venue varchar
Address1 varchar
Address2 varchar
City varchar
Region varchar
Postcode varchar
latitude float
longitude float
Некоторые советуют на плюсы/минусы каждого проекта будут оценены именно в этом контексте, чтобы сделать схему достаточно гибкими для любого дальнейшего рассмотрения, хотя я могу» возможно, подумайте о какой-либо причине, когда вышеупомянутые отношения будут когда-либо изменяться в реальном мире, например, с 1: 1 до 1: N и т. д.
Предлагаемая схема представляется более гибкой и готова принять большинство типов событий, в то время как ваша кажется очень специализированной (я считаю маловероятным, что места будут использоваться только один раз, а событие, которое происходит более одного раза, не кажется для меня тоже необычно). Таким образом, ответ так часто, что правильный ответ, вероятно, полностью зависит от вашего случая использования ... – fvu
Как упоминалось в fvu, маловероятно, что в качестве места проведения будет использоваться только один раз. Его также наилучшая практика (3-я нормальная форма) для разделения всех типов сущностей. С надлежащей нормализованной базой данных будущее развитие и гибкость будут намного проще. Кроме того, вы сможете устранить сложные запросы при представлении отчетов о своих данных. Если ваши события могут происходить более одного раза и в разных местах, я бы зашел так далеко, как создать 3 таблицы. EventType (информация о событии, такая как описание, имя и т. Д.), События (взаимосвязь между местом и EventType, датами, конкретными деталями события и т. Д.) И местами. –
@fvu В таблице Местоположения содержится FK EventId, его соотношение 1: 1. Событие не может состояться в нескольких местах - если бы оно было тогда, оно было бы классифицировано как другое событие и новая запись для созданного. Если есть другое событие, которое происходит в том же месте, новая запись будет вставлена в таблицу места с теми же адресами. Так как это будет использовать одно и то же место? Аналогично, если событие имеет место более одного раза, детали будут включены внутри правила повторного воспроизведения, т. Е. Не было бы необходимости создавать строку в таблице EventSchedule для того же события. – adam78