Конференция "Базы" » INFORMATION_SCHEMA - Foreign Key [D7, MSSQL, Postgres]
 
  • Ega23 © (07.06.08 10:27) [0]
    Что-то никак не могу в описании найти...
    Вопрос такой: можно ли из INFORMATION_SCHEMA вытащить информацию, на кого ссылается FK?
    Т.е. есть имя FK, через IS вытаскиваю, к каой таблице и какими столбцами привязан.
    А как узнать, на какую ссылается?
  • Ega23 © (07.06.08 10:31) [1]
    Отставить, нашёл. Не совсем то, что хотел, но дальше можно раскрутить:

    INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS.UNIQUE_CONSTRAINT_NAME
  • версия для печати (07.06.08 11:48) [2]
    sysforeignkeys?
  • Ega23 © (07.06.08 11:49) [3]

    > sysforeignkeys?


    Где ты в Information_Schema или в системных таблицах Postgres видишь sysforeignkeys?
  • sniknik © (07.06.08 12:01) [4]
    > [D7, MSSQL, Postgres]
    причем тут постгрес, оно не к нему относится.
  • Ega23 © (07.06.08 12:08) [5]

    > причем тут постгрес, оно не к нему относится.


    Я пишу проверку существования объектов в БД. СУБД может быть как Postgres, так и MSSQL. Можно, конечно, писать для каждой СУБД свою проверку по системным таблицам, но в этом случае я становлюсь заложником версии сервера в рамках данной СУБД (где гарантия, что в очередном релизе Postgres не изменятся системные таблицы?).
    В этом плане INFORMATION_SCHEMA даёт действительно более-менее универсальное решение.
  • Anatoly Podgoretsky © (07.06.08 14:24) [6]
    > Ega23  (07.06.2008 12:08:05)  [5]

    Правильной дорогой идешь и не слушай других ни про какие системные таблицы и даже про функции обертки, например из АДО
    INFORMATION_SCHEMA - это решение на уровне стандарта. Только тебе надо ознакомиться насчет набора таблиц в ней и их полей. Можно методом научного втыка, но лучше найти стандарт или описание.
  • sniknik © (07.06.08 14:35) [7]
    > ... и даже про функции обертки, например из АДО ...
    ???
    OpenSchema в ADO их и использует... и ADO даже с большей вероятностью будет универсальнее (провайдер обязан подогнать методы под измененную базу, даже если изменится сам стандарт т.е. INFORMATION_SCHEMA. т.е. либо один в один тоже самое, либо не париться самому если вдруг изменилось "неменяемое". -> нужно будет просто сменить провайдера при подключении.)
  • Ega23 © (07.06.08 14:35) [8]

    > но лучше найти стандарт или описание.


    Ну скажем так: я тупо открыл BOL для 2000 и читаю про все эти вьюхи. Какие-то интуитивно понятны, какие-то приходится искать.
    Потом, фактически, сравниваю с тем, что в документации к Postgres написано.
    Потом проверяю результат на обеих СУБД.

    Просто с привязкой к childTable у FK затык небольшой вышел. Но уже всё ясно.
  • Anatoly Podgoretsky © (07.06.08 15:54) [9]
    > sniknik  (07.06.2008 14:35:07)  [7]

    А если завтра не АДО или в АДО нет
  • Ega23 © (07.06.08 16:01) [10]

    > Anatoly Podgoretsky ©   (07.06.08 15:54) [9]


    На самом деле проблема с IS есть - Oracle её не поддерживает. Но это не страшно, я заложился на некие "макроподстановки" в зависимости от типа СУБД.
  • sniknik © (07.06.08 17:19) [11]
    > А если завтра не АДО или в АДО нет
    везде свои недостатки. с "другой стороны" тоже возможны неожиданности. вот прямо тут и пример ([10]), а провайдер должен это сам учесть (и учитывает... обычно. с провайдерами FB у меня были проблемы именно по схемам из 5-7(?) протестированных только один адекватный оказался. счас может больше подойдет правят же)
 
Конференция "Базы" » INFORMATION_SCHEMA - Foreign Key [D7, MSSQL, Postgres]
Есть новые Нет новых   [134434   +29][b:0][p:0]