У меня такой вопрос:
Почитываю книгу Борри "Firebird". Кстати, сама книга, наряду с "Мир Interbase" - это настоящая находка как для начинающего, так и для опытного.
В нескольких местах рассказывается про таблицы соответствий (например, Глава 31 "Триггеры", раздел "Таблица соответствий")
Там предлагается отказаться от внешнего ключа на короткую статическую таблицу, но всё же иметь поле, содержащее ключ этой таблицы.
При этом нужно запретить удаление записей из этой таблицы. Но тогда почему не оставить стандартное ограничение внешнего ключа и также запретить удаление данных из таблицы.
Только из-за индексов? Если да, то насколько это весомо? (у меня таких таблиц соответствий получается много и мне не сильно хочется для каждой писать триггеры обработки целостности - только не сочтите это за лень, просто хочется сделать попроще)
Дело в том, что мне нужно реализовать что-то наподобие перечислений в 1С. Что посоветуете. Буду премного благодарен!
Таблица соответствий
-
- Заслуженный разработчик
- Сообщения: 644
- Зарегистрирован: 15 фев 2005, 11:34
Re: Таблица соответствий
Когда начинаешь джойнить таблицы с такими внешними ключами приходится руками заставлять оптимизатор обходить такие индексы "+0" к примеру или приджойнивать такую мелочевку лефт джойном (если суть от этого не меняется), иначе тормоза, даже на несложных выборках.santilaas писал(а):У меня такой вопрос:
Там предлагается отказаться от внешнего ключа на короткую статическую таблицу, но всё же иметь поле, содержащее ключ этой таблицы.
При этом нужно запретить удаление записей из этой таблицы. Но тогда почему не оставить стандартное ограничение внешнего ключа и также запретить удаление данных из таблицы.
Только из-за индексов? Если да, то насколько это весомо?
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
По-настоящему статической можно считать только таблицу которая не изменяется никогда. В твоем случае надо смотреть не на саму таблицу а на ссылающиеся на нее и операции с ними.
Точнее говоря, нужно оценить вероятность того что RI на триггерах не справится со своей задачей. Если вероятность приемлемая - таблицу можно объявлять статической.
Точнее говоря, нужно оценить вероятность того что RI на триггерах не справится со своей задачей. Если вероятность приемлемая - таблицу можно объявлять статической.
-
- Заслуженный разработчик
- Сообщения: 644
- Зарегистрирован: 15 фев 2005, 11:34
Заочно в лоб сказать "делай так" будет некорректно. Реальный запрос, время исполнения с ключем и без, если без ключа РЕАЛЬНО лучше, тогда придумывать заменители ключу, а то может и не стоит изобретать велосипед. Может все сведется к тому, чтоб в паре проблемных запросов приставить "+0".santilaas писал(а):Иван, спасибо за комментарий.
А у меня ещё такой вопрос: можно ли считать статической (и соответственно также отказаться от внешнего ключа) таблицу, состоящую из, примерно, 50 записей? Притом изменяется он редко, несколько раз в месяц.
Вобщем на месте виднее.