2010-01-12 3 views
4

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

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

ответ

0

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

0

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

Более сложным способом было бы использовать структуру, подобную наследованию. В этом случае у вас есть базовая таблица, в которой хранятся все общие свойства. Затем у вас есть «дочерние таблицы» для каждого типа объекта, который ссылается на базовую таблицу и сохраняет свойства для этих типов объектов. Чтобы получить полный список свойств, вы должны объединить родительскую и дочернюю таблицы вместе в представлении. Если вы знаете, какой объект вы ищете, вы можете просто связать соответствующую дочернюю таблицу. Если вы хотите просмотреть продукты вместе, то вы LEFT JOIN всех дочерних таблиц вместе, но это все равно приведет к строкам с NULL в представлении, которое нужно интерпретировать как этот тип или этот тип.

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

0

Существует более чем один способ сделать это, но наиболее прямолинейно было бы:

Создать таблицу продуктов с общими атрибутами:

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)); 
13

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

PropertyType Таблица содержит различные виды имущества, как [Name] = Высота, Ширина, Цвет, Макс. Скорость, Объем и т. Д.Trait - описательный объект, такой как цвет; измерение - числовое свойство, подобный высота.

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

product_nodel_01

+0

Очень хорошая модель, спасибо за обмен. –

+0

so nice answer ... – Mohammadreza

+0

Как бы расширить этот шаблон, если у меня есть свойство с основными данными? Например, у меня есть тип свойства, называемый «шаблон». На самом деле это просто хранилище blob (у меня уже есть таблицы Measurement, Trait и File). К сожалению, нельзя вносить любой файл, но выбирать из списка файлов. Нужно ли добавлять шаблон таблицы? Затем выполняются общие измерения, признаки, файлы и шаблоны. – OddDev

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