@hrvasiliy

Как решить проблему типов при отношении многие ко многим?

На скриншоте представлен пример связи многие ко многим. У товаров могут быть разные параметры, а у параметров могут быть разные товары.

5a2f3e3d97040268964226.png

Не могу разобраться, как решить проблему типов, если в таблице options поле value может быть разных типов? Например, у меня появляется запись, где value TEXT(2000), соответственно, это поле не влезет в текущий VARCHAR(255).

Единственное, что пришло в голову, сделать отдельную таблицу с полями product_id (INT), value (TEXT). Но что-то не особо мне нравится такое решение.

Кто-нибудь сталкивался с подобными проблемами?
  • Вопрос задан
  • 523 просмотра
Пригласить эксперта
Ответы на вопрос 2
@kttotto
пофиг на чем писать
Все зависит от того как Вы этот value собираетесь использовать.

Если не нужно будет по нему делать поиск, индексировать, то можно сделать MAX, и в нем же хранить тип значения, что-то вроде {"$type":"int","value":3}

Если по нему все же надо будет делать выборку, то я бы, наверное, сделал таблицу value с полями для всех возможно нужных типов и в options сделал два поля type и valueId ну и тогда я буду знать строку и колонку, где читать значение в таблице value.
Ответ написан
@miksir
IT
  • У вас неверный EAV. Value должно быть в product_option, иначе нарушается нормальная форма.
  • EAV вообще так себе паттерн, его даже часто называют анти-паттерном, и не только из-за проблем с типами, но и из-за проблем с фильтрацией по нескольким условиям.
  • Типы в EAV решают кто во что горазд. Кто-то отдельными таблицами, кто-то отдельным полем с указанием типа (и большой varchar value), кто-то просто текстом.


Советую посмотреть вот эти слайды
https://www.slideshare.net/billkarwin/practical-ob...
https://www.slideshare.net/billkarwin/sql-antipatt...
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы