![]() |
|
Модераторы: LSD |
![]()
|
|
| FINANSIST |
|
|||
|
Статус: Жив ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 11.4.2008 Где: Москва Репутация: нет Всего: 23 |
Наткнулся на статью Что НЕ надо делать в InterBase и Firebird
Допустим есть справочник "месяцы года" где всего 12 записей и есть таблица "Данные" где условно 2-3 миллиона записей где есть поле Month В случае, если проигнорировать этот совет, делаем foreign key на "месяцы года" и получаем нормализованную структуру в которой есть минус:2-3 миллиона индексов по полю month и плюсы - экономия места в базе по полю month, т.к. в нем вместо 2-3 мллионов тектовых значений хранятся 2-3 миллиона коротких ссылок на 12 значений Так что, получается действительно эффективней не делать связей в таком случае и контролировать целостность на триггерах с хранением текста на 2-3 миллиона записей без индексов при условии что select будет проводиться в том числе и по этому полю???? Это сообщение отредактировал(а) LSD - 12.2.2010, 14:05 -------------------- “...Брали корову рыжую одну, отдавать будем корову рыжую одну, чтобы не нарушать отчетности” Эдуард Успенский, “Каникулы в Простоквашино” |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 24 Всего: 538 |
Что не надо делать на форуме: Использовать тег code вместо тега quote, это два совершенно разных тега предназначенные для разных целей.
По сабжу, в принципе иногда такая логика оправданна. Например для колонки ПОЛ делать словарь не очень разумно -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
Хмммм. FB, я слышал - версионник? Это значит что блокировок по чтению у него нет? Как рекомендующий в триггере собирается чекануть добавляющиеся в одной транзакции детали для удаляющейся в другой транзакции записи? Добавлено @ 14:22 check( /*month = trunc(month) and*/ month between 1 and 12) как для словаря так и для деталей. Это сообщение отредактировал(а) Zloxa - 12.2.2010, 14:23 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 2 Всего: 54 |
возможно автор не рекомендовал такие FK потомучто в результате будет для поля FK создан индекс работа которого будет не эффективной.
Добавлено через 12 минут и 39 секунд он самый -------------------- Кольцов Виктор Владимирович |
|||
|
||||
| FINANSIST |
|
|||
|
Статус: Жив ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 11.4.2008 Где: Москва Репутация: нет Всего: 23 |
Не возможно а так оно и есть, только вопрос не в этом а в определении критерия выбора той или иной схемы, пример LSD явно больше подходит под check sex in (male,female) и никаких тебе справочников, а вот соотношение "50 записей- к 5 миллионам" этого уже достаточно что бы отказаться от триггеров или еще нет (это частный пример) Где критерий отказа от индексации? -------------------- “...Брали корову рыжую одну, отдавать будем корову рыжую одну, чтобы не нарушать отчетности” Эдуард Успенский, “Каникулы в Простоквашино” |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 13 Всего: 454 |
А третий, и самый разумный в данном случае, вариант - ссылка из таблицы в словарь есть, а FK нет - ты не рассматриваешь? То, что пишут в статье - пишут именно о целостности, а никак не о собственно хранении данных. В данном случае ID в таблице месяцев от 1 до 12 и constraint на индекс месяца в основной таблице (без связи между таблицами) сделают то же самое, что и FK, но гораздо меньшей кровью. А каскадное удаление тебе не грозит - у нас в календаре ещё долго будет 12 месяцев... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 2 Всего: 54 |
убрать fk если начали ругаться клиенты что медленно открывается -------------------- Кольцов Виктор Владимирович |
|||
|
||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 7 Всего: 44 |
Здесь основной текстя бы даже сказал, одно слово главное "никогда".
Если по логике в справочнике данные должны изменяться, то совет уже становится не таким актуальным, потому как на этапе проектирования невозможно определить кол-во записей в справочнике, и ссылочную целостность все-таки надо реализовывать, а на триггерах ее не реализуешь. -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
| FINANSIST |
|
|||
|
Статус: Жив ![]() ![]() Профиль Группа: Участник Сообщений: 526 Регистрация: 11.4.2008 Где: Москва Репутация: нет Всего: 23 |
Задача не боевая, на понимание концепции ???
А это имеет отношение к вопросу? Akina, с месяцами плохой пример привел... "50 абстрактных НЕМЕНЯЮЩИХСЯ НЕ УДАЛЯЮЩИХСЯ НО ДОБАВЛЯЮЩИХСЯ (незначительно) записей имеющих генератор по id, и триггер на инсерт в 5 миллионах на проверку id этих 50 записей" - это будет правильным решением с точки зрения организации структуры данных? -------------------- “...Брали корову рыжую одну, отдавать будем корову рыжую одну, чтобы не нарушать отчетности” Эдуард Успенский, “Каникулы в Простоквашино” |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
А в названии темы не звучит"Почему триггер лучшая альтернатива"? Или это не вопрос? Что касаемо оракла триггер - не альтернатива. в ФБ, думаю, тоже. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 13 Всего: 454 |
Для любой организации существует контрпример. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
Если ФБ действительно накидывает индекс на FK, с учетом выделенного капсом, использование FK действительно может оказаться избыточно накладным, а чек в триггере вполне себе может обеспечить целостность данных меньшей кровью. Добавлено через 3 минуты и 57 секунд Наверное к выделеному капсом следует добавить еще условия, что в таблицу деталей данные льются интенсивно, возможно даже конкурирующими сессиями, либо мы имеем жесткие ограничения дискового пространства. Как бы там нибыло изначальная формулировка была уже ограничена достаточно большим количеством условий. Потому случай это частный. А замена FK триггером - оптимизация. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
Блин, я не внимательно прочел это^ :( -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| Deniz |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1251 Регистрация: 16.10.2004 Где: Новый Уренгой Репутация: 7 Всего: 44 |
Вопрос почему? Так Zloxa уже давно все объяснил. Триггер выполняется в контексте транзакции, а FK вне контекста. -------------------- "Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с) |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 11 Всего: 161 |
Deniz, там в тексте совета есть ограничивающая оговорка, позволяющая реализовать ограничение триггером
По всей видимости у тебя тоже рефлекс сработал раньше чем мозг до конца воспринял текст предложения. Видать и ты сильно обжегся некогда -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
![]()
|
| Правила форума "Общие вопросы по базам данных" | |
|
|
Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:
Данный форум не предназначен для:
Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение.
Полезные советы: Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | СУБД, общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |