Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
15-1145650859
QuickFinder
2006-04-22 00:20
2006.05.21
Вопросы по Java


15-1145929843
antonn
2006-04-25 05:50
2006.05.21
Запустить ICQ


9-1130540296
adolf
2005-10-29 02:58
2006.05.21
help for delphix


2-1146923270
Der Nechk@ssoff
2006-05-06 17:47
2006.05.21
Смена цвета


2-1146655809
VitV
2006-05-03 15:30
2006.05.21
Не знаю как назвать...