Проектирование модели данных и Предметной области
-
05-07-2019 - |
Вопрос
Я пытаюсь смоделировать продуктовый магазин.В магазине есть несколько "проходов".У каждого "прохода" есть группа "категорий" "товаров", которые в нем хранятся.Каждая "категория" может принадлежать только к одному "проходу".Каждый "товар" может иметь только одну "категорию".
Модель данных кажется мне прямолинейной:
- Таблица "проход" с идентификатором и ОПИСАНИЕМ
- Таблица "category" с идентификатором, ИМЕНЕМ и идентификатором AISLE_ID, который ссылается на таблицу "aisle"
- Таблица "item" с идентификатором, ИМЕНЕМ, ОПИСАНИЕМ и CATEGORY_ID, которая ссылается на "category"
Объектная модель - это то, где мне нужна помощь:
- Объект прохода может содержать список объектов категории и номенклатуры внутри себя.
- Объект прохода может содержать список объектов категории.Объект категории может содержать список объектов Item внутри себя.
- В проходе может быть список товарных объектов.Объект категории может содержать список объектов Item.
В каждом случае Элемент логически будет иметь внутри себя объект категории.У меня есть DAO для каждого объекта домена, поэтому в зависимости от того, как это сделано, sql немного меняется.Есть какие-нибудь мысли?
Решение
Я голосую за выбор №2.Имеет больше смысла, чем # 1 или # 3.
Считаете ли вы, что отношения должны быть двунаправленными?Должен ли Товар иметь возможность определить, кто является его родительской категорией и родственным отделом?
Другие советы
Я бы выбрал вариант № 2.
Главная забота о Проходе заключается в том, какие Категории содержатся в нем.Класс Category должен определять, какие Элементы являются членами.Это обеспечивает согласованность уровней абстракции в каждом объекте - где Aisle является объектом более высокого уровня, Category - немного более детализированным уровнем, а item - наиболее детализированным.
Номер 2 имеет наибольший смысл, если это ваши единственные 3 варианта.
Я думаю, если бы я создавал эту модель, я бы использовал следующую модель (небольшая модификация, просто стараясь оставаться как можно ближе к вашим идеям).:
Объект aisle может содержать список объектов категории, объект category может содержать список объектов item внутри него, и товар связан с категорией И проходом.
Моя модификация, похоже, больше касается данных.
Причина, по которой я бы это сделал, заключается в том, что кто-то говорит: "Эй, я ищу этот конкретный товар, в каком проходе он находится?" - 1 поиск даст вам ответ.принимая во внимание, что с вашей моделью данных вам потребуется 2 поиска.
По крайней мере, так я об этом думаю.