Научное название связи M:M но без промежуточной таблицы

fixxxer

К.О.
Партнер клуба
EAV - это отдельная вещь в себе. В нем ты оперируешь attribute-value pairs, а реляции строятся не на уровне самих данных, а на уровне модели пар attribute-value (еще это называется association lists). Так что стандартные реляции на это напрямую не ложатся, тут промежуточный шаг.
 

StalkerClasses

Новичок
EAV - это отдельная вещь в себе. В нем ты оперируешь attribute-value pairs, а реляции строятся не на уровне самих данных, а на уровне модели пар attribute-value (еще это называется association lists). Так что стандартные реляции на это напрямую не ложатся, тут промежуточный шаг.
не могу найти ничего про это в интернете про association lists
 

fixxxer

К.О.
Партнер клуба
Что, даже одноименную страницу в Википедии не нашел?
Считай, что это как ассоциативный массив в php, но строго типизированный (например, все значения - только строки. или только инты). Пары attribute-value. Из этого и строится EAV (E - это для какой сущности эти пары). В EAV конкретные имена и значения атрибутов инкапсулированы в association lists, реляции же строятся не для конкретных значений, а между сущностями и association lists их атрибутов.
 

StalkerClasses

Новичок
Что, даже одноименную страницу в Википедии не нашел?
Считай, что это как ассоциативный массив в php, но строго типизированный (например, все значения - только строки. или только инты). Пары attribute-value. Из этого и строится EAV (E - это для какой сущности эти пары). В EAV конкретные имена и значения атрибутов инкапсулированы в association lists, реляции же строятся не для конкретных значений, а между сущностями и association lists их атрибутов.
Я не совсем пойму чем ваше описание association lists отличается от обычного EAV...
За основу EAV я брал вот эту библиотеку: https://sunel.github.io/eav/master/installation.html

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

fixxxer

К.О.
Партнер клуба
Я не совсем пойму чем ваше описание association lists отличается от обычного EAV...
За основу EAV я брал вот эту библиотеку: https://sunel.github.io/eav/master/installation.html

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

StalkerClasses

Новичок
ничем, я и описываю обычный eav
Вот и сейчас я смотрю магазин на yii2 и там тоже характеристики можно выбрать только и все. А вот связь к другой таблице сделать нет возможности. Что бы я например мог в характеристике задать пользователя например (внешняя таблица). И как быть?
 

WMix

герр M:)ller
Партнер клуба
денормальное представление полиморфной связи таблиц к eav
 

fixxxer

К.О.
Партнер клуба
Вот и сейчас я смотрю магазин на yii2 и там тоже характеристики можно выбрать только и все. А вот связь к другой таблице сделать нет возможности. Что бы я например мог в характеристике задать пользователя например (внешняя таблица). И как быть?
Обычно в eav не пихают связи. Просто атрибуты, типа там размер и цвет товара. А такие вещи отдельно.
Конечно, если очень захочется, никто не мешает сделать и eav что-то вида entity - "userid" - 123123, но это такое - foreign key не сделаешь, индексы тоже (ну, в постгресе можно).

Смысл eav в том, что у тебя заранее неизвестно, какие будут attributes. Примерно в такой же ситуации используют json-поля или всякие hstore (или mongodb). Когда если делать все columns стандартным подходом, то получится таблица с 100000 columns, да еще и alter-ить придется, и почти все в каждой строке будут пустые - то есть ситуация "разреженности".
 

StalkerClasses

Новичок
Обычно в eav не пихают связи. Просто атрибуты, типа там размер и цвет товара. А такие вещи отдельно.
Конечно, если очень захочется, никто не мешает сделать и eav что-то вида entity - "userid" - 123123, но это такое - foreign key не сделаешь, индексы тоже (ну, в постгресе можно).

Смысл eav в том, что у тебя заранее неизвестно, какие будут attributes. Примерно в такой же ситуации используют json-поля или всякие hstore (или mongodb). Когда если делать все columns стандартным подходом, то получится таблица с 100000 columns, да еще и alter-ить придется, и почти все в каждой строке будут пустые - то есть ситуация "разреженности".
Мне не нравятся поля типа json - хотя бы потому что по ним нет возможности искать...
Я сделал атрибуты - они пишутся как полиморфная связь...
Но я бы хотел еще сделать возможность поддержку двух типов полей:

Связь на 1 запись (мне не нужен user_id в полноценном его понимании)
Связь к несокльким записям (допускаю что это может быть простое перечисление 1,2,3,7,9 id-шников в поле значения атрибута типа TEXT) - но для поиска нужен инструмент, который бы позволял делать фильтрацию по ним.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Кажется тред набирает обороты... *взял попкорн*
 

fixxxer

К.О.
Партнер клуба
Мне не нравятся поля типа json - хотя бы потому что по ним нет возможности искать...
Можно.
В mysql: https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html
А в постгресе это еще и в тыщу раз эффективнее, чем eav, если использовать jsonb и подходящие индексы. (в mysql можно извратиться с индексируемыми виртуальными столбцами, но это только для частных случаев сгодится)
 

StalkerClasses

Новичок
Можно.
В mysql: https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html
А в постгресе это еще и в тыщу раз эффективнее, чем eav, если использовать jsonb и подходящие индексы. (в mysql можно извратиться с индексируемыми виртуальными столбцами, но это только для частных случаев сгодится)
Как то замороченно.

Уточню немного у меня нет проблемы записать значение id-записи когда выбирается 1.
Но изначально тема называется связь M:M - без промежуточной таблица...
Хотелось бы увидеть наглядно примеры денормализации.
 

WMix

герр M:)ller
Партнер клуба
Как это технически выглядит?
Я не нашел внятных описаний по этой теме - подскажите куда копать.
есть куча статей про нормализацию, если пленку крутить назад, то придешь к денормальной форме. и да, такие таблицы используют поисковые движки (хочется заметить, что с json ты не прав). но это не значит что в таком виде имеет смысл хранить данные.
до тех пор пока ты это собираешься хранить и в таком виде обрабатывать это, это просто ад, или ацкое множество
 
Сверху