Приложение MVC — где хранить справочные данные

Я работаю над приложением, использующим инфраструктуру Yii, поэтому его стиль MVC. У меня есть запись типа "человек", которая содержит информацию о членстве. Участники бывают двух типов: взрослые и дети. Что касается детей, НЕКОТОРЫХ из них мы знаем их возраст, и они делятся на возрастные группы. У возрастных групп есть названия (например, «8 и моложе»). Например, у Джона Смита и Джейн Смит двое детей, Джимми Смит и Джейни Смит. Джейни хочет участвовать в футбольной программе, поэтому нам нужно знать ее возраст и поместить ее в возрастную группу. Джимми занимается декоративно-прикладным искусством, поэтому нам не нужно знать его возраст, потому что его программа не разделена по возрасту. И мы не спрашиваем возраст взрослых.

Итак, вопрос: у меня есть несколько вариантов того, как я это храню. Я мог бы:

  • поместите поле int agegroup в таблицу лиц и определите значения как значения CONST, когда я определяю модель для людей (и, возможно, имею специальное значение для «неопределенного» - для взрослых. Затем мне нужно написать небольшой код для перевода константное значение для описательных меток.
  • поместите поле возрастной группы в таблицу лиц, как указано выше, но также добавьте в базу данных еще одну таблицу со справочными данными. Обеспечьте ссылочную целостность этой новой таблицы. Это поднимает другой вопрос: должен ли я создавать фиктивную запись в справочной таблице для случаев, когда я не знаю/не волнуюсь о возрастной группе, или я должен разрешить нулевые значения в поле возрастной группы таблицы людей?
  • другие?

Я знаю, что могу сделать любую из этих работ. Но я бы приветствовал совет о том, какой подход предпочтительнее и почему!


person johnmac    schedule 16.09.2012    source источник


Ответы (1)


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

Затем в вашей таблице «активности» вам нужно будет принудительно указать ссылку на таблицу возрастных групп (даже если только на «нулевую/нулевую» или «все возрастную» запись). Таким образом, вы можете создавать действия для возрастных групп - - футбол для детей до 8 лет, футбол для детей от 12 до 14 лет, ремесла для всех возрастов, искусство для детей от 18 лет и так далее.

person tuespetre    schedule 16.09.2012