SilentSokolov
@SilentSokolov

Вопрос по проектированию БД

Ломаю голову как лучше спроектировать БД для разных типов предметов. Вот что дано:
1) Есть несколько типов предметов, большинство параметров одинаковы, различаются 2-5 характеристиками
2) Больше типов появляться не будут, возможно, но с минимальным процентом, появляться еще 2-3 параметра (не скоро, но нужно учесть)

Вообщем нужен оптимальный вариант таблиц.

Вот два варианта, которые кажутся оптимальными:
1) Разные таблицы
— Собрать все единые характеристики в одной таблице;
— Остальные характеристики разбить по разным таблицам, где таблица отвечает за свой «тип» предмета, с его характеритиками.

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

2) Собрать все в одной таблице.
— все в одной таблице, при всех возможных вариантов получилось 22 колонки;
Нравиться: все прозрачно, при минимальном проценте расширения проблем не предвидится, простые запросы при создании фильтров и все подобное.
Не нравиться: «не правильно»

Кто-нить может посоветоваться, может не все подводные камни вижу? Идеи, как реализовать лучше, в данном контексте?

EAV — отпадает сразу, так как все известно заранее и городить «подовсе» на мой взгляд глупо
NoSQL — нра, но не позволяют
  • Вопрос задан
  • 3254 просмотра
Пригласить эксперта
Ответы на вопрос 4
OnYourLips
@OnYourLips
Первый вариант.
Относительно излишней сложности — используйте наследование в ORM.
Ответ написан
EugeneOZ
@EugeneOZ
3) Сделать отдельную таблицу под каждый предмет.
Это единственно правильный вариант. С первым вариантом Вы будете всегда лишний запрос делать к той «общей» таблице. Да и всё общее всегда будет конфликтовать. Захотите вы переименовать свойство — а нельзя, потому что остальные предметы его тоже юзают. Добавите свойство с префиксом и постепенно вырастет фигня. Второй вариант вообще ппц :)
Ответ написан
shvedovka
@shvedovka
4. Вынести параметры в отдельную таблицу параметров.

Все что общее пусть будет в одной таблице, как в первом варианте. А будет еще вторая таблица, содержащая id предмета, идентификатор параметра и соответственно значение параметра.

Выбрать все параметры очень просто по id.

При поиске немного сложнее, но достаточно выбрать все пары идентификатора параметра и его значение. Ну соответственно ищем те предметы у которых совпало число искомых и найденных пар.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы