Текущий архив: 2006.05.21;
Скачать: CL | DM;
Вниз
Извлечь взаимосвязи таблиц из БД Найти похожие ветки
← →
Курдль © (2006-03-22 12:33) [0]Напомните, пожалуйста, кто помнить навскидочку системные педставления (таблицы) для выявления внешних ключей.
Запрос
select * from ALL_CONSTRAINTS
where CONSTRAINT_TYPE = "R"
имеет какую-то недосказанность - в поле R_CONSRAINT_NAME есть зашифрованное наименование "ведущей" таблицы, которое надо еще распарсить.
Какие еще варианты?
← →
stone © (2006-03-22 12:36) [1]
> Какие еще варианты?
sp_foreignkeys
Какие еще СУБД?
← →
Курдль © (2006-03-22 12:41) [2]
> stone © (22.03.06 12:36) [1]
> sp_foreignkeys
> Какие еще СУБД?
Извиняюсь. Я, вроде, при составлении топика указал БД - oracle.
← →
sniknik © (2006-03-22 12:43) [3]а доступ через что? (чего интересно еще для D1 было...)
← →
Sergey13 © (2006-03-22 12:45) [4]>имеет какую-то недосказанность - в поле R_CONSRAINT_NAME есть зашифрованное наименование "ведущей" таблицы, которое надо еще распарсить.
Нет там никакого "наименования "ведущей" таблицы" - это имя ПК или УК на который идет ссылка. По нему в этой же вьюхе можно найти таблицу.
← →
Курдль © (2006-03-22 12:45) [5]
> sniknik © (22.03.06 12:43) [3]
> а доступ через что? (чего интересно еще для D1 было...)
Ну, насчет D1 это я просто похулиганил :) Работаю на VS через родные классы доступа.
← →
Val © (2006-03-22 12:46) [6]там не "зашифрованое....", а наименование связанного констрейнта, о чем говорит и название поля, собственно.
попробуем так:
select distinct table_name from user_constraints
where r_constraint_name in (
select constraint_name
from user_constraints where table_name = "МОЯ_ТАБЛИЦА"
and constraint_type in ("U","P"))
← →
Курдль © (2006-03-22 12:49) [7]
> Sergey13 © (22.03.06 12:45) [4]
> Нет там никакого "наименования "ведущей" таблицы" - это
> имя ПК или УК на который идет ссылка. По нему в этой же
> вьюхе можно найти таблицу.
А! Точно! Конгениально! Это я стормозил типа "глаза по ложке - не видят ни крошки".
Сам же поставил...where CONSTRAINT_TYPE = "R"
и туплю, что не вижу остальных
← →
MOA © (2006-03-22 17:04) [8]Метод ADO OpenSchema не подойдёт? - будет переносимо.
← →
sniknik © (2006-03-22 17:24) [9]> Метод ADO OpenSchema не подойдёт?
потому и спрашивал через что работа
но...
> Работаю на VS через родные классы доступа.
х.з. что имеется в виду ("родные" для oracle, ну точно не ADO)
← →
Курдль © (2006-03-23 10:38) [10]
> MOA © (22.03.06 17:04) [8]
> Метод ADO OpenSchema не подойдёт? - будет переносимо.
Интересно. Как это работает?
В ADO.NET вроде такого не наблюдается...
> sniknik © (22.03.06 17:24) [9]
> х.з. что имеется в виду ("родные" для oracle, ну точно не ADO)
Классы используемые VS и "родные" для oracle: OracleConnection, OracleCommand, OracleDataAdapter и т.п.
← →
sniknik © (2006-03-23 11:00) [11]> Интересно. Как это работает?
ну так посмотри. в генофонде. вся инфа о структуре через это получается (GetTableNames, GetFieldNames,...)
> В ADO.NET вроде такого не наблюдается...
т.е. там инфа о структуре базы не используется? глупо.
← →
Курдль © (2006-03-23 11:23) [12]
> sniknik © (23.03.06 11:00) [11]
> т.е. там инфа о структуре базы не используется? глупо.
Возможно, это я многого не знаю. Однако, пердставить себе не могу, зачем хранить структуру БД где-то еще, кроме самой БД.
В ADO.NET ДатаСэты многотабличные, с прописанными связями и условиями.
В рамках датасэта можно распутать какую угодно схему и извлечь какие угодно данные о взаимосвязях. Однако это вовсе не значит, что они точно повторяют структуру БД.
← →
sniknik © (2006-03-23 11:29) [13]> зачем хранить структуру БД где-то еще, кроме самой БД.
она и не хранится, она запрашивается при необходимости.
← →
Курдль © (2006-03-23 11:31) [14]
> sniknik © (23.03.06 11:29) [13]
> она и не хранится, она запрашивается при необходимости.
Наверное это должно быть забавным. Однако, могут возникнуть трудности с разграничением доступа. Пожалуй, в таком деликатном деле лучше запросы составлять явно.
← →
Sergey13 © (2006-03-23 11:38) [15]2[14] Курдль © (23.03.06 11:31)
> Однако, могут возникнуть трудности с разграничением доступа.
Вот и у меня такие-же смутные сомнения.
← →
sniknik © (2006-03-23 11:48) [16]чем лучше? какие могут быть трудности с разграничением доступа?
вот с наличием прав на конкретную таблицу(а значит и инфы из нее) может... но тут что методом что запросом равновероятно можно получить отказ. а вот универсальность кода для разнотипных баз ты с запросами потеряеш.
← →
Курдль © (2006-03-23 12:13) [17]Восхитительно! И вправду есть такая приблуда!
НазываетсяOleDbConnection.GetOleDbSchemaTable(...)
Буду изучать. Спасибо за хорошую наводку!
← →
Desdechado © (2006-03-23 20:44) [18]для уменьшения трудностей с разграничением доступа существуют вьюхи
DBA_... - для суперкрутых
ALL_... - для крутых
USER_... - для простых
SELECT * FROM user_constraints -- твой случай
← →
Sergey13 © (2006-03-24 09:25) [19]2[18] Desdechado © (23.03.06 20:44)
>SELECT * FROM user_constraints -- твой случай
Особенно если зайти НЕ владельцем схемы. 8-)
← →
Курдль © (2006-03-24 10:01) [20]
> Desdechado © (23.03.06 20:44) [18]
> для уменьшения трудностей с разграничением доступа существуют
> вьюхи
> DBA_... - для суперкрутых
> ALL_... - для крутых
> USER_... - для простых
Спасибо, я что-то об этом слыщал! ;-)
> SELECT * FROM user_constraints -- твой случай
Нет, мой случай - первый. Вожусь с модулем администрирования одной системы.
← →
Desdechado © (2006-03-24 11:36) [21]Sergey13 © (24.03.06 09:25) [19]
А зачем?
Курдль © (24.03.06 10:01) [20]
Модуль администрирования системы вовсе не обязан быть модулем администрирования оракла. Если вся система помещается в 1 схеме, то хозяин схемы в ней - бог, царь и воинский начальник.
← →
Val © (2006-03-24 13:32) [22]>[21] Desdechado © (24.03.06 11:36)
> то хозяин схемы в ней - бог, царь и воинский начальник.
если дба дал ему на это права ;)
← →
Sergey13 © (2006-03-24 14:00) [23]2[22] Val © (24.03.06 13:32)
> если дба дал ему на это права ;)
Тут права вроде не урежешь. Только если места на диске не давать. 8-)
2[21] Desdechado © (24.03.06 11:36)
>А зачем?
В смысле? Со схемой только владелец может работать что-ли? В 99.9% случаев у конкретного юзера собственно схемы данных нет (одно название) - работают с чужими.
← →
Desdechado © (2006-03-24 17:53) [24]Sergey13 © (24.03.06 14:00) [23]
>> А зачем?
> В смысле?
В смысле, что речь шла об утилите администрирования системы. Не будет же "дядя Вася" в чужой схеме администрировать.
Страницы: 1 вся ветка
Текущий архив: 2006.05.21;
Скачать: CL | DM;
Память: 0.53 MB
Время: 0.04 c