Предложите схему / дизайн таблицы для моего требования - PullRequest
0 голосов
/ 04 января 2012

Вот таблица предметов, в которой хранится основная информация о предмете, такая как имя, цена, цвет и т. Д.

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

Итак, каков наилучший способ разработки таблиц для этого конкретного требования с учетом производительности?

Ответы [ 2 ]

3 голосов
/ 04 января 2012

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

Элемент

Id
Name
Price
colour

Материал

Id
Name
Description
...

Item_Material

Item_Id (FK to Item.Id)
Material_Id (FX to Material.Id)

Затем, если вы хотите получить все элементы с хлопком в них, вы должны написать запрос:

SELECT ITEM.*
FROM ITEM INNER JOIN ITEM_MATERIAL ON ITEM.ID = ITEM_MATERIAL.ITEM_ID
INNER JOIN MATERIAL ON MATERIAL.ID = ITEM_MATERIAL.MATERIAL_ID
WHERE MATERIAL.NAME = 'cotton'

Или для всех материалов, составляющих предмет:

SELECT MATERIAL.*
FROM ITEM INNER JOIN ITEM_MATERIAL ON ITEM.ID = ITEM_MATERIAL.ITEM_ID
INNER JOIN MATERIAL ON MATERIAL.ID = ITEM_MATERIAL.MATERIAL_ID
WHERE ITEM.NAME = 'handbag'
0 голосов
/ 04 января 2012

Все зависит от требований (как обычно); Такое решение обычно называют «спецификацией» и может быть довольно сложным. Здесь есть достойное описание концепций BoM здесь .

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

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

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