2015-03-28 5 views
0

У меня есть стол event и стол place. Некоторые events принадлежат некоторым places, а другие нет. Поэтому я решил создать другую таблицу: placed_event = events которая принадлежит place. Мой вопрос: должен ли я хранить его таким образом или иметь только таблицу placed_event и удалить таблицу events, так что некоторые placed_events будут иметь внешний ключ null - т. Е. Не принадлежали ни одному месту?рельсы модели: может быть иностранный ключ null?

+0

Почему они разделяют две модели, они оба являются событиями, и если событие имеет значение 'nil' в' place_id', тогда это имеет смысл, потому что оно действительно не принадлежит месту. –

ответ

1

Ответ: «Это зависит».

Если события могут быть в 0 или 1 месте, то таблица событий с внешним ключом в таблице мест будет работать нормально; как сказал Мохаммад в своем комментарии, если place_id null, событие просто не имеет места.

Если события могут быть распространены на более чем одном месте, например, на концерте со многими этапами, это имеет смысл иметь таблицу соединений.

Надеюсь, что помогает.

+0

да, но я хочу убедиться, что, если я сделаю реляционную таблицу, и события будут иметь много мест по категориям (и наоборот), все равно ОК, если какое-то событие не будет иметь место –

+0

, или я могу сделать это через много через, и это нормально, если событие будет иметь много мест только через одну категорию? –

+0

Не зная подробностей, любой из них, возможно, сработает. Вы ищете, чтобы ваше моделирование данных было настолько сложным, насколько вам нужно, но не более того, или просто, как вы можете сделать это, но все еще приспосабливать ваши потребности; и что ваш код достаточно защищен, чтобы обрабатывать такие вещи, как нулевые места для события и т. д. Имеет ли это смысл? – Matt

0

Если место has_many события и события belongs_to место, вы всегда можете оставить place_id пустым (nil). Это не обязательно для всех (или любых) ассоциаций (если вы явно не проверяете). Вы должны, конечно, проверить это в своем коде, чтобы вы не пытались получить доступ к данным из ассоциации, которая не существует (т. Е. Вызывает @event.place.name, когда place - nil).

Смежные вопросы