powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Теги для каталога - как лучше спроектировать?
43 сообщений из 43, показаны все 2 страниц
Теги для каталога - как лучше спроектировать?
    #38901467
morgot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такой вопрос - есть база каталога, вида id, название, описание. Нужно добавить теги. Т.е. чтобы каждая запись имела какие-то метки.
Вопрос - как лучше это сделать, исходя из:
1. Тегов на каждую запись будет не больше 10, но в целом - сотни.
2. По тегам будет идти поиск (выборка по тегу).

Т.е. какой тип данных mysql взять? Я думал 2 варианта - либо enum/set, либо varchar.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38901517
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
morgotТакой вопрос - есть база каталога, вида id, название, описание. Нужно добавить теги. Т.е. чтобы каждая запись имела какие-то метки.
Вопрос - как лучше это сделать, исходя из:
1. Тегов на каждую запись будет не больше 10, но в целом - сотни.
2. По тегам будет идти поиск (выборка по тегу).

Т.е. какой тип данных mysql взять? Я думал 2 варианта - либо enum/set, либо varchar.


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
create table cat_tag
(
cat_id int not null,
tag varchar(255) not null,

constraint pk_cat_tag primary key( cat_id, tag ),
constraint un_cat_tag unique( tag, cat_id ),
constraint fk_cat_IN_cat_tag foreign key (cat_id) reference (cat)
);
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38901531
morgot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv, спасибо.
перечитав Ваш коммент я понял, что ничего не знаю о MySQL. Первый раз слышу о constraint.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38901537
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Связь id-tag имеет тип много-ко-много. Так что делайте по науке - таблица элементов каталога, таблица тегов, таблица соответствия элемент-тег.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902046
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaСвязь id-tag имеет тип много-ко-много. Так что делайте по науке - таблица элементов каталога, таблица тегов, таблица соответствия элемент-тег.

табличка тегов не нужна, если нет дополнительных атрибутов у тега.
тег - самоопределяемое понятие.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902125
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivтег - самоопределяемое понятие.
То есть тег - сущность. Тогда как можно заявлять, что
MasterZivтабличка тегов не нужна
?
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902332
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaMasterZivтег - самоопределяемое понятие.
То есть тег - сущность. Тогда как можно заявлять, что
MasterZivтабличка тегов не нужна
?

Тег -- это слово.
Оно является самоидентифицируемым.
Для него не нужно создавать суррогатный ключ.
Если у тега нет дополнительных атрибутов, типа, скажем, языка, какой-то доп. статистики и прочего, то доп. таблицу
делать не нужно, но это зависит от постановки задачи.

Так понятно ?
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902344
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не спорьте, оба варианта имеют право на жизнь.
Выбор зависит от задач и от объемов данных.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902584
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivТег -- это слово.
Оно является самоидентифицируемым.
Для него не нужно создавать суррогатный ключ.
Если у тега нет дополнительных атрибутов, типа, скажем, языка, какой-то доп. статистики и прочего, то доп. таблицу
делать не нужно, но это зависит от постановки задачи.

Так понятно ?
Нет.

Суррогатный ключ существует не для того, чтобы идентифицировать запись, а для того, чтобы организовывать связывание по быстро обрабатываемым чисельным типам, а не по строковым.
А дополнительная таблица нужна для нормализации данных. Кроме того, это уменьшит суммарный объём данных и частично предохранит от ошибок ввода.
Дополнительная таблица НЕ нужна только в одном случае - если одному элементу каталога соответствует не более одного тега. Но и в этом случае отдельная таблица тегов всё-таки предпочтительнее.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902587
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А без таблицы тегов - как ты предлагаешь хранить НЕСКОЛЬКО тегов для одной записи в таблице элементов каталога? CSV? Так это выстрел в ногу - по ним же поди поиск будет...
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902700
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Суррогатный ключ существует не для того, чтобы идентифицировать запись, а для того, чтобы организовывать связывание по быстро обрабатываемым чисельным типам, а не по строковым.



наивный....


А дополнительная таблица нужна для нормализации данных.

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




Дополнительная таблица НЕ нужна только в одном случае - если одному элементу каталога соответствует не более одного тега.


я не о той таблице, я о еще одной, о словаре всех тегов, а не о связи тэг-каталог.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902718
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivя не о той таблице, я о еще одной, о словаре всех тегов, а не о связи тэг-каталог.То есть ты ратуешь за одну дополнительную таблицу (тег - ИД_элемента_каталога), так, что ли?
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902844
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaMasterZivя не о той таблице, я о еще одной, о словаре всех тегов, а не о связи тэг-каталог.То есть ты ратуешь за одну дополнительную таблицу (тег - ИД_элемента_каталога), так, что ли?

ДА, я ж её в топике и написал.
ЕСЛИ нужны дополнительные атрибуты тегов, ТО нужен ещё и словарь тэгов.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902862
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага... а как будет выглядеть тогда поиск по тегам? особенно если будет условие типа "не менее 2 из отмеченных 5 тегов"... грустно будет, грустно - что LIKE-ами, что полнотекстом грустно.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902873
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaАга... а как будет выглядеть тогда поиск по тегам? особенно если будет условие типа "не менее 2 из отмеченных 5 тегов"... грустно будет, грустно - что LIKE-ами, что полнотекстом грустно.Да почему же LIKE-ами? У MasterZiv нигде не сказано, что все тэги в одной записи. Наоборот, судя по primary key( cat_id, tag ) предполагается по записи на тэг.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902929
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftДа почему же LIKE-ами? Хорошо, прямым сравнением... но всё равно сравнением СТРОК. Что будет медленнее и накладнее сравнения ID-ов.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902947
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaЧто будет медленнее и накладнее сравнения ID-ов.В схеме с двумя таблицами эти ID-ы тоже придется искать строковым сравнением, если на входе строки.
И если повторяемость тэгов низкая, то примерно тож на тож и выйдет.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902960
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftAkinaЧто будет медленнее и накладнее сравнения ID-ов.В схеме с двумя таблицами эти ID-ы тоже придется искать строковым сравнением, если на входе строки.Поиск в компактном словаре, где поле тегов уникально, и в таблице, где теги повторяются - немного разные вещи, не так ли? А если ещё они повторяются там с опечатками, так и вовсе туши свет.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902973
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaПоиск в компактном словаре, где поле тегов уникально, и в таблице, где теги повторяются - немного разные вещи, не так ли?Я же специально дал уточнение - "И если повторяемость тэгов низкая".
Если повторяемость тэгов очень высокая, конечно, вариант с двумя таблицами будет быстрее.

Впрочем этих "если" еще есть множество.
Процитирую сам себя:miksoftВыбор зависит от задач и от объемов данных.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38902999
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
morgot1. Тегов на каждую запись будет не больше 10, но в целом - сотни.
2. По тегам будет идти поиск (выборка по тегу).
Знать бы ещё объём базы. Может, там тот каталог на десяток тысяч записей - а мы тут копья ломаем.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38903286
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftAkinaЧто будет медленнее и накладнее сравнения ID-ов.В схеме с двумя таблицами эти ID-ы тоже придется искать строковым сравнением, если на входе строки.
И если повторяемость тэгов низкая, то примерно тож на тож и выйдет.

Нет. Словарь, даже с низкой повторяемостью (Зализняк - ваще повторов практически нет) обладает очень хорошей индексируемостью. Поиск уже не совсем "строковый", а в индексе. Что заметно шустрее (в разы). :)

Только таблица связи (Master Ziv) - решение кривое "по определению": нарушение НФ в виде повторов в поле тегов для разных категорий, что ухудшает селективность индекса по полю - чуть более чем "гарантированно".

Ну и вопрос дальнейшей "живучести" схемы. Как только понадобится (а мало ли!) вводить описания к тегам ... так всё - пиши "труба": таки придется создавать словарь тегов...
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38903320
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109Нет. Словарь, даже с низкой повторяемостью (Зализняк - ваще повторов практически нет) обладает очень хорошей индексируемостью. Поиск уже не совсем "строковый", а в индексе.Не совсем понял, что именно "нет" ?
Что поиск будет с использованием индекса - предполагалось само собой, решений с фулсканом вроде бы никто не предлагал.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38903326
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109Поиск уже не совсем "строковый", а в индексе. Что заметно шустрее (в разы). :)От того, что он в индексе, а не в данных, он не перестал быть строковым. И всё равно поиск по чисельному индексу ещё шустрее.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38903328
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftAkinaАга... а как будет выглядеть тогда поиск по тегам? особенно если будет условие типа "не менее 2 из отмеченных 5 тегов"... грустно будет, грустно - что LIKE-ами, что полнотекстом грустно.Да почему же LIKE-ами? У MasterZiv нигде не сказано, что все тэги в одной записи. Наоборот, судя по primary key( cat_id, tag ) предполагается по записи на тэг.

естественно. как вообще можно по другому подумать?
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38903330
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akinamiksoftпропущено...
В схеме с двумя таблицами эти ID-ы тоже придется искать строковым сравнением, если на входе строки.Поиск в компактном словаре, где поле тегов уникально, и в таблице, где теги повторяются - немного разные вещи, не так ли? А если ещё они повторяются там с опечатками, так и вовсе туши свет.

еще раз, ты довольно наивен в понимании того, что ждет скорость поиска.
это индекс, а не тип данных под ним.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38903335
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только таблица связи (Master Ziv) - решение кривое "по определению": нарушение НФ в виде повторов в поле тегов для разных категорий, что ухудшает селективность индекса по полю - чуть более чем "гарантированно".


и гдеж там нарушение НФ-то?
Я как бы лет 15 уже базы данных проектную, ни разу ничего с нарушением НФ не делал.

Ну и вопрос дальнейшей "живучести" схемы. Как только понадобится (а мало ли!) вводить описания к тегам ... так всё - пиши "труба": таки придется создавать словарь тегов...


ну, так надо решать топик стартеру, и думать, что ему нужно. я опять-таки писал об этом с самого начала в каждом посте.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38903527
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv , опишите, пожалуйста, как в ВАШЕЙ схеме устанавливать соответствие, фильтровать и получать статистику, если оператор набрал название тега с опечаткой, и это не было выявлено на стадии ввода.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38903532
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

Вроде автор сразу отписался что ему нужны к каждой категории тегИ, то бишь больше одного на категорию. И нигде не сказано, что они уникальны для каждой категории. То бишь "повтор" тегов в табличке связи (ежели она одна) - практически гарантирован.

Это уже есть нарушение НФ ... 1-й? Не помню. :)

И оно же (повтор тегов) - снижает селективность индекса. А по практике (своей), могу сказать что часто теги к товарам И категориям настолько НЕ уникальны ... что просто без словаря - туго. Но ... это моя практика, а что там у ТС-а - только он знает. :)
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38903550
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вы что тут все с утра посходили что ли?
весна действует?

все ж просто...

ладно, добавить до компа - отпишу все подробно, до последней детальки.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38904680
wamaco
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivвы что тут все с утра посходили что ли?
весна действует?

все ж просто...

ладно, добавить до компа - отпишу все подробно, до последней детальки.

у вас в корне все неверно!
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38905056
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wamacoMasterZivвы что тут все с утра посходили что ли?
весна действует?

все ж просто...

ладно, добавить до компа - отпишу все подробно, до последней детальки.

у вас в корне все неверно!сказал как отрезал
типа, ошибка настолько очевидна, что её даже объяснять никому не надо?
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38906745
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

кто-то обещался отписаться "как только" ... и? :)
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38906913
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

Что-то некогда...
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38906941
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arhat109,

Вот типа того.
(процедуры написаны на умозрительном вымышленном языке, сметь PL/SQL и TransactSQL,
я MySQL наизусть не помню).

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
create table catalogue
(
cat_id int not null,
cat_name varchar(255) not null,
-- ...                               
constraint pk_catalogue primary key( cat_id )
)

create table cat_tag
(
cat_id int not null,
tag varchar(255) not null,

constraint pk_cat_tag primary key( cat_id, tag ),
constraint un_cat_tag unique( tag, cat_id ),
constraint fk_cat_IN_cat_tag foreign key (cat_id) references catalogue ( cat_id );
);

-- эта таблица НЕ НУЖНА, если 
create table tag
(
tag varchar(255) not null,
-- .. tag attributes:
use_frequency_count int not null default 0,
-- end tag attributes
constraint pk_tag primary key( tag )
);


create procedure tag_catalogue ( @cat_id int, @tag varchar(255) )
begin

   -- только если нужна таблица TAG
   if not exists( select * from tag where tag = @tag ) then
     insert into TAG( tag, use_frequency_count )
     values ( @tag, 0 );
   end if;

   insert into cat_tag ( cat_id, tag )
   values ( @cat_id, @tag );

end;
/

create procedure get_catalogue_by_tag1 ( @tag varchar(255) )
begin

   select c.cat_id, cat_name
   from CAT c
   join cat_tag ct1 on ct1.cat_id = c.cat_id and cat1.tag = @tag;

end;
/

create procedure get_catalogue_by_tag2 ( @tag1 varchar(255), @tag2 varchar(255) )
begin

   select c.cat_id, cat_name
   from CAT c
   join cat_tag ct1 on ct1.cat_id = c.cat_id and cat1.tag = @tag1
   join cat_tag ct2 on ct2.cat_id = c.cat_id and cat2.tag = @tag2;

end;
/

create procedure get_catalogue_by_tag3 ( @tag1 varchar(255), @tag2 varchar(255), @tag3 varchar(255) )
begin

   select c.cat_id, cat_name
   from CAT c
   join cat_tag ct1 on ct1.cat_id = c.cat_id and cat1.tag = @tag1
   join cat_tag ct2 on ct2.cat_id = c.cat_id and cat2.tag = @tag2
   join cat_tag ct3 on ct3.cat_id = c.cat_id and cat3.tag = @tag3
;

end;
/
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38906958
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неясно, на что это ссылается внешний ключ
Код: sql
1.
constraint fk_cat_IN_cat_tag foreign key (cat_id) reference (cat)


Нет такой буквы в представленных DDL.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38907073
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaНеясно, на что это ссылается внешний ключ
Код: sql
1.
constraint fk_cat_IN_cat_tag foreign key (cat_id) reference (cat)


Нет такой буквы в представленных DDL.

да, сори, просто скопировал старый КПД, а потом таблицу переназвал по-другому.

должно быть
reference (catalogue)

модератор, исправьте пожалуйста.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38907094
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivмодератор, исправьте пожалуйста.поправил
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38907100
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и на что ТЕПЕРЬ референс? на имя таблицы?
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38907116
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaНу и на что ТЕПЕРЬ референс? на имя таблицы?


да ладно тебе, на pk таблицы, уж можно же догадаться.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38907130
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaНу и на что ТЕПЕРЬ референс? на имя таблицы?


references catalogue ( cat_id );
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38907138
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага... А теперь хочется получить ответ на вопрос . На ЭТОЙ структуре.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38907189
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina MasterZiv , опишите, пожалуйста, как в ВАШЕЙ схеме устанавливать соответствие, фильтровать и получать статистику, если оператор набрал название тега с опечаткой, и это не было выявлено на стадии ввода.

Это зависит от постановки. Надо ли вообще это делать.

В примитивном случае -- вообще никак.
И я бы так и делал, потому что тег -- это не обязательно слово какого-то языка, и в общем случае его невозможно верифицировать, правильный он или нет. При поиске запрос просто ничего не выдаст при неправильном теге, а при вставке будет создан новый тег
и данные будут помечены им.

В случае, если множество тегов фиксированное, то нужно, естественно, хранить справочник тегов и не добавлять в него тег, как у меня в процедуре, а проверять его наличие в справочнике.
...
Рейтинг: 0 / 0
Теги для каталога - как лучше спроектировать?
    #38907987
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
create procedure get_catalogue_by_tag2 ( @tag1 varchar(255), @tag2 varchar(255) )
begin

   select c.cat_id, cat_name
   from CAT c
   join cat_tag ct1 on ct1.cat_id = c.cat_id and cat1.tag = @tag1
   join cat_tag ct2 on ct2.cat_id = c.cat_id and cat2.tag = @tag2;

end;



А разве не проще вот такой запрос:

Код: sql
1.
2.
3.
4.
5.
SELECT c.cat_id, c.cat_name, COUNT(DISTINCT ct.tag) AS cnt
FROM CAT AS c
JOIN cat_tag AC ct ON ct.cat_id = c.cat_id AND ct.tag IN(@tags)
GROUP BY c.cat_id
HAVING cnt = @tags_count



@tags -- строки тегов через запятую ... лучше прямо с клиента...
@tags_count -- количество искомых тегов.

Не уверен за синтаксис и как сделать для процедуры, например с перенным числом параметров... но это один запрос, а не N-джойновый. :)
...
Рейтинг: 0 / 0
43 сообщений из 43, показаны все 2 страниц
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Теги для каталога - как лучше спроектировать?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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