Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как упорядочить таблицы по связям  [new]
Yarosl
Guest
Доброго времени суток!
Подскажите, как решить следующую задачку: допустим, было выбрано несколько таблиц БД. Можно ли их как-нибудь выстроить в том порядке, в котором они связаны?
28 авг 09, 01:33    [7588650]     Ответить | Цитировать Сообщить модератору
 Re: Как упорядочить таблицы по связям  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
т.е.?
28 авг 09, 06:36    [7588874]     Ответить | Цитировать Сообщить модератору
 Re: Как упорядочить таблицы по связям  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18323
Иерархия связей(внешних ключей) имеется ввиду, как я понял.
28 авг 09, 08:40    [7588977]     Ответить | Цитировать Сообщить модератору
 Re: Как упорядочить таблицы по связям  [new]
petsa
Member

Откуда:
Сообщений: 1708
Где выбрано и где их надо выстроить??
28 авг 09, 08:55    [7588994]     Ответить | Цитировать Сообщить модератору
 Re: Как упорядочить таблицы по связям  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
database diagramm ?
-------------------------------------
Jedem Das Seine
28 авг 09, 09:54    [7589103]     Ответить | Цитировать Сообщить модератору
 Re: Как упорядочить таблицы по связям  [new]
Yarosl
Guest
Пишу конструктор запросов на C#, подобный конструктору запросов в Access. Т.е. пользователь выбирает таблицы, поля, агрегатные функции, условия отобора и т.д. В конце по этим данным нужно построить запрос на выборку. Суть задачи в том, чтобы построить цепочку связей между выбранными таблицами (т.е. например таблица 1 INNER JOIN таблица 2 CROSS JOIN таблица 3 INNER JOIN таблица 4 и т.д.). Таблиц может быть выбрано произвольное количество. Как вот определить эту цепочку связей?
28 авг 09, 10:33    [7589246]     Ответить | Цитировать Сообщить модератору
 Re: Как упорядочить таблицы по связям  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
информация о том, что там юзер навыбирал, хранится не в БД, а в памяти Вашего клиентского приложения?
алгоритм "построения цепочки связей" должен быть реализован не на SQL а на C# ?

и причем тут тогда MS SQL Server ?
Вам скорее в форум по C#
28 авг 09, 10:39    [7589268]     Ответить | Цитировать Сообщить модератору
 Re: Как упорядочить таблицы по связям  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
автор
Пишу конструктор запросов на C#, подобный конструктору запросов в Access.


Полагаете у Вас получится лучше, чем в бесплатной Management Studio Express?!
28 авг 09, 10:43    [7589291]     Ответить | Цитировать Сообщить модератору
 Re: Как упорядочить таблицы по связям  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
pkarklin,
ну мало ли... может, человеку за это хорошие деньги платят... так на здоровье
28 авг 09, 10:46    [7589314]     Ответить | Цитировать Сообщить модератору
 Re: Как упорядочить таблицы по связям  [new]
Yarosl
Guest
Паганель
информация о том, что там юзер навыбирал, хранится не в БД, а в памяти Вашего клиентского приложения?

Да, все это хранится в соответствующих классах приложения
Паганель

алгоритм "построения цепочки связей" должен быть реализован не на SQL а на C# ?

Да, на C#
Паганель

и причем тут тогда MS SQL Server ?
Вам скорее в форум по C#

Дело в том, что я думал может кто подскажет SQL-скрипт, который такую цепочку строит
28 авг 09, 11:52    [7589874]     Ответить | Цитировать Сообщить модератору
 Re: Как упорядочить таблицы по связям  [new]
Yarosl
Guest
pkarklin
автор
Пишу конструктор запросов на C#, подобный конструктору запросов в Access.


Полагаете у Вас получится лучше, чем в бесплатной Management Studio Express?!

Я так не думаю, просто мне это нужно для решения своей специфической задачи
28 авг 09, 11:53    [7589886]     Ответить | Цитировать Сообщить модератору
 Re: Как упорядочить таблицы по связям  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Yarosl
Я так не думаю, просто мне это нужно для решения своей специфической задачи


Огласите задачу, плиз!
28 авг 09, 11:55    [7589902]     Ответить | Цитировать Сообщить модератору
 Re: Как упорядочить таблицы по связям  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Yarosl
может кто подскажет SQL-скрипт, который такую цепочку строит
я не представляю себе необходимость дергать сервер с клиента
чтобы запустить SQL-скрипт, строящий какую-то цепочку
посредством алгоритма, реализованного на C#,
на основании данных, хранящихся в памяти клиентского приложения

имхо сервер тут ни при чем
28 авг 09, 11:56    [7589912]     Ответить | Цитировать Сообщить модератору
 Re: Как упорядочить таблицы по связям  [new]
Yarosl
Guest
Паганель,

Вот пост, опубликованный ранее мною в форуме по C# (ответов не было)

автор
Пишу конструктор запросов на C#. Т.е. пользователь выбирает таблицы, поля, условия отбора и т.д. В конце по всем указанным на этапах данным должен быть построен SQL-запрос на выборку. Все это уже в принципе реализовано, только вот столкнулся с проблемой как правильно выстроить цепочки JOIN'ов между всеми выбранными таблицами. Положение осложняется тем, что таблиц может быть выбрано сколько угодно (как в конструкторе запросов в Access или конструкторе представлений в SQL Server). Пытался делать так:
1. Для каждой выбранной таблицы получаю с помощью sp_fkeys с какими таблицами и по каким полям она связана, загоняю все это в список, получается нечто следующее:
таблица1->таблица2|key|таблица3|key
таблица2->таблица4|key
таблица3->
таблица4->

2. В цикле начинаю перебирать этот список рекурсивным алгоритмом, т.е. беру первую таблицу, просматриваю, с какой она связана, если связана с той, которая есть в списке ниже, формируем связь (например, таблица1 связана с таблицей2, получаем таблица1 INNER JOIN таблица2), затем текущий цикл обрывается и выполняется поиск связей для таблицы2 и т.д. Таким образом после рекурсивного подъема должна раскручиваться вся цепочка связей. Однако так и не удалось мне сделать так, чтобы алгоритм работал на любом количестве таблиц без ошибок :(


Вот я и подумал, что может быть есть возможность осуществить такой перебор средствами сервера, а я бы потом в программе результат подклеил к сформированной строке запроса
28 авг 09, 12:02    [7589970]     Ответить | Цитировать Сообщить модератору
 Re: Как упорядочить таблицы по связям  [new]
Yarosl
Guest
pkarklin,

Разрабатывается информационно-аналитическая система, включающая в себя методы корреляционно-регрессионного анализа, Data Mining и OLAP. Два последних метода анализа осуществляются посредством обращения к службе SSAS. Вы, конечно, спросите, почему бы просто не строить модели в BIDS. Это, конечно, правильно, но тому есть две причины:
1. Те, кому предстоит работать, не разбираются ни в BIDS, ни в программировании вообще. Им надо просто указать таблицы, поля и т.д., выбрать метод анализа и посмотреть результат.
2. Помимо OLAP и Data Mining как я уже сказал, есть и другие методы (корреляция, регрессия, факторный анализ, может будет что-то еще). Поэтому делать часть системы самому, а другую часть предлагать как имеющиеся средства SQL Server и VS тоже как-то не вижу особого смысла
28 авг 09, 12:07    [7590014]     Ответить | Цитировать Сообщить модератору
 Re: Как упорядочить таблицы по связям  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
Yarosl
пост, опубликованный ранее мною в форуме по C# (ответов не было)
Вы его ночью запостили
Возможно, поэтому не было ответов
Попробуйте апнуть

Yarosl
так и не удалось мне сделать так, чтобы алгоритм работал на любом количестве таблиц без ошибок :(
Попробуйте там же указать - какие именно ошибки и на каких именно исходных данных возникают
Возможно, когда Вы справитесь с ошибками задачу можно будет считать решенной
Но протестировать после этого все равно хорошенько надо
28 авг 09, 12:11    [7590046]     Ответить | Цитировать Сообщить модератору
 Re: Как упорядочить таблицы по связям  [new]
LexMinsk
Member

Откуда: Republic of Belarus
Сообщений: 451
Yarosl, а если все связи по таблицам строить в WHERE, там порядок следования на сколько я знаю, не важен.
Тоже делал что то такое лет 7 назад, чтобы запросы можно было конструировать в самом приложении, сохранять их и вызывать потом, для создании отчетов.

Однако, для MS SQL Servera 2005 будет ошибка:
Запрос использует операторы внешнего соединения, не удовлетворяющие стандарту ANSI ("*=" или "=*"). Чтобы запустить этот запрос без изменений, установите уровень совместимости для текущей базы данных 80 или ниже, используя хранимую процедуру sp_dbcmptlevel. Настоятельно рекомендуется перезаписать запрос с использованием операторов внешнего соединения, соответствующих стандарту ANSI (LEFT OUTER JOIN, RIGHT OUTER JOIN). В следующих версиях SQL Server операторы соединения, не соответствующие стандарту ANSI, не будут поддерживаться даже в режимах обратной совместимости.
28 авг 09, 12:50    [7590262]     Ответить | Цитировать Сообщить модератору
 Re: Как упорядочить таблицы по связям  [new]
Yarosl
Guest
Паганель,

Спасибо, попробую.

Однако, как я понимаю, никак средств SQ Server (системных хранимок, вьюшек) для решения этой задачи нет, и конструктор вьюшек сам осуществляет такой перебор (видимо, создавая многосвязный граф и обходя его рекурсивно)?
28 авг 09, 13:30    [7590583]     Ответить | Цитировать Сообщить модератору
 Re: Как упорядочить таблицы по связям  [new]
Yarosl
Guest
LexMinsk,

А как тогда менять CROSS JOIN? К тому же проблема перебора все равно остается..Хотя попробовать можно, спасибо
28 авг 09, 13:33    [7590607]     Ответить | Цитировать Сообщить модератору
 Re: Как упорядочить таблицы по связям  [new]
VAT
Member

Откуда: Нижний Новгород
Сообщений: 295
Создайте свою таблицу связей для вашего построителя запросов.
В неё внесите только полезные для построения аналитических запросов связи.
Заодно отвяжетесь от форин киев, и можете добавить полезную инфу для сотрудников.
28 авг 09, 14:22    [7590945]     Ответить | Цитировать Сообщить модератору
 Re: Как упорядочить таблицы по связям  [new]
Yarosl
Guest
VAT,

Тк примерно и делается. Т.е. в списке у меня находятся связи только между выбранными таблицами. Те связи, которые есть с другими, не выбранными таблицами, в список просто не вносятся. Проблема в том, как это перебрать и грамотно построить
28 авг 09, 15:21    [7591365]     Ответить | Цитировать Сообщить модератору
 Re: Как упорядочить таблицы по связям  [new]
VAT
Member

Откуда: Нижний Новгород
Сообщений: 295
Создаёте таблицу: CREATE TABLE и т.д с полями, например:
join_id,
table_1,
table_2,
field_1,
field_2,
join_type.

Вбиваете те описания связей, которые считаете полезными.
Когда сотрудник выбирает table_1, показываете ему соответствующую пачку table_2.
Джойните, используя field_1, field_2, join_type.

Рекурсивного обхода многосвязного графа не нужно, т.к. сложно и не надёжно.
И запрос может выйти убойный. Было сначала, отказались.
Жестко прописали допустимые связи.
28 авг 09, 15:50    [7591614]     Ответить | Цитировать Сообщить модератору
 Re: Как упорядочить таблицы по связям  [new]
VAT
Member

Откуда: Нижний Новгород
Сообщений: 295
Сотрудники насочиняли для себя и подчинённых уже около 8000 именованных запросов.
Каждый сотр. видит только свои, и может передавать запрос товарищу.
Можно и результаты процедур джойнить, прописав соотв. связь в таблицу связей.
28 авг 09, 15:59    [7591697]     Ответить | Цитировать Сообщить модератору
 Re: Как упорядочить таблицы по связям  [new]
Yarosl
Guest
VAT,

Спасибо, интересная идея, если бы не одно "но".. пользователь в самом начале выбирает требуемый ему SQL Server (их в организации несколько), потом программа выводит список БД, имеющихся на этом сервере, пользователь выбирает БД, потом выводится список таблиц, полей и т. д. Тут же никак не угадаешь, к какому серверу, какой базе подлючится пользователь, какие таблицы он выберет... Прописывать все на каждом сервере я думаю нереально. Или вы все же предлагаете создавать описанную вами таблицу в процессе работы программы (т.е. заменить ею мой список), а потом из нее связи выцеплять?
28 авг 09, 17:01    [7592153]     Ответить | Цитировать Сообщить модератору
 Re: Как упорядочить таблицы по связям  [new]
VAT
Member

Откуда: Нижний Новгород
Сообщений: 295
Прописывать заранее таблицу связей не только несложно (всяко проще, чем даже изучить существующую совокупность таблиц и связей), но и необходимо, чтобы уберечься от немыслимых наворотов, на которые способны сотрудники, да и разработчики тоже.
И пользователям удобнее.
28 авг 09, 17:14    [7592231]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить