Кто-то скажет мне, почему мой дизайн базы данных глуп, и как я могу это исправить - PullRequest
2 голосов
/ 05 января 2009

Итак, у меня есть эти машины, много разных типов. Каждый тип имеет свою собственную таблицу со многими атрибутами. Затем у меня есть таблица «транспортных средств», которая содержит идентификаторы и типы всех транспортных средств в каждой таблице. Транспортные средства могут иметь фотографии, поэтому у меня есть таблица «photos» с vehicle_id, связывающая фотографию с автомобилем, которому она принадлежит.

Теперь у каждого транспортного средства также есть список имеющегося у него оборудования, которое я храню в виде массива JSON в одном столбце «оборудование».

Примерно так: http://pastie.org/353195

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

Ответы [ 4 ]

12 голосов
/ 05 января 2009

У меня будет таблица оборудования, а затем таблица соединения между таблицей транспортных средств и таблицей оборудования с идентификатором equipment_id и vehicle_id.

Это дает вам отношение «многие ко многим» между транспортными средствами и оборудованием.

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

Хранение JSON (или XML) в базах данных, как правило, плохо, если в приложении нет ничего присущего, так что данные должны быть расширяемыми.

4 голосов
/ 05 января 2009

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

vehicles:
id | type
---------
1  | tank
2  | car
3  | boat
4  | car

equipment:
id | name
---------
1  | radio
2  | abs

vehicles_ equipment:
vehicles_id | equipment_id
2           | 1
2           | 2
1 голос
/ 05 января 2009

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

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

0 голосов
/ 05 января 2009

Почему бы не сделать оборудование столом, как остальные? Запрашивать оборудование как оно будет сложно, вы не сможете сделать это, используя только SQL, для десериализации всегда потребуется какое-нибудь клиентское приложение.

...