Дизайн базы данных для нескольких типов продуктов

Допустим, у меня есть база данных, содержащая четыре разных типа продуктов. Каждый тип содержит поля, которые сильно отличаются друг от друга. Первый тип продукции подразделяется на три категории. Второй тип продукции подразделяется на три категории. А вот третий и четвертый ни к чему не засекречены.

Как лучше всего построить структуру этой базы данных? Мне просто сделать четыре разных стола? А также, как я могу структурировать детали транзакции продукта с этими разными продуктами?


person Mai Mairel    schedule 12.01.2010    source источник


Ответы (4)


Вы также можете взглянуть на более сложную модель. Эта модель берет любое количество различных продуктов и назначает им свойства. Каждый продукт может иметь любое количество различных свойств.

PropertyType таблица содержит различные типы свойств, например [Name] = Height, Width, Color, MaxSpeed, Volume и т. Д. Trait - это описательное свойство, такое как цвет; измерение - это числовое свойство, например высота.

Каждый продукт может принадлежать ко многим категориям; категории могут быть вложенными.

product_nodel_01

person Damir Sudarevic    schedule 12.01.2010
comment
Как мне расширить этот шаблон, если у меня есть недвижимость с основными данными? Например, у меня есть тип свойства под названием шаблон. На самом деле это просто хранилище blob (у меня уже есть таблицы Measurement, Trait и File). К сожалению, нельзя помещать какие-либо файлы, кроме как выбирать файлы из списка. Мне нужно добавить шаблон таблицы? Общее измерение, характеристика, файл и шаблон. - person OddDev; 05.03.2017

Есть несколько способов сделать это ... самый простой - просто создать поле для каждой классификации и позволить им иметь значение NULL. Это будет учитывать третий и четвертый типы элементов, но может привести к строкам с NULL в этих столбцах (в этом нет ничего плохого).

Сложнее было бы использовать структуру, подобную наследованию. В этом случае у вас есть базовая таблица, в которой хранятся все общие свойства. Затем у вас есть «дочерние таблицы» для каждого типа объектов, которые связаны с базовой таблицей и хранят свойства для этих типов объектов. Чтобы получить полный список свойств, вы должны объединить родительскую и дочернюю таблицы вместе в представлении. Если вы знаете, какой объект ищете, вы можете просто связать соответствующую дочернюю таблицу. Если вы хотите просматривать продукты вместе, вы ОСТАВЛЯЕТЕ СОЕДИНЯТЬ все дочерние таблицы вместе, но это все равно приведет к появлению строк с NULL в представлении, которые вам нужно интерпретировать как принадлежащие к тому или иному типу.

LLBLGen изначально обрабатывает оба этих метода.

person Michael Bray    schedule 12.01.2010

Есть несколько способов сделать это, но самый простой из них:

Создайте таблицу товаров с общими атрибутами:

Product
-------------
PRODUCT_ID    NUMBER  (PK - This is what you'll foreign key against in other tables)
PRODUCT_NAME  VARCHAR(n)
PRODUCT_DESC  VARCHAR(n)
PRODUCT_TYPE  NUMBER  (FK into PRODUCT_TYPES)

Product_Types
-------------
PRODUCT_TYPE  NUMBER     (PK)
DESCRIPTION   VARCHAR(n)

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

Car_Products
-------------
PRODUCT_ID     NUMBER (PK, FK - to Product)
NUM_DOORS      NUMBER
NUM_CYLINDERS  NUMBER
MPG            NUMBER
... CUSTOM FIELDS ...

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

Cars
-------------
CREATE VIEW Cars AS (SELECT * FROM Car_Products cp JOIN Products p ON (cp.product_id = p.product_id));
person RC.    schedule 12.01.2010

Во-первых, это зависит от того, зависят ли ваши типы друг от друга и хранится ли информация, относящаяся к типу.
Но вы обязательно должны использовать единую таблицу продуктов.

person Patrick Honorez    schedule 12.01.2010