Дизайн таблиц БД с большим количеством атрибутов - PullRequest
0 голосов
/ 20 октября 2011

Я хотел бы знать, как должен выглядеть дизайн БД в этом случае.

enter image description here

Мне приходит в голову таблица для каждой сущности, например:

Engine  
EngineDesign  
ElectricalSystem  
Drivetrain  
etc.

Но это выглядит для меня как множество таблиц.Моя идея в порядке или чрезмерна?

А как же трансмиссия?Сегодня у нас 8 передач, но они могут меняться, когда производитель выпускает что-то другое.

Если это будет так:
Таблица (столбцы)

DrivetrainId | 1st | 2nd | 3rd | etc.

Или

Таблица (строки)

DrivetrainId | Gears
1            | 1st
2            | 2nd
3            | 3rd
etc.

Ответы [ 2 ]

2 голосов
/ 20 октября 2011

Вы не можете судить о правильности дизайна базы данных, считая таблицы. Нет такой вещи, как нормальная форма "слишком много таблиц" или нормальная форма "недостаточно таблиц". Также нет такой вещи, как нормальная форма «слишком много столбцов» или нормальная форма «недостаточно столбцов».

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

Очевидно, 8-я и 1-я передачи имеют разные значения. На самом деле, вы можете считать их взятыми из разных доменов. Я предполагаю, что 0,67 не является допустимым значением для 1-й передачи, а 4,85 не является допустимым значением для 8-й.

Когда они хранятся в разных столбцах,

  • Легко применить ограничение, что каждая строка имеет значение для каждого из 8 передаточных чисел, и
  • Ограничения на диапазон допустимых значений для каждого передаточного числа действительно просты. (Но вы должны учесть значения NULL для более поздних конструкций, имеющих только 5 или 6 передач, и это вызывает проблемы нормализации.)

Когда они хранятся в виде строк,

  • труднее - возможно, невозможно - применить ограничение, согласно которому каждое транспортное средство имеет значение для каждого из 8 передаточных чисел, и
  • ограничения на диапазон допустимых значений для каждого передаточного числа более сложны. (Особенно, когда вы позже приспосабливаетесь к конструкциям, которые имеют только 5 или 6 передач.)
0 голосов
/ 20 октября 2011

Моим первым инстинктом было бы что-то сделать с таблицей атрибутов и таблицей машин (я предполагаю, что машины?)

Attributes
AttributeId | AttributeCategory | AttributeDesc

Cars    
CarId | AttributeId | AttributeValue

Редактировать: см. Комментарии ниже @ Объяснение HLGEM, почему таблица Entity-Attribute-Value не очень хорошая идея в этом примере.

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