Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Что лучше JOIN или UNION ?  [new]
MSSQL_USER
Member

Откуда: Minsk
Сообщений: 59
Вопрос по проектированию БД.
Прислали мне весьма интересный проект дизайна БД
Суть в том, что Есть иерархия компаний: Главная компания и Ее филиалы.
В модели базы Главные компании хранятся в одной таблице, а Филиалы компании хранятся в другой таблице:
1. Таблица Компании:
- ID компании
- Индивидуальные атрибуты (специфические только для главной компании)
- Общие атрибуты (Адрес,Телефоны, и прочая атрибутика юридического лица)

2. Таблица Филиалы
- ID Филиала
- ID Компании
- Индивидуальные атрибуты (специфические только для дочерней компании)
- Общие атрибуты (Адрес,Телефоны, и прочая атрибутика юридического лица)

Дополнительные условия:
- [ID компании] и [ID филиала] не должны пересекаться, так как на них есть ссылки в других таблицах просто через External_ID!!!
- общих атрибутов очень много (штук 50), а индивидуальных (4 шт).
- c данными планируется работать через представление следующего вида:
create view AAA
as
select [ID компании], Общие атрибуты from Компании
union
select [ID филиала], Общие атрибуты from Филиалы

Вот, хочу спросить у сообщества, может не стоит подобным образом проектировать базу, а разбить на следующие таблицы, чтобы исключить применение UNION, а использовать только JOIN????


Например:
1. Вынести общие атрибуты в одну таблицу ОФИСЫ (Главные + Филиалы)
2. Таблица Компании - индивидуальные атрибуты главной компании
3. Таблица Филиалы - индивидуальные атрибуты филиала

так мы сможем контролировать уникальность ID-шек и не применять UNION

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


Спасибо за любой анализ и оценку данной модели.
11 окт 11, 16:23    [11421419]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше JOIN или UNION ?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31993
MSSQL_USER
Еще меня волнует быстродействие подобного UNION
Не понимаю всеобщего стремления использовать UNION вместо UNION ALL :-)
MSSQL_USER
так мы сможем контролировать уникальность ID-шек
уникальность ID-шек можно например гарантировать CHECK-констрейном
MSSQL_USER
Вот, хочу спросить у сообщества, может не стоит подобным образом проектировать базу, а разбить на следующие таблицы
По моему, стоит, но это скорее вопрос по проектированию логической модели, а не к проектированию физической реализации.
11 окт 11, 16:30    [11421506]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше JOIN или UNION ?  [new]
Volf
Member

Откуда: Владивосток
Сообщений: 24
Можно вообще в одну таблицу объединить, и создать поле "тип" тогда точно с уникальностью id париться не надо, если вы хотите его делать identity.
Работать будет быстро при правильных индексах.
12 окт 11, 08:50    [11424415]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше JOIN или UNION ?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Volf, вот так слили нормализацию и вообще поставили шута во главу стола за мест батюшки царя.
Филиалы и Компании могут быть одной сотой частью от всей структуры системы. Что там важнее фиг его знает.
Да, плохо, что есть только голая физическая модель, это только верхушка айсберга, должны быть логическая модель для каждой функциональности.

К сказанному alexeyvg, нельзя ни добавить не отнять, да не лучше описать.

MSSQL_USER
сортировки по представлению обязательно будут
Это с какого перепугу?
Для отображения "дерева" на клиенте отвечает клиент, и за сортировки в нём также он.
12 окт 11, 23:48    [11430576]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше JOIN или UNION ?  [new]
MSSQL_USER
Member

Откуда: Minsk
Сообщений: 59
Mnior
сортировки по представлению обязательно будут

Это с какого перепугу?
Для отображения "дерева" на клиенте отвечает клиент, и за сортировки в нём также он.

речь не об отображении "дерева", а об аналитических запросах, где возможны разные сортировки, группировки, вычисления.
Не будете же вы закачивать на клиента все записи представления (миллионы записей) чтобы все это делать на клиенте.
Да и пользователи работают с базой напрямую, - SQL-запросами - КЛИЕНТ = SQL-КОНСОЛЬ.

alexeyvg
MSSQL_USER
Еще меня волнует быстродействие подобного UNION
Не понимаю всеобщего стремления использовать UNION вместо UNION ALL :-)

Я имел в виду вообще, - UNION в запросах как критерий плохой модели БД.

MSSQL_USER
Вот, хочу спросить у сообщества, может не стоит подобным образом проектировать базу, а разбить на следующие таблицы
По моему, стоит, но это скорее вопрос по проектированию логической модели, а не к проектированию физической реализации.[/quot]
Стоит? То есть их исходная модель правильная? Возможно, но почему:
- если работа с базой замедлится, или нет?
- если добавлять общий атрибута его нужно добавить в две таблицы, а то представление рухнет.

Не могли бы Вы прокомментировать свой ответ?
14 окт 11, 15:03    [11441665]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше JOIN или UNION ?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
MSSQL_USER
речь об аналитических запросах, где возможны разные сортировки, группировки, вычисления.
Да и пользователи работают с базой напрямую, - SQL-запросами - КЛИЕНТ = SQL-КОНСОЛЬ.
Вааще не врубаюсь тогда причём здесь UNION ALL?
Это же две совершенно разные сущности, единственное где они могут так накладываться это для отображения в дереве на клиенте.
В остальных случаях может быть только JOIN.

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

Топик об нечто эфемерном, т.е. ни о чём.
14 окт 11, 17:37    [11443119]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше JOIN или UNION ?  [new]
MSSQL_USER
Member

Откуда: Minsk
Сообщений: 59
Mnior, мне нужно оценить исходную модель - решил узнать мнение о модели и неизбежном UNION (см.первое мое сообщение).
Спасибо, Ваше мнение полностью совпало с моей точкой зрения на модель.

Хотелось бы услышать подробности от alexeyvg - его мнение меня несколько насторожило :)
14 окт 11, 18:45    [11443516]     Ответить | Цитировать Сообщить модератору
 Re: Что лучше JOIN или UNION ?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31993
MSSQL_USER
Хотелось бы услышать подробности от alexeyvg - его мнение меня несколько насторожило :)
Ой... А какая именно фраза насторожила? Насчёт UNION ALL?
Просто, если вы не знали, UNION - это UNION ALL + DISTINCT, то есть лишняя тяжёлая операция.
А если про это:
alexeyvg
MSSQL_USER
Вот, хочу спросить у сообщества, может не стоит подобным образом проектировать базу, а разбить на следующие таблицы
По моему, стоит, но это скорее вопрос по проектированию логической модели, а не к проектированию физической реализации.
Я просто неудачно выразился :-( Имел в виду - ИМХО нужно именно разбить, отказаться от первоначальной модели.
14 окт 11, 22:45    [11444541]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить