powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Связь таблиц-сущностей с тегами: общая таблица связей или отдельные таблицы связей ?
25 сообщений из 57, страница 2 из 3
Связь таблиц-сущностей с тегами: общая таблица связей или отдельные таблицы связей ?
    #40012402
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
graycodeПоиск осуществляется в документах и индексы строятся полнотекстовые по документам.По индивидуальным строковым полям сущностей тоже строятся. Например, название новости/статьи, abstract новости/статьи и т.д. И эти поля, как правило, имеют большую релевантность.
А в PostgreSQL один полнотекстовый индекс можно строить сразу по нескольким текстовым полям сущности (и даже из разных таблиц).

graycodeОткуда потребление дискового пространства?
Тег по своей природе это короткий строковый неструктурированный классификатор, я бы даже сказал индексатор, выносить его в отдельную сущность не имеет никакого смысла. 1 ) В случае с отдельной таблицей тегов в таблице связей (entity_type, entity_id, tag_id ) мы храним идентификатор тега (целое число)
2 ) В случае без таблицы тегов в таблице связей (entity_type, entity_id, tag ) мы храним строку
3 ) Строка занимает намного больше места, чем число

graycodeЗачем одним запросом? Пройтись в цикле по сущностям никак?Можно и в цикле. Но одним запросом (без UNION) будет быстрее. К тому же, вы сказали, что это возможно:

> Вопрос №1. В социальных сетях поиск осуществляется одним запросом по всем разделам или несколькими запросами (по запросу на каждый раздел) ?
> Какая разница, и то и другое реализуется

Вопрос : " одним запросом по всем разделам " реализуется как ?
...
Рейтинг: 0 / 0
Связь таблиц-сущностей с тегами: общая таблица связей или отдельные таблицы связей ?
    #40012403
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
graycodeИли у вас все таки одна сущность на самом деле?
Для разных вам все равно создавать на выдачу в веб разные модели или у вас одна модель и один компонент для всех сущностей? Сущностей-таблиц много. Модели разные. Компонент один.
В том-то и дело, что разные модели - это только на выдачу. А выборку эффективнее (быстрее) делать одним запросом
...
Рейтинг: 0 / 0
Связь таблиц-сущностей с тегами: общая таблица связей или отдельные таблицы связей ?
    #40012412
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cyrax_02
1[/b]) В случае с отдельной таблицей тегов в таблице связей (entity_type, entity_id, tag_id ) мы храним идентификатор тега (целое число)
2 ) В случае без таблицы тегов в таблице связей (entity_type, entity_id, tag ) мы храним строку
3 ) Строка занимает намного больше места, чем число

Во первых, короткая строка не занимает намного больше места, возьмем к примеру тег #sqlru и сравним с number(38), во вторых, вы имеете в нагрузку PK, индекс на PK, FK и индекс на FK и это помимо индекса на тег и экономия места становится совсем сомнительной.

Cyrax_02
Можно и в цикле. Но одним запросом (без UNION) будет быстрее. К тому же, вы сказали, что это возможно:

Что мешает сделать один заброс с left join-ами, если уж решили для каждой сущности иметь свою таблицу, когда будете собирать их вместе, будете иметь дело с left join-ами или union-ами. Но все это дележка шкуры неубитого медведя, экономия памяти, быстрее/медленнее, без постановки задачи все это не имеет смысла, архитектуру можно строить только от конкретики, а не от балды.

Cyrax_02
Вопрос : " одним запросом по всем разделам " реализуется как ?

Для пользователя, легко и просто, он вводит условие в поле для поиска и нажимает кнопочку "искать"))
...
Рейтинг: 0 / 0
Связь таблиц-сущностей с тегами: общая таблица связей или отдельные таблицы связей ?
    #40012413
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cyrax_02
А выборку эффективнее (быстрее) делать одним запросом

Не факт и не всегда и ничего не мешает сделать выборку из (entity_type, entity_id, tag) одним запросом или вам что то мешает? Тем более если у вас имеет место pagination, нужно будет делать выборку для определения общего количества элементов для каждого типа сущности, т.е. количество с группировкой по entity_type.
...
Рейтинг: 0 / 0
Связь таблиц-сущностей с тегами: общая таблица связей или отдельные таблицы связей ?
    #40012420
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
graycodeCyrax_02 1 ) В случае с отдельной таблицей тегов в таблице связей (entity_type, entity_id, tag_id) мы храним идентификатор тега (целое число)
2 ) В случае без таблицы тегов в таблице связей (entity_type, entity_id, tag) мы храним строку
3 ) Строка занимает намного больше места, чем числоВо первых, короткая строка не занимает намного больше места, возьмем к примеру тег #sqlru и сравним с number(38), во вторых, вы имеете в нагрузку PK, индекс на PK, FK и индекс на FK и это помимо индекса на тег и экономия места становится совсем сомнительной.
1 ) Не знаю, как в Oracle, но в MySQL и PostgreSQL целочисленный тип с фиксированной точностью занимает 2,4 или 8 байт.
Для хранения тегов достаточно 2 или 4 байтов (в зависимости от предполагаемого количества уникальных тегов).
2 ) Для хранения тега " sqlru " в строковом формате переменной длины потребуется 4 байта + байтовая длина строки = 9 байт
3 ) Для хранения русскоязычных тегов в кодировке UTF-8 (коих будет в десятки раз больше, возьмём, к примеру, тег " домру " той же самой длины), потребуется: 4 + 10 = 14 байт
4 ) Русскоязычные теги (как и русские слова) в среднем в 1.5 раза длиньше латинских: 14 * 1.5 = 21 байт .

Выводы :
1 ) для преобладающего большинства коротких тегов потребуется в 5-10 раз больше дисковой памяти
2 ) для преобладающего большинства средних и длинных тегов потребуется в 10-30 раз больше дисковой памяти.

Что касается PK, FK и индексов :
1 ) Индекс на FK в таблице связей (т.е. индекс на поле tag_id или tag ) будет присутствовать в любом случае, т.к. по этому полю выполняется поиск (выборка)
2 ) Индекс по строковому полю tag будет занимать гораздо больше места на диске, чем индекс по числовому полю tag_id
3 ) в случае со строковым полем tag дополнительный составной индекс будет включать строковое поле tag и числовое поле entity_type_id , тогда как в случае с tag_id составной индекс будет включать два числовых поля tag_id и entity_type_id (займёт меньше места)

4 ) Наличие двух дополнительных числовых индексов в случае с отдельной таблицей индексов будет давать выигрыш (если вообще будет давать с учётом пункта №3) только до тех пор, пока общее число экземпляров тегов по всем сущностям будет соразмерно общему числу уникальных тегов в таблице тегов . Иными словами, в таблицу тегов добавляются только новые (уникальные) теги, а в таблицу связей - и новые, и повторяющиеся. Когда повторяющихся тегов станет чуть больше, чем число тегов в таблице тегов, то это самое преимущество по индексам (повторюсь, если оно вообще будет) обнулится ( на практике число тегов с повторами в сотни и тысячи раз превышает число уникальных тегов ). И начиная с этого момента будет играть роль исключительно вышерассмотренный фактор объёма памяти, требуемого под хранение строк и чисел ( разница в 5-30 раз ).

graycodeТем более если у вас имеет место pagination, нужно будет делать выборку для определения общего количества элементов для каждого типа сущности, т.е. количество с группировкой по entity_type.Пагинация да, будет. Но запрос на пагинацию почти идентичен запросу на выборку. Вопрос в том, каким будет этот самый запрос на выборку.

graycodeЧто мешает сделать один заброс с left join-ами, если уж решили для каждой сущности иметь свою таблицу, когда будете собирать их вместе, будете иметь дело с left join-ами или union-ами...
Не факт и не всегда и ничего не мешает сделать выборку из (entity_type, entity_id, tag) одним запросом или вам что то мешает?Вопрос касается не организации таблиц-сущностей (здесь да, вопрос решён, отдельные таблицы), а организации связи этих таблиц-сущностей с тегами - вот здесь вопрос не решён. Мы рассматриваем ваш вариант с общей таблицей (entity_type, entity_id, tag) и задаёмся вопросом: как из этой таблицы тегов одним запросом (без UNION) получить N сущностей типа 1 , N сущностей типа 2 и N сущностей типа 3 , связанных с указанным тегом ? Выше вы написали, что это возможно. Как ?
...
Рейтинг: 0 / 0
Связь таблиц-сущностей с тегами: общая таблица связей или отдельные таблицы связей ?
    #40012424
stenford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cyrax_02
Вариант, предлагаемый Dimitry Sibiryakov , - это либо TPT , либо TPH (какого именно варианта он придерживается, пока неизвестно, но мы терпеливые).
По скорости выборки лидируют варианты TPH и TPC , по скорости добавления/удаления/обновления - TPC (меньше индексов). По минимальному объёму занимаемого дискового пространства лидирует TPC , за ним следует TPT. Как мы видим, по всем 3 озвученным критериям лидирует вариант TPC , на котором мы и остановились.

по "скорости" тут будет зависеть от конкретной системы. По приведенной тобой классификации TPT имеет смысл когда большинство характеристик для всех сущностей одинаковы, а разных мало или вообще часто отсутствуют, и запросы в основном идут только по общим характеристикам. TPC имеет смысл когда общих аттрибутов мало и запросы в основном идут по всем аттрибутам. Какая именно ситуация тут знаешь только ты. На практике-же для "скорости" это не будет иметь никакой разницы если только ты не пишешь второй фейсбук. Джойн на базовую таблицу не окажет никакого практического влияния на скорость, как и индексы. Куда важнее поддержка системы и удобство работы с ней другими людьми, нелогично сделаная схема с прицелом "на скорость" в ущерб логичности доменной модели никогда не приводит ни к чему хорошему, включая и собственно "скорость"
...
Рейтинг: 0 / 0
Связь таблиц-сущностей с тегами: общая таблица связей или отдельные таблицы связей ?
    #40012544
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cyrax_02
1 ) Не знаю, как в Oracle, но в MySQL и PostgreSQL целочисленный тип с фиксированной точностью занимает 2,4 или 8 байт.
Для хранения тегов достаточно 2 или 4 байтов (в зависимости от предполагаемого количества уникальных тегов).
2 ) Для хранения тега " sqlru " в строковом формате переменной длины потребуется 4 байта + байтовая длина строки = 9 байт
3 ) Для хранения русскоязычных тегов в кодировке UTF-8 (коих будет в десятки раз больше, возьмём, к примеру, тег " домру " той же самой длины), потребуется: 4 + 10 = 14 байт
4 ) Русскоязычные теги (как и русские слова) в среднем в 1.5 раза длиньше латинских: 14 * 1.5 = 21 байт .

Выводы :
1 ) для преобладающего большинства коротких тегов потребуется в 5-10 раз больше дисковой памяти
2 ) для преобладающего большинства средних и длинных тегов потребуется в 10-30 раз больше дисковой памяти.

Что касается PK, FK и индексов :
1 ) Индекс на FK в таблице связей (т.е. индекс на поле tag_id или tag ) будет присутствовать в любом случае, т.к. по этому полю выполняется поиск (выборка)
2 ) Индекс по строковому полю tag будет занимать гораздо больше места на диске, чем индекс по числовому полю tag_id
3 ) в случае со строковым полем tag дополнительный составной индекс будет включать строковое поле tag и числовое поле entity_type_id , тогда как в случае с tag_id составной индекс будет включать два числовых поля tag_id и entity_type_id (займёт меньше места)

4 ) Наличие двух дополнительных числовых индексов в случае с отдельной таблицей индексов будет давать выигрыш (если вообще будет давать с учётом пункта №3) только до тех пор, пока общее число экземпляров тегов по всем сущностям будет соразмерно общему числу уникальных тегов в таблице тегов . Иными словами, в таблицу тегов добавляются только новые (уникальные) теги, а в таблицу связей - и новые, и повторяющиеся. Когда повторяющихся тегов станет чуть больше, чем число тегов в таблице тегов, то это самое преимущество по индексам (повторюсь, если оно вообще будет) обнулится ( на практике число тегов с повторами в сотни и тысячи раз превышает число уникальных тегов ). И начиная с этого момента будет играть роль исключительно вышерассмотренный фактор объёма памяти, требуемого под хранение строк и чисел ( разница в 5-30 раз ).

Для хранения тегов достаточно первичного ключа в два байта длиной, нормальное такое утверждение))))), вернемся в реальность, в реальности 8 байт и 20 - 40 байт, разница даже не на порядок, это экономия на спичках , какой у вас планируется объем и его прирост?

Cyrax_02
Пагинация да, будет. Но запрос на пагинацию почти идентичен запросу на выборку. Вопрос в том, каким будет этот самый запрос на выборку.

Динамически формируемым в зависимости от условий.

Cyrax_02
Вопрос касается не организации таблиц-сущностей (здесь да, вопрос решён, отдельные таблицы), а организации связи этих таблиц-сущностей с тегами - вот здесь вопрос не решён.

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

Cyrax_02
Мы рассматриваем ваш вариант с общей таблицей (entity_type, entity_id, tag) и задаёмся вопросом: как из этой таблицы тегов одним запросом (без UNION) получить N сущностей типа 1 , N сущностей типа 2 и N сущностей типа 3 , связанных с указанным тегом ? Выше вы написали, что это возможно. Как ?

О, уже новые условия появляются, откуда то взялось требование получить именно N сущностей)) Одну каждого типа получить просто - группировка и min/max, N записей по каждому типу тоже просто, сейчас любая нормальная СУБД имеет механизмы получения TOP N записей в пределах групп. Вариант (entity_type, entity_id, tag_id) в этом плане ничем, кроме дополнительного соединения со справочником тегов, не отличается.

PS: вариант все сущности в одной таблице вам предложили сразу, вариант выделить общую часть сущностей, а частности в доп таблицах тоже уже предлагали, в догонку еще вариант помещения тегов в виде текста (например массив json) в поле сущности и кстати в вашей ситуации возможно самый правильный вариант)), итого количество различных вариантов и их комбинаций уже превышает десяток, выбирайте любой в зависимости от функционала и расчетной нагрузки.
...
Рейтинг: 0 / 0
Связь таблиц-сущностей с тегами: общая таблица связей или отдельные таблицы связей ?
    #40012553
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stenfordTPC имеет смысл когда общих аттрибутов мало и запросы в основном идут по всем аттрибутам. Какая именно ситуация тут знаешь только ты.Наш случай.
Важно учитывать, что поиск должен выполняться по индексу, а значит, все или почти все поисковые поля должны быть в одной таблице ( TPC или TPH ).

stenfordНа практике-же для "скорости" это не будет иметь никакой разницы если только ты не пишешь второй фейсбук. Джойн на базовую таблицу не окажет никакого практического влияния на скорость, как и индексы.Если выборка выполняется по полям, половина из которых расположена в базовой таблице, а половина - в дочерней ( TPT ), то скорость такого запроса сильно просядет, даже при наличии индексов в обоих таблицах.

stenford...нелогично сделаная схема с прицелом "на скорость" в ущерб логичности доменной модели никогда не приводит ни к чему хорошему, включая и собственно "скорость" Отдельные таблицы связей с тегами для каждого вида сущностей (entity1_id, tag_id) , (entity2_id, tag_id) сюда тоже относятся ?
...
Рейтинг: 0 / 0
Связь таблиц-сущностей с тегами: общая таблица связей или отдельные таблицы связей ?
    #40012620
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторДля хранения тегов достаточно первичного ключа в два байта длиной, нормальное такое утверждение))))), вернемся в реальность, в реальности 8 байт и 20 - 40 байт, разница даже не на порядок, это экономия на спичках, какой у вас планируется объем и его прирост?8 байт точно не нужно. Количество уникальных тегов вряд ли превысит 4 миллиарда штук. Даже если взять 4 байта (а не 2), то разница между 4 байтами и 20-40 байтами составляет почти порядок (двусловных русских тегов будет больше, чем однословных).

авторНа самом деле, если как вы написали, разные типы сущностей в конечном итоге пользователю впихиваются в один компонент, то разделение сущностей на разные таблицы и модели вызывает очень большое сомнение.Вы предлагаете строить один индекс сразу на 2 таблицы ( TPT ) ?
Или строить одну широкую-широкую таблицу с кучей "дырок" и большим числом индексов в ней ( TPH ) ?

авторN записей по каждому типу тоже просто, сейчас любая нормальная СУБД имеет механизмы получения TOP N записей в пределах группВ этом случае запрос на выборку сущностей типов 1,2,3, связанных с некоторым тегом, будет таким:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT {TOP N} tags.entity_type_id, поля сущности 1, поля сущности 2, поля сущности 3 FROM tags
LEFT JOIN entity1 ON (entity1.id = tags.entity_id)
LEFT JOIN entity2 ON (entity2.id = tags.entity_id)
LEFT JOIN entity3 ON (entity3.id = tags.entity_id)
WHERE entity_type_id IN (1, 2, 3) AND (фильтр по tag_id или tag) AND
      ((условия по полям сущности 1) OR (условия по полям сущности 2) OR (условия по полям сущности 3))
GROUP BY entity_type_id
ORDER BY IFNULL(entity1.date, IFNULL(entity2.date, entity3.date)) DESC

Нехороший запрос...
...
Рейтинг: 0 / 0
Связь таблиц-сущностей с тегами: общая таблица связей или отдельные таблицы связей ?
    #40012630
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cyrax_02Нехороший запрос...

А я же предупреждал...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Связь таблиц-сущностей с тегами: общая таблица связей или отдельные таблицы связей ?
    #40012631
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Альтернативный вариант:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT поля сущности 1 FROM entity1 INNER JOIN tags ON (tags.entity_type = 1 AND tags.entity_id = entity1.id)
WHERE (условия по полям сущности 1) AND (фильтр по tag_id или tag) ORDER BY entity1.date DESC LIMIT N
UNION
SELECT поля сущности 2 FROM entity2 INNER JOIN tags ON (tags.entity_type = 2 AND tags.entity_id = entity2.id)
WHERE (условия по полям сущности 2) AND (фильтр по tag_id или tag) ORDER BY entity2.date DESC LIMIT N
UNION
SELECT поля сущности 3 FROM entity3 INNER JOIN tags ON (tags.entity_type = 3 AND tags.entity_id = entity3.id)
WHERE (условия по полям сущности 3) AND (фильтр по tag_id или tag) ORDER BY entity3.date DESC LIMIT N
...
Рейтинг: 0 / 0
Связь таблиц-сущностей с тегами: общая таблица связей или отдельные таблицы связей ?
    #40012637
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Cyrax_02Нехороший запрос...
А я же предупреждал...Вообще-то, это ваш вариант (общая таблица связей с тегами).

авторPS: вариант все сущности в одной таблице вам предложили сразу, вариант выделить общую часть сущностей, а частности в доп таблицах тоже уже предлагали, в догонку еще вариант помещения тегов в виде текста (например массив json) в поле сущности и кстати в вашей ситуации возможно самый правильный вариант)), итого количество различных вариантов и их комбинаций уже превышает десяток, выбирайте любой в зависимости от функционала и расчетной нагрузки. Все сущности в одной таблице - не вариант, т.к. сущностей много + индивидуальных полей много + фильтрация будет выполняться преимущественно по индивидуальным полям.
Общая таблица + таблицы с частностями - возникает проблема фильтрации одновременно по общим полям и по индивидуальным полям.

JSON-массив тегов в таблицах сущностей - возможно, только вместо самих тегов лучше хранить идентификаторы (JSON-массив идентификаторов тегов) + в бинарной форме (jsonb в PostgreSQL), т.к. в среднем числовое представление идентификаторов будет короче, чем символьное.
...
Рейтинг: 0 / 0
Связь таблиц-сущностей с тегами: общая таблица связей или отдельные таблицы связей ?
    #40012656
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы бы определились: идёт у вас фильтрация по "индивидуальным полям" или по тэгам...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Связь таблиц-сущностей с тегами: общая таблица связей или отдельные таблицы связей ?
    #40012712
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovВы бы определились: идёт у вас фильтрация по "индивидуальным полям" или по тэгам... При поиске сущностей по тегам всегда будет выполняться:
1 ) фильтрация по индивидуальным полям (об этом написал жирным шрифтом в самом первом посте)
2 ) упорядочивание, как минимум, по дате (для реализации TOP N, а также при пагинации)
3 ) Фильтрация по самим тегам - само собой разумеется

Все поля (индивидуальные + общие) расположены в сущностях-таблицах entity1 , entity2 , ...
Т.е. либо UNION N штук, либо GROUP + JOIN N штук. Выше привёл 2 запроса, реализующие эти два варианта.
...
Рейтинг: 0 / 0
Связь таблиц-сущностей с тегами: общая таблица связей или отдельные таблицы связей ?
    #40012802
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cyrax_02
8 байт точно не нужно. Количество уникальных тегов вряд ли превысит 4 миллиарда штук. Даже если взять 4 байта (а не 2), то разница между 4 байтами и 20-40 байтами составляет почти порядок (двусловных русских тегов будет больше, чем однословных).

На данном этапе это рассуждения о том как сэкономить на спичках, у вас есть понимание каким образом вы добьетесь повторяемости тегов, на сколько тегов будет меньше чем экземпляров сущностей, сколько всего будет тегов, какой будет прирост сущностей/тегов, посчитали реальную экономию места или провели натурный эксперимент? Пока я вижу аргумент - я так думаю, ну хорошо, как думаете так и делайте)) возможно угадаете или вообще потом выкинете теги за ненадобностью, потому что в вашей задаче они явно лишние))

Cyrax_02
Вы предлагаете строить один индекс сразу на 2 таблицы ( TPT ) ?
Или строить одну широкую-широкую таблицу с кучей "дырок" и большим числом индексов в ней ( TPH ) ?

Вариантов различных есть уже больше десятка, какие вы хотите рекомендации без конкретной детальной постановки задачи?

Запросы
Код: sql
1.
LEFT JOIN (select ... from entity1 where (условия по полям сущности 1)) ON ...


Код: sql
1.
2.
3.
4.
5.
6.
7.
select ... from
(
select поля сущности 1, поля сущности 2 (null-ы), ... from entity1 where (условия по полям сущности 1)
union all
select поля сущности 1 (null-ы), поля сущности 2, ... from entity2 where (условия по полям сущности 2)
) entity
INNER JOIN tags ON (tags.entity_type = entity.entity_type AND tags.entity_id = entity.id)


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

Cyrax_02
Нехороший запрос...

Вы строите частный случай EAV, по таким моделям со стороны value хороших запросов не будет, EAV хорошо работает если вы заходите с конкретным id сущности, когда вы заходите с value (теги) и хотите скрестить их с условиями на сущность, будут нехорошие запросы.
...
Рейтинг: 0 / 0
Связь таблиц-сущностей с тегами: общая таблица связей или отдельные таблицы связей ?
    #40012811
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cyrax_02Все поля (индивидуальные + общие) расположены в сущностях-таблицах *entity1*, *entity2*, ...

Вот отсюда и вытекает геморрой. Проще всего все эти поля, включая индивидуальные, собрать
в одну таблицу. Правильнее - спросить себя "а чем они технически отличаются от тэгов?".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Связь таблиц-сущностей с тегами: общая таблица связей или отдельные таблицы связей ?
    #40012813
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
graycodeкогда вы заходите с value (теги) и хотите скрестить их с условиями на сущность, будут
нехорошие запросы.

Они будут хорошими если:
1) Довести идею до логического конца.
2) Не пытаться подходить к EAV с квадратно-гнездовым экселем.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Связь таблиц-сущностей с тегами: общая таблица связей или отдельные таблицы связей ?
    #40012822
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov
1) Довести идею до логического конца.

В сторону EAV или в сторону атрибутов сущности?
...
Рейтинг: 0 / 0
Связь таблиц-сущностей с тегами: общая таблица связей или отдельные таблицы связей ?
    #40012836
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
graycodeВ сторону EAV или в сторону атрибутов сущности?

В любую. Геморрой только между ними.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Связь таблиц-сущностей с тегами: общая таблица связей или отдельные таблицы связей ?
    #40012844
graycode
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Чистый EAV без геморроя, такое бывает?))
...
Рейтинг: 0 / 0
Связь таблиц-сущностей с тегами: общая таблица связей или отдельные таблицы связей ?
    #40012846
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
graycodeЧистый EAV без геморроя, такое бывает?))

См.п.2.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Связь таблиц-сущностей с тегами: общая таблица связей или отдельные таблицы связей ?
    #40012919
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Cyrax_02Все поля (индивидуальные + общие) расположены в сущностях-таблицах *entity1*, *entity2*, ...
Вот отсюда и вытекает геморрой. Проще всего все эти поля, включая индивидуальные, собрать
в одну таблицу.
Если их все собрать в одну таблицу (т.е. все сущности в одной таблице), то для каждого типа сущностей по-любому придётся применять собственные фильтры (по собственным полям) - и этот вариант ничем не будет отличаться от варианта с отдельными таблицами сущностей (в плане костыльности запросов на выборку по тегам).

graycodeкогда вы заходите с value (теги) и хотите скрестить их с условиями на сущность, будут нехорошие запросы.Если все сущности силой запихнуть в одну таблицу, что это даст ?
От необходимости одновременной фильтрации и по индивидуальным полям, и по тегам, этим самым не уйдёшь...

Dimitry SibiryakovПравильнее - спросить себя "а чем они технически отличаются от тэгов?"
Они будут хорошими если: 1) Довести идею до логического конца... Вместо тегов могут оказаться любые другие таблицы-сущности и таблицы-несущности, с которыми текущая сущность должна иметь связи 1:М
Что ж теперь, все связи из отдельных таблиц преобразовывать в собственные поля сущности ? База данных из 1 таблицы ?
...
Рейтинг: 0 / 0
Связь таблиц-сущностей с тегами: общая таблица связей или отдельные таблицы связей ?
    #40012922
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты как-то проскочил логическое завершение и сразу пошёл до самого абсурда... Это типичная
ошибка новичков. Проходит с опытом.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Связь таблиц-сущностей с тегами: общая таблица связей или отдельные таблицы связей ?
    #40012923
stenford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cyrax_02
Отдельные таблицы связей с тегами для каждого вида сущностей (entity1_id, tag_id) , (entity2_id, tag_id) сюда тоже относятся ?

Если утверждается, что сущности симантически не связаны друг с другом, то должно быть по отдельной таблице для связки с тэгами один ко многим для каждой из сущностей, мешать список тэгов для несвязанных между собой сущностей в одной таблице нельзя
Если утверждается что сущности все-же симантически связаны и список тэгов это их общая характеристика, то рассматривается один из 3х вариантов с наследованием. Соответственно в случае ТРС у тебя будет по таблице с тэгами на каждую таблицу с сущностями, а в случае ТРН одна таблица с тэгами на общую таблицу со всеми сущностями
...
Рейтинг: 0 / 0
Связь таблиц-сущностей с тегами: общая таблица связей или отдельные таблицы связей ?
    #40012924
Cyrax_02
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovТы как-то проскочил логическое завершение и сразу пошёл до самого абсурда...Я говорю о том, что организовывать теги нужно в том же самом порядке, в каком выполняется организация связей 1:М в РСУБД. Можно выносить список тегов в отдельную таблицу, можно не выносить - не важно. Факт необходимости одновременной фильтрации по двум связанным таблицам не говорит о том, что БД спроектирована некорректно. И объединение сущностей в общую таблицу не избавляет от такой необходимости.
...
Рейтинг: 0 / 0
25 сообщений из 57, страница 2 из 3
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Связь таблиц-сущностей с тегами: общая таблица связей или отдельные таблицы связей ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]