Отношение ко многим ко многим?(Поиск подкатегории) - PullRequest
3 голосов
/ 09 марта 2012

У меня есть отношение многие ко многим, связанное таблицей "farmer2crop", связывающей фермеров с типами культур (например, рис, пшеница, кукуруза, специи и т. Д.)

например

FARMER2CROP
f2c_id
farmer_id
crop_id

Однако для некоторых культур требуется дополнительный поиск по подкатегориям, например, специи (тмин, перец и т. Д.)

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

Так что я мог бы иметь третий уровеньСтол «многие ко многим» соединяется с farmers2crops:

FARMERS2CROPS2SPICES
f2c_id
spice_id

Но это кажется немного запутанным, есть ли предложения по улучшению дизайна здесь - или это лучший компромисс?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 09 марта 2012

Я бы забыл вариант farmers2crops2spices, слишком сложный для нужд ИМО.

Простой вариант: добавить таблицу subcategory + столбец crop.subcategory_id (NULLable). Однако вы можете получить таблицы subsubcategory, subsubsubcategory и т. Д. (+ crop.subsubcategory_id и т. Д.).

Но я думаю, что в долгосрочной перспективе вам понадобится вложенный набор для ваших категорий культур. Я предлагаю использовать ORM, такой как Propel (если вы используете PHP), который абстрагирует все сложные вещи для эффективного использования такой структуры.

1 голос
/ 09 марта 2012

По логике у вас должны быть следующие таблицы:

FARMER (farmer_id, ...)

CROP (crop_id, farmer_id, ...)

CROPSUB (cropub_id, crop_id ...)

С этими тремя таблицами вы можете соединять все соединения (три точки означают другие возможные поля таблицы).

Я надеюсь, что это полезно для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...