Дизайн базы данных для множества возможных атрибутов - PullRequest
2 голосов
/ 14 января 2011

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

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

Что-то новое для проектирования баз данных, и я хотел бы получить некоторые мнения.Спасибо заранее!

Ответы [ 4 ]

2 голосов
/ 14 января 2011

Ответ на ваш вопрос зависит от того, может ли каждое транспортное средство иметь более одного «цвета» или «топлива».

Если бы это был я, я бы сделал так, чтобы базовые таблицы выглядели так:

Таблица: Транспортные средства - Cols: идентификатор транспортного средства, имя и т. Д.

Таблица: цвета - Cols: colorID, name, rgbValue

Таблица: Топливо - Cols: fuelID, имя и т. Д.

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

Таблица: Транспортные средства - Cols: идентификатор транспортного средства, имя, colorID, fuelID и т. Д.

Если каждое транспортное средство может иметь 4 цвета и 3 топлива, и т. Д. Затем оставьте таблицу транспортных средств в покое и создайте таблицы "отношений", подобные этим:

Таблица: vehicle_has_color - Cols: vehicleID, colorID

Таблица: vehicle_has_fuel - Cols: vehicleID, fuelID

Надеюсь, это даст вам представление об идеальном дизайне базы данных и даст вам хорошее место для начала. Имейте в виду, что если у вас есть только 3 разных цвета, и они не будут меняться, вам может быть проще вставить название цвета непосредственно в таблицу Vehicle и выполнить выбор цвета в коде PHP или HTML. .

1 голос
/ 14 января 2011

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

TABLE (
  Primary Key ID
  Foreign Key Ref
  AttributeName
  AttributeValue
)
0 голосов
/ 14 января 2011

Посмотрите на следующие примеры SO: один , два , три .

0 голосов
/ 14 января 2011

Если ваша база данных должна отображать исторические изменения, то я бы предложил предложение № 2 (поместите их все в одну таблицу), но если вы просто хотите представить транспортные средства по цвету, трансмиссии, топливу и т. Д., То поместите атрибуты в отдельной таблице. Потому что тогда у вас есть отношения с идентификационными номерами, и если значение нужно изменить, вы вносите это изменение в таблицу атрибута, и она обновляется везде. Это также лучше для согласованности, например "29 миль на галлон Hwy" против "29 миль на галлон Hwy".

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