Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Ссылочная целостность
|
|||
|---|---|---|---|
|
#18+
В дискуссиях этого топика часто проскакивает тезис, что в "правильной" БД должны обязательно использоваться констрэйнты. Все БД, с которыми мне приходилось видеть не использовали констрэйнты, но работа с объектами БД была допустима только через ХП. Собственно я в своих БД я использую этот принцип - работа только через ХП, констрэйнты не используются (ну разве на этапе разработки БД, потом отключаю). Универсального правила естественно нет, особенно если едет речь о нагруженной OLTP системе. Хочется услышать ваше мнение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2004, 11:37 |
|
||
|
Ссылочная целостность
|
|||
|---|---|---|---|
|
#18+
Ggg_oldособенно если едет речь о нагруженной OLTP системе. Хочется услышать ваше мнение. Даже реализация ссылочной целостности на триггерах подчас быстрее будет в OLTP. Чего уж говорить про SP. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2004, 11:52 |
|
||
|
Ссылочная целостность
|
|||
|---|---|---|---|
|
#18+
Надежно и правилно будет использование ограничений. Это последняя линия обороны. Во всех программных проектах, особенно больших, имеется допущение, что в коде существует ошибка. Использование ограничений в СУБД даст возможнось увеличить надежность ("правильность"). А если это касается ссылочной целостности (и не только), то она логическим образом вытекает (чаще всего) прямо из ER - модели ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2004, 12:00 |
|
||
|
Ссылочная целостность
|
|||
|---|---|---|---|
|
#18+
Ggg_oldХочется услышать ваше мнение. Мое мнение, основанное правда, лишь на теоретических знаниях по SQL-Server (сам я все еще работаю в ДОСе :-( ) и хранилищам данных, сводится к тому, что в правильно разработанной OLTP-системе (все таблицы находятся минимум в 3НФ или НФБК) не должно быть "ручных" (или через хранимые процедуры) проверок ссылочной целостности. Ggg_oldУниверсального правила естественно нет, особенно если едет речь о нагруженной OLTP системе. А по-моему, есть. Для любой OLTP-системы (хоть нагруженной, хоть нет). И это - автоматический контроль ссылочной целостности при помощи СУБД. Для чего строить индексы, первичные и внешние ключи, связи и т.д., если затем все заново самому проверять! Не дело OLTP-систем проводить аналитическую работу. Они нужны лишь как накопители оперативных данных о заказах, продажах, покупках и т.д. за небольшой промежуток времени (день, неделя, месяц, максимум - год). Данные в них - динамически меняются. Порой по нескольку раз за день. Отследить же все возможные "подводные камни" в силах только СУБД с ее автоматическим контролем целостности. А вот в OLAP-системах и хранилищах данных, где хранятся данные за несколько лет или десяток лет, и данные эти изменяются (дописываются) в лучшем случае раз в день (а то и значительно реже), на самом деле лучше отказаться от автоматического контроля целостности. По заявлениям Кодда (являющегося также родоначальником OLAP) объем данных OLAP-системы из-за различных видов группировок и суммирования в 2,5 - 100 раз больше, чем в OLTP-системе... Но там несколько иная ситуация - частичная денормализация таблиц (приводящая к появлению дублирующихся записей) ради ускорения (и упрощения) SQL-запросов, различные заморочки с представлением данных из OLTP-систем в виде OLAP-кубов и т.д. А это уже совсем другая история... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2004, 12:25 |
|
||
|
Ссылочная целостность
|
|||
|---|---|---|---|
|
#18+
Ggg_old: Использование констрэйнтов это хорошо и правильно. Я говорю о компромисе, который нужен для обеспечения скорости и уменьшения потребления ресурсов. Отсутствие прямого доступа в БД и работа через ХП это позволяют достичь, т.к. частенько в ХП делать проверки приходится все равно. ТОлько в ХП я могу выбирать что делать, а что нет, гибко отследить ошибку, принять решение о ее устранении и.т.д. Хотя, если БД разрабатывается не очень добросовестно, или очень много людей имеют доступ девелопера,не имея нужной квалификации, то ХП - это последний барьер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2004, 13:00 |
|
||
|
Ссылочная целостность
|
|||
|---|---|---|---|
|
#18+
опечатка :( читать надо "...то констрэйнты - это последний барьер..." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2004, 13:02 |
|
||
|
Ссылочная целостность
|
|||
|---|---|---|---|
|
#18+
Было бы интересно узнать, как с помощью программного кода реализовать проверку уникальности и корректности ссылки. Особенно интересно как это сделать в Oracle ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.07.2004, 15:27 |
|
||
|
Ссылочная целостность
|
|||
|---|---|---|---|
|
#18+
/topic/103173 вот здесь в частности про это копья ломали. Я себе взял за правило обеспечивать как ссылочную целостность, так и ограничения на значения все-таки средствами СУБД а не кодом триггеров и ХП, в котором 1. Могут быть ошибки 2. Может быть не оптимизирован. 3. Не столь явно диктуется бизнес правилами. 4. Может даже быть плохо переносим. 5. Не ясен для понимания людям из поддержки. Насчет скорости я тоже сильносомневаюсь, что быстрее, по крайней мере на WEB нашел две рекомендации реализовать целостность декларативно ссылками и ни одной обратной рекомендации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.07.2004, 12:05 |
|
||
|
Ссылочная целостность
|
|||
|---|---|---|---|
|
#18+
а нафига тогда БД если не использовать то что она предоставляет, зачем программировать то что уже реализовано в механизме БД. потом при создании констраинтов создаются и соответствующие индексы. Просто часто встречаются программисты не доверяющие никому, они считают что правильно работает только то что они сами написали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2004, 10:13 |
|
||
|
Ссылочная целостность
|
|||
|---|---|---|---|
|
#18+
Сам код проверки "правильности" данных может быть основан на обработке исключений, возникающих при существовании ограничений целостности. Для Oracle: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. Соответственно, если в дальнейшем ограничения целостности будут убраны, то код будет работать несколько по-иному. Даже если административно запретить именно такой способ написания кода, то может сложиться ситуация, когда впоследствии будет разрабатываться новый код программистами, которым это ограничение по каким-то причинам было неизвестно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2004, 12:39 |
|
||
|
Ссылочная целостность
|
|||
|---|---|---|---|
|
#18+
bokarevпотом при создании констраинтов создаются и соответствующие индексы Что это за бред?! Где это реализовано для Constraint не Primary key? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2004, 16:58 |
|
||
|
Ссылочная целостность
|
|||
|---|---|---|---|
|
#18+
Например - UNIQUE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.07.2004, 18:03 |
|
||
|
Ссылочная целостность
|
|||
|---|---|---|---|
|
#18+
Ограничение UNIQUE тоже создает индех. По крайней мере в MS SQL... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2004, 01:45 |
|
||
|
Ссылочная целостность
|
|||
|---|---|---|---|
|
#18+
Что это за бред?! Где это реализовано для Constraint не Primary key?[/quot] RBO в Oracle работает используя FK и PK и соответствующие индексы, и я так и не понял что вы называете бредом ? обоснуйте пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2004, 10:01 |
|
||
|
Ссылочная целостность
|
|||
|---|---|---|---|
|
#18+
Констрейнты - это святое в теории БД. Подумайте о тех, кто придет после Вас и будет писать Приложения к Вашей БД. Я им не завидую. А автоматическое (то бишь при создании констрейнта) создание индексов реализовано, например, в Interbase, Paradox etc. wbr, k ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2004, 11:04 |
|
||
|
Ссылочная целостность
|
|||
|---|---|---|---|
|
#18+
Подумайте о тех, кто придет после Вас и будет писать Приложения к Вашей БД. Я им не завидую. Есть мнение "А нафига о ламаках думать - не разберутся в нашем крутом коде - их проблемы, у нас-то все работало, когда сдавали." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2004, 11:37 |
|
||
|
Ссылочная целостность
|
|||
|---|---|---|---|
|
#18+
Нет, ну если "после нас хоть потоп", тогда ты верной дорогой идешь :) Ggg_oldВ дискуссиях этого топика часто проскакивает тезис, что в "правильной" БД должны обязательно использоваться констрэйнты. Все БД, с которыми мне приходилось видеть не использовали констрэйнты, но работа с объектами БД была допустима только через ХП. Собственно я в своих БД я использую этот принцип - работа только через ХП, констрэйнты не используются (ну разве на этапе разработки БД, потом отключаю). Универсального правила естественно нет, особенно если едет речь о нагруженной OLTP системе. Хочется услышать ваше мнение. Сколько таблиц было в тех БД, которые тебе приходилось видеть? Сколько таблиц в твоих в БД? Если пара-тройка, тогда твой вопрос может, и имеет смысл. А, вообще, есть бизнес-правила (в частности, констрэйнты) - это как бы врожденное :) А есть прикладной код на сервере/клиенте, который заведует функциональностью: сегодня такой, завтра сякой. Отними сейчас твой код, и вместо БД получится просто набор таблиц - Куча Поэтому имхо лучше, все-таки, отделять мух от котлет. А какие доводы против констрэйнтов? Ggg_oldно работа с объектами БД была допустима только через ХП. Собственно я в своих БД я использую этот принцип - работа только через ХП, И что хорошего в этом ограничении? wbr, k ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2004, 12:22 |
|
||
|
Ссылочная целостность
|
|||
|---|---|---|---|
|
#18+
bokarevиспользуя FK и PK и соответствующие индексы, и я так и не понял что вы называете бредом ? В общем случае это не так. Только для PK гарантировано должен создаваться индекс, все остальное нивелирует разницу между UNIQUE INDEX и UNIQUE CONSTRAINT и является ошибкой разработчиков многих серверов БД (точнее, большинства, потому что так легче). Вот, например, скрипт для MSSQL: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. последний запрос возвращает PK_xxx и UK_xxx. То есть, для FK индекс НЕ СОЗДАЛСЯ, что правильно, ибо нафиг он не нужен по умолчанию (если в Oracle это не так - мне искренне жаль). Но зачем создается индекс UK_xxx - не понятно, в общем случае в нем может не быть необходимости (опять же, проще всего вообще внутри сервера не разделять UK и UI, что в большинстве серверов имеет место, за исключением статистики по UI). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2004, 12:54 |
|
||
|
Ссылочная целостность
|
|||
|---|---|---|---|
|
#18+
c FK нет индексов - согласен. я сейчас как раз сижу на базе в которой нет ссылочной целостности, и скажу это очень не весело. Это как раз тот случай когда многа кода, большая база (>1000 таблиц) и приложению уже больше 15 лет. сейчас в эту базу ввести ссылочную целостность очень сложно(может вообще невозможно), а втыки с дублирующимсяи и висящими записями встречаются постоянно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2004, 13:24 |
|
||
|
Ссылочная целостность
|
|||
|---|---|---|---|
|
#18+
2kassandra: БД - опердень банка. Таблиц - сотни, процедур - аналогично. Есть основные таблицы (например таблица платежей и остатков), есть куча справочников (например коды банков, коды операций, исполнителей и.т.п). В таблице платежей - за все время записей около 20 млн. Констрэйнты не используются. При операции ввода или проведения нового платежа все проверки по любому делаются только в соответствующей ХП. Как бы работала система по скорости, если бы на таблицу платежей еще бы был констрэйнт практически на все ее поля я не знаю - но предполагаю, что-бы тормоз был конретный, хотя я не имел опыта работы с большими БД с интенсивной нагрузкой аналогичной нашей. БД разрабатывается выделенными разработчиками, естественно уровень отвественности и исполнения очень высокий. Имея в качестве примера "большую" БД, свои мелкие БД (действительно пара-тройка таблиц и десяток-другой процедур)я делаю по такому-же принципу. Единственно, что при процедуроориентированной работе БД, я стараюсь делить ХП на несколько как-бы уровней (интерфейсные ХП, - которые вызываются пользователями и ХП уровня "ядра" - которых гораздо меньше и только через них ведется манипулирование свойствами объектов БД. В целом - принцип работающий. Но я еще раз повторяюсь - я за констрэйнты, но между теорией и практикой всегда есть разрыв. Хочется услышать аргументы за частичный или полный отказ от констрэйнтов в БД и когда это оправдано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2004, 13:46 |
|
||
|
Ссылочная целостность
|
|||
|---|---|---|---|
|
#18+
Сергей ВаскецовТолько для PK гарантировано должен создаваться индекс Это где-то в теории РБД протоколируется ? Ссылку, если можно... Насколько я понимаю, ограничения относятся к теории, а их реализация к практике. Ни в одной книге по теории БД я не встречал такого сильного утверждения, теория вообще не знает ничего об индексах. Создание уникальных индексов для PRIMARY и UNIQUE, как Вы правильно заметили, выполняется именно для простоты, так как иначе для поддержки соответствующих ограничений пришлось бы сканировать всю таблицу. Ограничение UNIQUE является потенциальным или альтернативным ключом и в некотором смысле аналогичным PRIMARY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2004, 13:53 |
|
||
|
Ссылочная целостность
|
|||
|---|---|---|---|
|
#18+
В ORACLE для UK индекс создается, для FK нет. Если бы не создавался, как проверить уникальность? Для проверки корректности FK индекс не нужен, НО попытка удалить запись в главной таблице приводит к неприятносттям если в подчиненной нет подходящего индекса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2004, 13:57 |
|
||
|
Ссылочная целостность
|
|||
|---|---|---|---|
|
#18+
ChAНи в одной книге по теории БД я не встречал такого сильного утверждения, теория вообще не знает ничего об индексах Верно, на самом деле я немного утрирую, только для CLUSTERED PK он обязан создаваться (по смыслу CLUSTERED), для NONCLUSTERED тоже не обязательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.07.2004, 14:18 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=165&tid=1546338]: |
0ms |
get settings: |
11ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
91ms |
get tp. blocked users: |
2ms |
| others: | 256ms |
| total: | 451ms |

| 0 / 0 |
