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

ЧАстые Вопросы и Ответы

Модераторы: kdv, CyberMax

Ответить
santilaas
Сообщения: 51
Зарегистрирован: 27 авг 2005, 21:05

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

Сообщение santilaas » 31 мар 2006, 02:28

У меня такой вопрос:

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

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

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

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

Сообщение Ivan_Pisarevsky » 31 мар 2006, 08:05

santilaas писал(а):У меня такой вопрос:

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

santilaas
Сообщения: 51
Зарегистрирован: 27 авг 2005, 21:05

Сообщение santilaas » 14 апр 2006, 05:37

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

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 14 апр 2006, 08:28

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

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 14 апр 2006, 11:54

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

santilaas
Сообщения: 51
Зарегистрирован: 27 авг 2005, 21:05

Сообщение santilaas » 14 апр 2006, 13:00

Понял, спасибо за помощь

Ответить