2014-02-17 2 views
2

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

**Computers has** 
Processor 
Ram 
HDD 
Monitor Size 
....etc 

**Mobile phone has** 
Display Size 
Network type 
OS 
Internal Memory 
....etc 

**Pendrive has** 
Capacity 
USB Version 
....etc 

и я должны хранить неограниченное количество продуктов, вместо того, чтобы создавать отдельные таблицы для каждого продукта, как создать структуру базы данных, чтобы хранить эту информацию на одном или фиксированном количестве таблиц (таблицы данных + таблицы сопоставления). (Я думаю, что данные Wordpress хранят данные такого типа формат, он использует несколько таблиц и сохраняет любое числовое поле, относящееся к сообщению/категории в этих таблицах). Любая помощь/идея для решения этой проблемы будет оценена по достоинству.

ответ

1

Рассмотрим создать три таблицы продукта, функции, product_feature и, возможно, product_photos

база данных товаров будет

pid, p_name, p_description, p_price, ... 
insert query 
INSERT INTO (p_name, p_description, p_price, ....) VALUES(?,?,?,...) 

особенность таблица

fid, f_name, f_description, ... 
insert query 
INSERT INTO (F_name, F_description, ....) VALUES(?,?,?,...) 

теперь таблица product_feature будет

id, pid, fid 
query for one product 
// say a product Id is 1 
INSERT INTO (pid, fid) VALUES(1, 10) 
INSERT INTO (pid, fid) VALUES(1, 15 
INSERT INTO (pid, fid) VALUES(1, 30) 

где PID и FID внешние ключи с отношениями, PHPMyAdmin может сделать это для вас , то вы можете добавить продукт с несколькими функциями

то, возможно, фото таблица

foto_id, photo_name, photo_path .... 

использовать InnoDB для всех столы

Позвольте мне знать, если вам нужна дополнительная помощь

+0

Хорошая стратегия, я продолжаю с этим, спасибо –

0

Вам необходимо создать таблицу таким образом, чтобы она охватывала все атрибуты для всех продуктов. Это поможет вам вставить любой тип продукта в эту таблицу. Но имейте в виду, что если есть 4 продукта с 10 различными атрибутами, вы создаете 40 столбцов и можете использовать только 10 для вставки данных в любой момент времени.

0

вы можете выбрать один подход, используемый некоторыми ОРМ, как спящий или сделать ctrine

https://docs.jboss.org/hibernate/orm/3.5/reference/en/html/inheritance.html

http://docs.doctrine-project.org/en/2.0.x/reference/inheritance-mapping.html

Ваш выбор зависит от ваших данных и как вы будете его использовать.

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

Если вы планируете, что все «устройства» должны делиться некоторыми полями, такими как «ref», «name», «description», «price», «weight» и т. Д., Вы должны использовать одну таблицу, потому что используйте простой список с все виды устройств будут легкими и дешевыми, но таблица может вырасти, если вы планируете добавлять больше типов устройств и свойств.

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

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

Так в основном вы можете сделать:

компьютерно>

Подвижная>

pendribe->

или:

Devices-> тип, цена, имя, процессор, RAM, внутренняя память, емкость, версия USB

или :

Devices-> тип, цена, название

компьютерно> Процессор, баран

Подвижная> внутреннюю память

pendribe-> Версия USB

или:

приборы -> id, цена, имя

attributes-> id, id_attribute, значение

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