powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Избыточность или нет
3 сообщений из 3, страница 1 из 1
Избыточность или нет
    #37368828
ramzes600
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Ребята столкнулся с вопросом, на который у меня нет четкого ответа.Не достаточно опыта.Может кто-то сможет прояснить.
Изложу суть на примере.
Существует 3 сущности "компания" (C),"акция"(A),"бренд"(B).
Связи такие
C->(m)A,
A->(m)B.
Поставлена задача , отображать на странице описания конкретной компании бренды с которыми она работает(продает,рекламирует и т.п).То есть тупо список брендов через запятую.

Способы решения 1) Собрать джойнами все бренды которые привязаны к акциям конкретной компании
SELECT brands.name FROM brands
INNER JOIN action2brand ON action2brand.brand_id = brand.id
INNER JOIN actions a ON a.id = action2brand.action_id
WHERE a.company_id = %d

Способ решения 2) заключается в изменении подхода проектирования, а именно:
изначально добавляется еще одна связка вида C->(m)B.Выглядит это так Вы пользователь заходите на страничку своей компании, привязываете к ней бренды с которыми вы работаете(некий выпадающий список, где большое количество брендов все которые есть в бд), далее вы хотите создать акцию данной компании, вы создаете ее. на странице созданной акции нужно указать бренды на которые она распространяется вам доступен список брендов, но только тех которые вы привязали к своей компании изначально.

Второй подход создает избыточность , нужна еще одна таблица привязки компании к бренду.Но выборка брендов компании проходит в итоге проще и быстрее
SELECT brands.name FROM brands
INNER JOIN company2brand c2b ON c2b.brand_id = brands.id
WHERE c2b.company_id = %d

Как следует поступить в данной ситуации, пожертвовать скоростью , либо идти по избыточному подходу?
...
Рейтинг: 0 / 0
Избыточность или нет
    #37369052
koJIo6ok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ramzes600,
1 вариант не вариант, впрочем как и второй )
можно норм написать запрос
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select c.id as id_c, c.name_c,
   (
        select b.name_brend + ', '   
        FROM бренды as b       
        WHERE b.id_a = a.id
        FOR XML PATH(''), TYPE
   ).value('.','VARCHAR(max)')
from компании as c
inner join акции as a
on c.id = a.id_c
в общем как-то так, номог где-то и напутать тк пока переваривается обед я не работник )))
возможностей для выборок уйма у вас, тк структура норм
...
Рейтинг: 0 / 0
Избыточность или нет
    #37369310
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ramzes600,

1. Структура данных в первую очередь должна бизнес-требованиям соответствовать, а уж потом стоит думать об оптимизации. У вас в вариантах 1 и 2 просто разные бизнес задачи реализованы, соответственно и структуры разные.
2. Для такого элементарного запроса придумывать оптимизационные костыли - дело лишнее. СУБД и индексы все сделают за вас. Вы сначала хоть мало мальский тест проведите и убедитесь, что действительно тормозит.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Избыточность или нет
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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