Страница 1 из 1

Таблица соответствий

Добавлено: 31 мар 2006, 02:28
santilaas
У меня такой вопрос:

Почитываю книгу Борри "Firebird". Кстати, сама книга, наряду с "Мир Interbase" - это настоящая находка как для начинающего, так и для опытного.
В нескольких местах рассказывается про таблицы соответствий (например, Глава 31 "Триггеры", раздел "Таблица соответствий")
Там предлагается отказаться от внешнего ключа на короткую статическую таблицу, но всё же иметь поле, содержащее ключ этой таблицы.
При этом нужно запретить удаление записей из этой таблицы. Но тогда почему не оставить стандартное ограничение внешнего ключа и также запретить удаление данных из таблицы.
Только из-за индексов? Если да, то насколько это весомо? (у меня таких таблиц соответствий получается много и мне не сильно хочется для каждой писать триггеры обработки целостности - только не сочтите это за лень, просто хочется сделать попроще)

Дело в том, что мне нужно реализовать что-то наподобие перечислений в 1С. Что посоветуете. Буду премного благодарен!

Re: Таблица соответствий

Добавлено: 31 мар 2006, 08:05
Ivan_Pisarevsky
santilaas писал(а):У меня такой вопрос:

Там предлагается отказаться от внешнего ключа на короткую статическую таблицу, но всё же иметь поле, содержащее ключ этой таблицы.
При этом нужно запретить удаление записей из этой таблицы. Но тогда почему не оставить стандартное ограничение внешнего ключа и также запретить удаление данных из таблицы.
Только из-за индексов? Если да, то насколько это весомо?
Когда начинаешь джойнить таблицы с такими внешними ключами приходится руками заставлять оптимизатор обходить такие индексы "+0" к примеру или приджойнивать такую мелочевку лефт джойном (если суть от этого не меняется), иначе тормоза, даже на несложных выборках.

Добавлено: 14 апр 2006, 05:37
santilaas
Иван, спасибо за комментарий.
А у меня ещё такой вопрос: можно ли считать статической (и соответственно также отказаться от внешнего ключа) таблицу, состоящую из, примерно, 50 записей? Притом изменяется он редко, несколько раз в месяц.

Добавлено: 14 апр 2006, 08:28
Dimitry Sibiryakov
По-настоящему статической можно считать только таблицу которая не изменяется никогда. В твоем случае надо смотреть не на саму таблицу а на ссылающиеся на нее и операции с ними.
Точнее говоря, нужно оценить вероятность того что RI на триггерах не справится со своей задачей. Если вероятность приемлемая - таблицу можно объявлять статической.

Добавлено: 14 апр 2006, 11:54
Ivan_Pisarevsky
santilaas писал(а):Иван, спасибо за комментарий.
А у меня ещё такой вопрос: можно ли считать статической (и соответственно также отказаться от внешнего ключа) таблицу, состоящую из, примерно, 50 записей? Притом изменяется он редко, несколько раз в месяц.
Заочно в лоб сказать "делай так" будет некорректно. Реальный запрос, время исполнения с ключем и без, если без ключа РЕАЛЬНО лучше, тогда придумывать заменители ключу, а то может и не стоит изобретать велосипед. Может все сведется к тому, чтоб в паре проблемных запросов приставить "+0".
Вобщем на месте виднее. :)

Добавлено: 14 апр 2006, 13:00
santilaas
Понял, спасибо за помощь