как прикрепить транспортные средства к моим продуктам в моей схеме базы данных - PullRequest
0 голосов
/ 07 ноября 2010

Я сделал базовую диаграмму базы данных год / марка / модель / подмодель транспортных средств здесь .Мне трудно думать о том, как мне нужно настроить свою базу данных, чтобы продукты знали, к каким транспортным средствам они относятся.

Я думаю, что мне нужно создать еще одну таблицу, которая послужит многимко многим отношениям между Products и VehicleYears.

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

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

Я уверен, что есть способ написать запрос для обработки категорий и подкатегорий, но есть ли лучший способ построить базу данных, чтобы повысить производительностьне проблема?Диаграмма моей категории / предмета здесь .

  • После получения отзыва вот мой пересмотренный дизайн здесь

Ответы [ 3 ]

1 голос
/ 07 ноября 2010

Ник, первое, что меня поражает, это то, что тебе нужно забыть о модельном годе в виде отдельной таблицы. Так что удалите VehicleYears и VehicleYears_VehicleMakes. Вам просто нужно добавить поле года в таблицу VehicleSubModels. Я думаю, что год лучше привязать к подмодели автомобиля, чем к марке автомобиля.

Я думаю, что вы пытаетесь найти связь между транспортными средствами и продуктами, много: многие между VehiclSubmodels и Items. Ваша новая таблица VehicleProducts будет иметь два поля (составной первичный ключ), состоящий из VehicleSubModelId и ItemId.

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

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

1 голос
/ 07 ноября 2010

Да, теоретически вам нужна промежуточная таблица от VehicleYears до Products.

Но я не понимаю ваших таблиц VehicleYears и VehicleYears_VehicleMakes. Что означают отношения VehicleYears_VehicleMakes? Что продавец сделал какие-нибудь автомобили в этом году? Я думаю, что отношения скорее субмодель-год, и если это так, вам даже не нужна таблица для ваших лет, просто поместите два столбца в таблицу субмоделей.

0 голосов
/ 08 ноября 2010

Я сделал что-то подобное для издателя, пытающегося прикрепить процедуры ремонта к продукту.Продукт идентифицируется первичным ключом из четырех частей: Год, Марка, Модель, Двигатель или YMME, и таблица транспортных средств выглядела так (упрощенно):

VEHICLES
year  integer
make   varchar
model  varchar
engine varchar

Таблица PARTS должна быть связанак сущности в таблице ТРАНСПОРТНЫЕ СРЕДСТВА.Деталь может работать с определенным годом, маркой и моделью, но не тогда, когда установлен конкретный двигатель.

В вашем случае вам нужно решить, какое сочетание атрибутов однозначно идентифицирует велосипед.Если вы отслеживаете велосипеды от нескольких производителей, вам нужно сделать.Если вещи меняются из года в год, вам нужен ГОД.Если есть разница от модели к модели, вам нужна МОДЕЛЬ.Если, скажем, деталь будет работать, если рама алюминиевая, а не стальная, вам понадобится FRAME_MATERIAL или FRAME_GAUGE, вместо ENGINE, или вам понадобится отдельная модель для алюминия, другаядля стали.

VEHICLES
year  
make 
model 
frame

Тогда вы могли бы просто иметь промежуточную таблицу:

VEHICLE_PARTS
partid  integer foreign key references PARTS
year
make
model
frame
...

или

VEHICLE_PARTS
partid  integer foreign key references PARTS
year
make
model   (frame material is handled by a separate model)

Ваша структура должна ответить на вопрос:часть работы с этим велосипедом?Простое присутствие partid в таблице VEHICLE_PARTS должно подразумевать, Да, это так.Вы действительно хотите избежать наличия поля «Исключения» в таблице VEHICLE_PARTS, где есть некоторая удобочитаемая нотация, в которой говорится, что деталь несовместима с рассматриваемым велосипедом, когда используются рули барана.Вы действительно должны создать отдельную модель для таких вещей.

...