|
Что лучше: FK или триггеры проверки целостности?
|
|||
---|---|---|---|
#18+
Здравствуйте, Один умный человек говорил как-то, что чем создавать кучу FK на всё-всё-всё, лучше сделать кучу триггеров, проверяющих целостность ссылки. Я постеснялся спросить у него тогда, а чем это лучше. И с тех пор мучаюсь этим вопросом. Никак не могу понять, где потери, чем встроенный механизм проверок FK будет хуже, чем организация триггеров, которые будут делать, вроде бы, то же самое, но руками. Или умный человек был неправ? Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 21:41 |
|
Что лучше: FK или триггеры проверки целостности?
|
|||
---|---|---|---|
#18+
V.Borzov, "умный" человек был неправ. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 21:54 |
|
Что лучше: FK или триггеры проверки целостности?
|
|||
---|---|---|---|
#18+
V.Borzov, умный человек неправ. Триггер действует на уровне пользовательской транзакции. Поэтому он не способен обеспечить контроль целостности между конкурирующими транзакциями (он тупо не видит чужих изменений). А FK и PK проверяется по индексу, который содержит все ключи всех версий записей, т.е. он вне транзакций. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.04.2018, 22:16 |
|
Что лучше: FK или триггеры проверки целостности?
|
|||
---|---|---|---|
#18+
kdvV.Borzov, умный человек неправ. Триггер действует на уровне пользовательской транзакции. Поэтому он не способен обеспечить контроль целостности между конкурирующими транзакциями (он тупо не видит чужих изменений). А FK и PK проверяется по индексу, который содержит все ключи всех версий записей, т.е. он вне транзакций. Вооот. А теперь представим себе мастер-таблицу, скажем, статусов документов. Нуусс, скажем, счетов. Новый В работе Оплачен Отгружено Закрыт И таблицу этих самых счетов. Из пары мильёнчиков документов хотя бы. FK от которой по статусу кивает на эту мастер-таблицу. Которая никогда и никем редактироваться не будет. И запросы с условием на статус в where. Которые подхватят этот самый индекс. Особенно ищущие закрытые, лет эдак через 10 функлицирования предприятия. И прикинем сизифовы усилия сервера на регулярном ресторе этой базы при создании этого самого индекса. Жил один еврей, так он сказал, что всё относительно. Как говорят highly likely - it depends. Сдаёццо мне, что слова умного человека вырваны из контекста. Хотя в общем случае, безусловно, FK рулит. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 00:40 |
|
Что лучше: FK или триггеры проверки целостности?
|
|||
---|---|---|---|
#18+
А нефиг FK на 5 строк делать. P.S. Топик не читал. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 00:45 |
|
Что лучше: FK или триггеры проверки целостности?
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамА нефиг FK на 5 строк делать. P.S. Топик не читал. Если эти пять строк могут активно меняться - вполне так себе фиг. Правда лично я такой задачи придумать не могу :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 00:52 |
|
Что лучше: FK или триггеры проверки целостности?
|
|||
---|---|---|---|
#18+
Вы, кстати, "универсальные" справочники практиковали? Это когда несколько однотипных справочников объединяются по вертикали - ID, Ref_ID, Value, ... ? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 01:41 |
|
Что лучше: FK или триггеры проверки целостности?
|
|||
---|---|---|---|
#18+
Старый плюшевый мишкаА теперь представим себе мастер-таблицу, скажем, статусов документов. Нуусс, скажем, счетов. Новый В работе Оплачен Отгружено Закрыт NEW, IN_WORK, PAID, SHIPPED, CLOSED - ASCII символы этих слов слева направо легко умещаются в BIGINT от старшего байта к младшему, прекрасно сортируются и интерпретируются без всяких мастер-таблиц. Остается лишь прописать соответствующие числовые константы в ограничении CHECK соответствующего поля и создать по этому полю индекс. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 09:17 |
|
Что лучше: FK или триггеры проверки целостности?
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамВы, кстати, "универсальные" справочники практиковали? Это когда несколько однотипных справочников объединяются по вертикали - ID, Ref_ID, Value, ... ? Когда-то давно делали что-то похожее в мелком проекте. Чисто из интереса. Итог - закопали поглубже, ибо неудобно от слова совсем. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 09:44 |
|
Что лучше: FK или триггеры проверки целостности?
|
|||
---|---|---|---|
#18+
DarkMaster> неудобно от слова совсем. А что именно было неудобно? Разработка, сопровождение, иное? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 09:58 |
|
Что лучше: FK или триггеры проверки целостности?
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамА что именно было неудобно? Разработка, сопровождение, иное?Неудобно потому, что такой справочник лучше делать древовидным, когда первый уровень древа определяет тип справочника, а второй - элементы справочника. При использовании значений из такого справочника в поле таблицы придётся делать обвязку на триггере добавления/изменения. "Овчинка выделки не стоит". ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 10:04 |
|
Что лучше: FK или триггеры проверки целостности?
|
|||
---|---|---|---|
#18+
rdb_dev.... При использовании значений из такого справочника в поле таблицы придётся делать обвязку на триггере добавления/изменения. "Овчинка выделки не стоит". о какой обвязке речь? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 10:21 |
|
Что лучше: FK или триггеры проверки целостности?
|
|||
---|---|---|---|
#18+
m7m, о такой, которая будет проверять - входит ли значение поля в соответствующий диапазон ключей, относящийся к конкретному типу справочника, т.е. проверять идентификатор узла соответствующего ключа. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 10:26 |
|
Что лучше: FK или триггеры проверки целостности?
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамDarkMaster> неудобно от слова совсем. А что именно было неудобно? Разработка, сопровождение, иное? Ну то, что запросы становятся развесистыми - уже минус. Ну и постоянные кастование. Если честно - помню только общие нехорошие впечатления, но если очень интересно - могу покопаться в архивах - исходники где-то должны быть. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 10:27 |
|
Что лучше: FK или триггеры проверки целостности?
|
|||
---|---|---|---|
#18+
rdb_devГаджимурадов РустамА что именно было неудобно? Разработка, сопровождение, иное?Неудобно потому, что такой справочник лучше делать древовидным, когда первый уровень древа определяет тип справочника, а второй - элементы справочника. Есть такое дерево. Тоже задумывалось "для всего". Но в итоге там только справочник товаров, все остальное туда так и не засунул т.к. перестал понимать зачем. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 10:31 |
|
Что лучше: FK или триггеры проверки целостности?
|
|||
---|---|---|---|
#18+
У нас есть такой "универсальный" справочник. Вместо дерева используется идентификатор типа справочника. Проблема (у нас) в том, что в зависимости от этого типа нужна разная логика в поведении. Поэтому у нас она на клиенте. Допустим для одного справочника нужно каскадное удаление, для другого не нужно. Есть ещё проблемки. Например, просто пишем запрос по связанным справочникам и в запросе, допустим, 6-8 джойнов по одной таблице. Нечитаемо. И у меня есть подозрения в скорости таких запросов, хотя Влад сказал, что это вряд ли. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 10:32 |
|
Что лучше: FK или триггеры проверки целостности?
|
|||
---|---|---|---|
#18+
KreatorXXIНапример, просто пишем запрос по связанным справочникам и в запросе, допустим, 6-8 джойнов по одной таблице. Нечитаемо. Через алиасы получается довольно читаемо. Однако все равно не отвечает на вопрос - почему не в отдельных таблицах. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 11:05 |
|
Что лучше: FK или триггеры проверки целостности?
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам, Да Но это были совсем простые справочники, фактически не имеющие никакой "расчетной" нагрузки, ну вроде вот такого ... здесь код, кто и когда создал запись, кто и когда последний раз её изменил шифр наименование краткое наименование ....здесь еще несколько полей такого-же плана примечание И таки по факту для разработчиков это был "деревянный двухуровневый" справочник, для пользователей это были полноценные отдельные справочники. Из достоинств - очевидное при появлении нового "справочника" мизер телодвижений, добавить строку в первый уровень и в меню дабы он был доступен как отдельный справочник. Из недостатков - тоже очевидное,то что можно назвать "не додумал" (не полное знание предметной области, расширение круга решаемых задач), и оказывается справочник надо либо выносить в отдельную таблицу либо добавлять поля в существующую именно для этого справочника, либо .... И собственно недостаток превысил достоинство что касается именно "обвязки на триггере" - нам она была не нужна, ну просто из-за придерживания "идеологии" - в "сырой документ" вводите всё что хотите и как хотите а в обработку пойдет только тот документ в котором нет "ошибок", и проверка "на соответствие диапазону ключей" это та самое меньшее из контроля ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 11:19 |
|
Что лучше: FK или триггеры проверки целостности?
|
|||
---|---|---|---|
#18+
DarkMaster> Ну то, что запросы становятся развесистыми - уже минус. Если мы говорим об одном и том же, то по сути добавляется только одно (или два) условия в where (к одному/двум полям одной таблицы). Не так уж и развесисто. С учетом нормальных алиасов как подсказали выше - и читаемость особо не страдает. > Ну и постоянные кастование. Это ты про Value1, Value2 и пр. универсальные поля? > Если честно - помню только общие нехорошие впечатления, Меня интересуют впечатления, неизвестные грабли и пр, исходники как раз малоинтересны, там сложностей нет. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 11:41 |
|
Что лучше: FK или триггеры проверки целостности?
|
|||
---|---|---|---|
#18+
m7m> Но это были совсем простые справочники, фактически m7m> не имеющие никакой "расчетной" нагрузки Ну я и говорю о простых справочниках, о которых выше речь зашла, сложные-то понятно каждый в своей отдельной таблице. Как справочник может иметь расчетную нагрузку не очень понял. > Из недостатков - тоже очевидное,то что можно назвать "не додумал" > (не полное знание предметной области, расширение круга решаемых задач) > > И собственно недостаток превысил достоинство Ясно, спасибо. Иных недостатков, подводных камней не замечали? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 11:46 |
|
Что лучше: FK или триггеры проверки целостности?
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамКак справочник может иметь расчетную нагрузку не очень понял. Наверное я неправильно написал, имелось ввиду что-то в вроде вот такого "коэффициент перерасчета из одной единицы измерения в другую", ну и тому подобное Гаджимурадов РустамИных недостатков, подводных камней не замечали? Нет, не вспоминается ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 11:59 |
|
Что лучше: FK или триггеры проверки целостности?
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустам С учетом нормальных алиасов как подсказали выше - и читаемость особо не страдает. Это когда их мало. Даже с альясами при "широкой" выборке запрос превращается в лес из JOIN`ов. Не удобно, потому что при возврате через месяц к этому запросу - нужно делать на лишнюю операцию больше, чтобы "раскрутить" запрос в голове и понять, куда какой справочник лепится. Гаджимурадов Рустам> Ну и постоянные кастование. Это ты про Value1, Value2 и пр. универсальные поля? Про них. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 12:01 |
|
Что лучше: FK или триггеры проверки целостности?
|
|||
---|---|---|---|
#18+
DarkMasterЭто когда их мало. Даже с альясами при "широкой" выборке запрос превращается в лес из JOIN`ов. Не удобно, потому что при возврате через месяц к этому запросу - нужно делать на лишнюю операцию больше, чтобы "раскрутить" запрос в голове и понять, куда какой справочник лепится. Я немного не понял, ведь в любом случае независимо от того справочники в одной таблице или в разных "лес из JOIN`ов" останется, или я не прав? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 12:15 |
|
Что лучше: FK или триггеры проверки целостности?
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамНу я и говорю о простых справочниках, о которых выше речь зашла, сложные-то понятно каждый в своей отдельной таблице. Как справочник может иметь расчетную нагрузку не очень понял. Вот как-то так... Код: sql 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. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197.
... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 13:21 |
|
Что лучше: FK или триггеры проверки целостности?
|
|||
---|---|---|---|
#18+
Я вот приводил пример леса джойнов: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Ну нечитаемо совсем. Если только комментарии к каждой строке... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.04.2018, 13:38 |
|
|
start [/forum/topic.php?fid=40&msg=39632999&tid=1561143]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
61ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 306ms |
total: | 458ms |
0 / 0 |