|
|
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
Прописывать на уровне бд или это старый век? __________________________________________________________________ THE TRUTH IS OUT THERE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2017, 14:49 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
Связи (констрайнты) будут мешать разными способами. Поэтому многие разработчики их принципиально не используют. И правильно делают, ИМХО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2017, 14:55 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVСвязи (констрайнты) будут мешать разными способами. Поэтому многие разработчики их принципиально не используют. И правильно делают, ИМХО. согласен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2017, 15:02 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVСвязи (констрайнты) будут мешать разными способами. Поэтому многие разработчики их принципиально не используют. И правильно делают, ИМХО.Да и таблицы устарели, надо держать всё в XML и NoSQL. И БД привязывать только к одному приложению, только кретин полагает, что БД могут пользоватся разными приложениями. P.S. ДБ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2017, 15:10 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVСвязи (констрайнты) будут мешать разными способами. Каким образом FOREIGN KEY CONSTRAINT может мешать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2017, 17:16 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
stomskyLSVСвязи (констрайнты) будут мешать разными способами. Каким образом FOREIGN KEY CONSTRAINT может мешать? Ну в принципе они могут мешать, конечно - их проверки небесплатны и увеличивают требуемые ресурсы на обновление данных. Но реальные кейсы, когда имеет смысл давиться за микросекунды за счет надежности, прозрачности и самодокументируемости системы - они, ээ, редки, весьма редки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2017, 18:11 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
Думаю, тут речь не о ресурсах. Связи мешают девелоперам другим, они требуют дисциплины - с ними ничего так просто не грохнеш не вставиш, скрипты приходится писать аккуратнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2017, 18:28 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
авторих проверки небесплатны и увеличивают требуемые ресурсы на обновление данных Зато их проверки не напрасны, то есть если не делать ограничения на уровне БД, то эти ограничения надо делать на уровне логики. зы На самом деле я дублирую и в БД стараюсь делать и в программе проверки пишу. Но как правильно делать -- я не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 04:21 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
Имхо, зависит от базы. Доводы за: - если данные в базе имеют самостоятельную ценность (живут длительное время, используются более чем одним приложением) - низкая квалификация программистов Доводы против: - требуется большая скорость вставки и другие способы оптимизации уже реализованы - вставка сущности в сложную нормализованную базу может быть делом нетривиальным ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 08:38 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
Кот Матроскинstomskyпропущено... Каким образом FOREIGN KEY CONSTRAINT может мешать? Ну в принципе они могут мешать, конечно - их проверки небесплатны и увеличивают требуемые ресурсы на обновление данных Кот, блин, ну ты такой троллинг запорол!!! Разумеется я знаю про эти якобы "тормоза". Но я ни разу не слышал серьезных аргументов в продолжение разговора об этих тормозах. Поэтому надеюсь, что LSV и объяснит. scfДоводы против: - требуется большая скорость вставки и другие способы оптимизации уже реализованы - вставка сущности в сложную нормализованную базу может быть делом нетривиальным Ну т.е. надо принять за правило, что отказываться от внешних ключей надо там, где уже пожертвовали нормализацией? Ведь даже если мы откажемся от FOREIGN KEY (как технической возможности РСУБД) мы же не откажемся от бизнес-требования "обеспечить ссылочную целостность данных"? Нас же не устроит, что, например, "Строка заказа" может существовать без привязки к "Заказу"? А если не устроит, то как без FOREIGN KEY будем обеспечивать выполнение этого бизнес-требования? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 09:18 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
А если не устроит, то как без FOREIGN KEY будем обеспечивать выполнение этого бизнес-требования? Просто напишите логику, где всегда будет шапка у строки заказа. Только и всего. А при различных ручных манипуляциях с данными часто приходится кратковременно и осознанно нарушать некую логику. Изредка возможна ситуация, что сначала вставляются строки, а затем шапка. Или импорт из сырого источника, где логика уже изначально нарушена. И вообще таких ситуаций немало. И тогда FOREIGN KEY будут люто мешать. Тож самое касается и триггеров, созданных для поддержки ФК. Нарушение логики ФК всегда можно обнаружить и правильно отреагировать (н-р заново создать шапку или удалить/переместить осиротелые строки) при этом не выпадая в ошибки СУБД. Не всегда вообще возможно создание ФК. Тогда придется делать другое решение, т.е. применять несколько разных методов вместо одного. зы: Тот, кто настаивает на использовании FOREIGN KEY просто мало работал с реальными данными. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 09:58 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVА если не устроит, то как без FOREIGN KEY будем обеспечивать выполнение этого бизнес-требования? Просто напишите логику, где всегда будет шапка у строки заказа. Только и всего. Давай на примере. Например, есть такая структура данных (T-SQL): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. По-моему, между этими таблицами должна быть связь внешним ключом между столбцами: Orders.OrderId -> OrderDetails.OrderId. Но мы внешние ключи решили не использовать. Что должно быть в слое бизнес-логики для того, чтобы запрос на вставку строки в OrderDetails не привел к нарушению ссылочной целостности? Я правильно понимаю, что вместо этого: Код: sql 1. надо сделать что-то вроде этого: Код: sql 1. 2. 3. 4. ? Ну, само собой, это все надо выполнить с нужным уровнем изоляции и наложением блокировки на выбранную в Order строку, чтобы между SELECT-ом и INSERT-ом другой пользователь эту строку не стер. Если я понял правильно, то ИМХО быстрее отработает с внешним ключом... LSVА при различных ручных манипуляциях с данными часто приходится кратковременно и осознанно нарушать некую логику. Изредка возможна ситуация, что сначала вставляются строки, а затем шапка. А можно пример такой ситуации? Для меня это как-то диковато... LSVИли импорт из сырого источника, где логика уже изначально нарушена. Ну в этом случае данные, которые надо загрузить в базу, просто некорректны с точки зрения модели данных бизнес-логики. Я таких случаях в той же базе делаю отдельные таблицы для первоначальной (черновой) загрузки таких данных (может быть, не нормализованные и, да, может быть, без внешних ключей). Этакая маленькая свалка данных в базе данных. Но потом пользователю через интерфейс программы все равно приходится наводить порядок и перегонять эти данные в основные таблицы базы, в которых уже есть внешние ключи. Все-таки просто загрузить данные в базу - мало. Главное как их потом можно будет использовать: строить отчеты или производить расчеты. А люди, которые пишут аналитические запросы, в праве рассчитывать на то, что данные в базе корректны. И "потерянных" строк в Detail-таблицах не будет. Я не прав? LSVНарушение логики ФК всегда можно обнаружить и правильно отреагировать (н-р заново создать шапку или удалить/переместить осиротелые строки) Как ты создашь заново строку в таблице Orders??? Откуда ты возьмешь ее реквизиты (номер, дату, КлиентId и пр.)? Заставишь пользователя заносить с бумаги? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 12:25 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
А можно пример такой ситуации? Для меня это как-то диковато...Всё потому что Вы мало работали с данными. Это пройдет... :) Иногда приходится руками править к-л "поломанные" данные. Причин "поломки" может быть много. Но при этом иногда удобно сначала вставить строку, а затем найти для нее правильную ссылку. При массовом/постепенном импорте таблиц к-л сторонним визардом. stomskyКак ты создашь заново строку в таблице Orders??? Откуда ты возьмешь ее реквизиты (номер, дату, КлиентId и пр.)? Заставишь пользователя заносить с бумаги?Не нужно проецировать проблему на конкретный случай. Мы обсуждаем подход, а не ордера. Допустим я "просто знаю", что эта строка принадлежит клиенту ХХХ. :) Можно штатно создать пустой документ и вставить ссылку на шапку в сиротской строке. Кстати заново заносить с бумаги тоже приходилось. :) Кароч есть масса случаев, когда приходится работать с несогласованными данными. Лучше иметь поврежденные данные (кот. вероятно можно поправить), чем вообще ничего не иметь, кроме кучи ошибок вставки. Удалить их всегда успеется. Констрайнты не универсальны. Сегодня это ссылка на единственную таблицу. Завтра логика потребует сделать сложный ключ и сделать ссылку на разные таблицы (тип + ключ). Или вдруг потребуется запретить наличие ссылки на строку, у кот. сумма недостаточна или "тип" не тот. Ниодна тиражная ERP система не использует ФК. И это абсолютно правильно для постоянно эволюционирующих систем. Все равно нравятся констрайнты ? ОК. Используй их. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 13:09 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
mr_max, LSVНиодна тиражная ERP система не использует ФК. И это абсолютно правильно для постоянно эволюционирующих систем. +1 Простой кейс: Есть таблица сделок, есть в ней поле ID контрагента, у контрагента есть ссылка на справочник сегментов и т.д. И таких полей у вас много за 30 с разной глубиной. И предположим у вас распух EndOfDay. Вы точно определили, что дело не в связанных со сделками дынных, а в их количестве. И у вас нет специалиста по производительности. Нужно отдавать анализ на строну. Если у вас везде присутствует FK - вам придется отдавать, помимо таблицы сделок, еще и всю справочную информацию и рассказывать в какой последовательности заносить данные (пусть по каким то причинам бэкап отдать вы не можете). Если ФК нет и целостность вы обеспечиваете на стороне клиента - вперед и с песней без всей этой гирлянды справочных данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 14:06 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVКароч есть масса случаев, когда приходится работать с несогласованными данными. Масса. LSVЛучше иметь поврежденные данные (кот. вероятно можно поправить), чем вообще ничего не иметь, кроме кучи ошибок вставки. А тут есть варианты. Я бы сначала проверил данные на наличие в справочниках, правильное импортировал, а неправильные отправил бы в обработку. Чем мучаться потом с корректировкой в рабочей базе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 14:09 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVКароч есть масса случаев, когда приходится работать с несогласованными данными. Лучше иметь поврежденные данные (кот. вероятно можно поправить), чем вообще ничего не иметь, кроме кучи ошибок вставки. Удалить их всегда успеется. Т.е. когда надо позволить иметь бардак в базе данных (хотя бы кратковременно)? :) Ну тогда, конечно, возразить нечего :) LSVНи одна тиражная ERP система не использует ФК. И это абсолютно правильно для постоянно эволюционирующих систем. Хорошо, при должной прямоте рук разработчиков и достаточном их количестве без FOREIGN KEY обойтись можно. Можно даже без уникальных первичных ключей обойтись. Обычных индексов одних наделать и нормально. Но это, по-моему, из области: "у нас такая большая и богатая контора, что мы можем позволить себе разработать свою СУБД (свой ORM, свой Web-сервер и пр.)". На этом сайте реально все работают в таких конторах? Чтобы отказаться от FOREIGN KEY в промышленной СУБД необходимо между нею (СУБД) и клиентом (написанным не тобой) воздвигнуть стену из сервисов доступа к базе. И обязать клиента модифицировать БД только посредствам этих сервисов. LSVВсе равно нравятся констрайнты ? ОК. Используй их. Договорились. :) Я только за то, чтобы после того, как на вопрос "нужны ли констрейнты" ответить "нет", все-таки добавить "но в этом случае ты рискуешь... и потому тебе придется ...". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 14:31 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
mr_maxПрописывать на уровне бд или это старый век? __________________________________________________________________ THE TRUTH IS OUT THERE Вы, вероятно, говорите о "реляционной модели данных". В ней никаких связей нет, и прописать то, чего нет, "на уровне БД" у Вас не получится. Вероятно, Вы спрашиваете нужно ли ограничения целостности поддерживать на стороне БД, или их можно поддерживать на стороне приложения. Чем больше ОЦ Вы будете поддерживать на стороне БД, тем качественнее Ваше приложение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 14:43 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
982183А тут есть варианты. Я бы сначала проверил данные на наличие в справочниках, правильное импортировал, а неправильные отправил бы в обработку. Чем мучаться потом с корректировкой в рабочей базе.Сразу видно, что товарисч мало работал с данными... :) Импортируете неск. разных тхт-файлов. Вроде бы нормальных. Ну отправьте их сначала "на обработку", ога.... Куда именно их отправить ? Как обрабатывать ? Особенно, если импорт делается интеллектуально, т.е. не все данные реально импортируются в БД (допустим часть из них уже в базе есть). зы: Я вообще за то, чтоб импорт делать только специальным механизмом, кот. умеет многократно проверить вводимые данные. Да, это работает медленно. Это трудоёмко в создании, но за то данные будут надежными, а ошибки информативными. зыы: у меня есть режим т.н. "тестового импорта", когда делаются все возможные проверки, кроме физической вставки (хранимая процедура). ИСЧО РАЗ: Нравятся констрайнты - ОК. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 15:07 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
Прикладные разработчики часто выдают разные гениальные идеи типа "СУБД разрабатывали лохи, щас мы тут целостность данных будем приложением проверять, да и вообще нафиг эту целостность проверять - будет быстрее работать". Каждый обязательно заново изобретёт EAV и удивится, как это эти старые пердуны за 50 лет до такой классной вещи не додумались. И нормализация не нужна: надо всё в одну таблицу и ведь как классно будет: никаких тебе джойнов, всё будет классно и быстро. Если по теме, то ответ здесь очень простой: если нужен контроль целостности - нужны констрейнты, не нужен - не нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 15:22 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
Очень лысыйЕсли по теме, то ответ здесь очень простой: если нужен контроль целостности - нужны констрейнты, не нужен - не нужны.Ответ дилетантский. :) Констрейнты не в состоянии обеспечить целостность бизнес-логики. Только малую ее часть. Поэтому они почти никогда не нужны. Целостность обеспечивают другими средствами. Удаление/вставка записи в БД это всегда сложный бизнес-процесс. Его нельзя применять в лоб. Для этого делают сложные процедуры, которые много чего делают, прежде чем удалить/вставить что-то. Поэтому польза от констрайнт = 1%. Повторю: ниодна ERP-система не использует констрейнты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 15:55 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVТот, кто настаивает на использовании FOREIGN KEY просто мало работал с реальными данными. :) FOREIGN KEY вообще никак не мешают работы с данными. От слова вообще. Если у вас "сырые"/"грязные" и т.д. данные, то не надо их сразу пихать в таблицы. Создаются временные таблицы, которые позволяют в начале данные привести к приемлемому виду, а потом правильно разложить по таблицам. Зато это один из инструментов достижения ACID. Так что правильно заметили. Если вам не нужны FK, то лучше брать NoSQL. Это будет быстрее и проще. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 16:12 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
FOREIGN KEY вообще никак не мешают работы с данными.Кому как. Я тоже когда-то давно так думал. В таком случае для чего они нужны ? Мешают удалять ? Дык есть простой рецепт: А ты не удаляй. :) Если "привести к приемлемому виду, а потом правильно разложить по таблицам". ОК. А тут какую роль играют констрайнты, если все в приемлимом виде ? зы: никто внятной их нужности так и не привёл. Ждёмс... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 16:29 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVзы: никто внятной их нужности так и не привёл. Ждёмс... Лично для меня тут довод один: это еще одна (да, не совершенная, но чертовски эффективная "в пределах своей компетенции") линия защиты от: 1. Своих же собственных ошибок в коде, содержащем логику работы с БД. 2. Ошибок в коде других (написанных не мной) клиентов, содержащих логику работы с БД. Если ты уверен в своей непогрешимости, то аплодирую стоя... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 16:44 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
stomskyLSVзы: никто внятной их нужности так и не привёл. Ждёмс... Лично для меня тут довод один: это еще одна (да, не совершенная, но чертовски эффективная "в пределах своей компетенции") линия защиты от: 1. Своих же собственных ошибок в коде, содержащем логику работы с БД. 2. Ошибок в коде других (написанных не мной) клиентов, содержащих логику работы с БД. Если ты уверен в своей непогрешимости, то аплодирую стоя...Я вообще шапки никогда не удаляю. Для логического удаления есть спец. поле. Абсолютно все удаления (в т.ч. логические) делаются соотв.процедурами, кот. делают много бизнес-проверок с внятными ответами на ошибки. Поэтому случайно удалить важную инфу невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 16:58 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVАбсолютно все удаления (в т.ч. логические) делаются соотв.процедурами, кот. делают много бизнес-проверок с внятными ответами на ошибки. Поэтому случайно удалить важную инфу невозможно. Т.е. на каждую сущность (читай таблицу) - отдельная процедура "Delete_<Entity>"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 17:12 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
stomskyLSVАбсолютно все удаления (в т.ч. логические) делаются соотв.процедурами, кот. делают много бизнес-проверок с внятными ответами на ошибки. Поэтому случайно удалить важную инфу невозможно. Т.е. на каждую сущность (читай таблицу) - отдельная процедура "Delete_<Entity>"?Да. Это единый подход, без исключений. Хранимая процедура. Возвращает причину неудачи, есличо. Причин может быть пару десятков. И только одну из них можно поймать констрайнтами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 17:19 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVзы: никто внятной их нужности так и не привёл. Ждёмс... Возможно за уши притянуто, но как защита от сапорта, которому позвонил юзер в гневе и попросил удалить вот эту вот строчку срочно, и у которого ночью нет ничего кроме студии и знания, как написать delete from. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 17:44 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
buvenLSVзы: никто внятной их нужности так и не привёл. Ждёмс... Возможно за уши притянуто, но как защита от сапорта, которому позвонил юзер в гневе и попросил удалить вот эту вот строчку срочно, и у которого ночью нет ничего кроме студии и знания, как написать delete from.Студией удалять могу только я. Остальные - штатными процедурами. :) зы: Иногда приходилось править студией в обход процедур. Для заведома некритичных ситуаций. Но такое решение может принять только эксперт. Т.е. я. :) Ниодна система не защищена на 100% от ручной поломки б/логики. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 18:01 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
scfИмхо, зависит от базы. Доводы за: <> - низкая квалификация программистов Доводы против: <> - вставка сущности в сложную нормализованную базу может быть делом нетривиальным "низкая квалификация программистов" -- основной довод ПРОТИВ ФК, т.к. кривые руки не дают работать со "сложными нормализованными сущностями" , а хочется махать шашкой. все высказывания ЛСВ о том, что якобы можно обеспечить целостность дешевле -- бред злобного буратины. в развивающемся приложении -- нельзя. в статичном -- после доказательства, что данная статичная реализация ни в одном случае не ломает логическую целостность. (как видим руками туда лезть никак нельзя, никакому ЛСВ -- нарушается статичность) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 18:11 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
Чисто задело, по этому тоже выскажусь... Есть БД с нормальной структурой, целостностью, прозрачностью и т.д. где все просто и красиво... Все, что вокруг (как тут говорят - много всякой информации, текстовых файлов и т.д. и т.п.) - это просто помойка и тут каждый решает для себя уже сам - брать в БД только нужное из помойки, делать тупо ссылку на помойку (кому нужно, тот будет ковыряться) или превратить свою БД тоже в помойку... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 23:02 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
mr_maxПрописывать на уровне бд или это старый век? __________________________________________________________________ THE TRUTH IS OUT THERE Нужно стремиться прописывать все ограничения целостности по возможности на уровне БД и по возможности декларативно. Действительно, ведь это логические правила, которым должны отвечать данные. Например, не должно быть этапов договоров не относящихся ни к каким договорам. И декларативно прописанные мало того, что горантировано не позволяют нарушить логические ограничения в БД, так они еще и имеют модельное значение: легко понять что есть такое правило, просто просотрев ОЦ. БД - это ядро ИС - там вся информация. И поэтому ее модель, которая включает ОЦ имеет значение. А программ мало того, что много - (во всех прописывать одни и те же ОЦ?) , так в них могут быть ошибки (а БД должна оставаться целостной по возможности), в них не видно, сложней править. Да и программы - это типа внешние модели с точки зрения тех или иных пользователей. А модель БД это модель всей информации системы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.08.2017, 23:38 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVКуда именно их отправить ? Как обрабатывать ? В смысле как? Проверить наличие данных на наличие в справочниках базы слабо. Стандартная тривиальная проверка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2017, 02:12 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
авторА можно пример такой ситуации? Для меня это как-то диковато... Могу легко дать вам пример, без имён. Есть программа, купленная на торгах + ТП ежегодная покупаемая. торги, значит выбрано дешёвое предложение. Oracle + java. По сути программа не рабочая, то есть время от времени (чаще, чем раз в месяц) в программе возникают такие проблемы, которые поправить из программы невозможно никак. Бывает, что причину увидеть из программы также невозможно никак. Заказать доработку у программистов -- это до нескольких месяцев, даже когда проблемы критические. Как выкрутились (я и ТП). 1. Лезем в БД, селектами. Буквально сверяем строки в таблицах, проблемная строка + работающая строка. Ищем какие то несоответствия. 2. Когда находим (вот в этом поле надо false убрать) рассуждаем зачем там false по закону он или по логике, как его убрать из программы, как он там очутился и т.п. 3. Затем если из программы это сделать никак нельзя -- убираем их update или даже удаляем строки delete. Мне и ТП значительно легче править БД без всяких глупостей, типа ФК. Про риски я промолчу, это кошмар! --- При этом все же понимают, что это не правильно! Просто денег мало, ищем самый быстрый способ. Или единственно реально выполнимый. Какие ещё нужны аргументы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2017, 08:14 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
azsxМогу легко дать вам пример [...] Какие ещё нужны аргументы? Если Ваш пример сформулировать одной фразой, он будет звучать так - "в кривой и глючной системе жить без констрейнтов проще и легче". Ну, ээ, возможно :) Но, согласитесь, как аргумент в споре "проектировать ли систему, опираясь на констрейнты или нет" - он звучит слабовато. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2017, 08:32 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
mr_maxПрописывать на уровне бд или это старый век? __________________________________________________________________ THE TRUTH IS OUT THERE нужно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2017, 09:10 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, + В принципе, можно проанализировать любую готовую БД уже по факту (для этого нужен анализ каждой конкретной разработки): 1. БД спроектирована оптимально, интерфейс удобен и понятен, система в целом стабильна, иногда возникают некоторые вопросы, которые решаются по телефону после звонка в службу поддержки - это значит, что разработчик сделал ставку на массовое распространение продукта и готов вести конкурентную политику с целью максимального привлечения клиентов, и получения прибыли с продаж продукта. 2. БД и интерфейс в целом выполняют свои функции, но есть определенные моменты, которые разработчик может устранить только своим личным участием - это значит, что ввиду определенной специфики, данное ПО не имеет возможности массового распространения, а разработчик имеет огромное желание постоянно доить узкий круг своих клиентов, эксплуатирующих его ПО. 3. БД (ПО) глючное до не могу, но другой альтернативы просто нет - это значит, что ПО Федерального уровня, написанное наспех студентами за бесплатно (несмотря на выделенный на это гос бюджет) для обеспечения выполнения одного из Федеральных законов. Тут нужно тупо всей страной жаловаться во все инстанции, заваливать траблами службу поддержки и просто терпеливо ждать... 4. БД (ПО) глючное до не могу, но есть альтернатива - нужно переходить на альтернативное ПО, или пытаться писать свое (дорабатывать существующее, делать свои надстройки). Показателен пример от azsxКак выкрутились (я и ТП). 1. Лезем в БД, селектами. Буквально сверяем строки в таблицах, проблемная строка + работающая строка. Ищем какие то несоответствия. 2. Когда находим (вот в этом поле надо false убрать) рассуждаем зачем там false по закону он или по логике, как его убрать из программы, как он там очутился и т.п. 3. Затем если из программы это сделать никак нельзя -- убираем их update или даже удаляем строки delete. Мне и ТП значительно легче править БД без всяких глупостей, типа ФК. Пункты 1-3 можно автоматизировать и положить начало созданию своей надстройки контроля информации. Ну и т.д. и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2017, 09:10 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVСвязи (констрайнты) будут мешать разными способами. Поэтому многие разработчики их принципиально не используют. И правильно делают, ИМХО. мнение отдельно неправильного индивидуума неинтересно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2017, 09:10 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
stomskyLSVСвязи (констрайнты) будут мешать разными способами. Каким образом FOREIGN KEY CONSTRAINT может мешать? говорят, плохим танцорам даже шары мешают... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2017, 09:12 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
SERG1257Думаю, тут речь не о ресурсах. Связи мешают девелоперам другим, они требуют дисциплины - с ними ничего так просто не грохнеш не вставиш, скрипты приходится писать аккуратнее. особенно они мешали на собеседованиях. спросишь бывало "что же такое этот foreign key, и чем отличается от primary key" ? а в ответ "они только и мешают..." ну, ок, если тебе они мешают, как ты у нас работать будешь, когда из у нас в базе несколько тысяч? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2017, 09:16 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
stomsky Но я ни разу не слышал серьезных аргументов в продолжение разговора об этих тормозах. потому что их просто нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2017, 09:18 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
автор"в кривой и глючной системе жить без констрейнтов проще и легче" Моё мнение, что в программе нужны связи между таблицами, ключи первичные, тригеры. Процедурами для каких либо действий я сам не пользуюсь (но я любитель, пишу только для себя). Верное замечание, когда система кривая и глючная, когда вопреки всякой логике какие то левые личности прут на БД с рутом поправить чо то по быстрому -- тогда удобно без всяких проверок. Но это огромный риск и явно не верное решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2017, 09:20 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
авторПункты 1-3 можно автоматизировать и положить начало созданию своей надстройки контроля информации. Именно так я и делаю неспешно. К сожалению в мире есть два нормальных языка, на пхп http://www.sql.ru/forum/1261406/kak-podkluchitsya-k-baze-oracle у меня подключиться просто не получилось к БД, а на fpc https://www.devart.com/odac/download.html компонент платный и дорогой очень. Приходится учить java. зы извините, фокспро и vb6 также прекрасны, но они мертвы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2017, 09:34 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVstomskyТ.е. на каждую сущность (читай таблицу) - отдельная процедура "Delete_<Entity>"?Да. Это единый подход, без исключений. Хранимая процедура. Возвращает причину неудачи, есличо. Причин может быть пару десятков. И только одну из них можно поймать констрайнтами. А INSERT-ы и UPDATE-ы тоже в хранимых процедурах? Ведь ими тоже ссылочную целостность можно нарушить... Я почему так подробно интересуюсь, - есть мнение, что SQL в качестве языка для реализации сложной бизнес-логики слишком неудобен. Поэтому бизнес логику лучше выносить на уровень сервисов, которые пишутся на JAVA, C# и прочих Питонах. А ты, получается, возводишь защитную стену их хранимок на этом самом SQL... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2017, 10:11 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
Верное замечание, когда система кривая и глючная....таких систем с т.з. канонического проектирования - 90%. В тиражных системах - тож самое или даже хуже. И вообще причем тут глючность ? Как раз сама система может работать очень даже ОК. Руками приходится лесть, когда жизненно необходимо сделать некое нештатное действие. Ради него эту систему переделывать не будут. а еще: Например удобно хранить пустую ссылку как = 0, а не null. Но тогда констрайнту не наложишь. В любой большой системе полно мест, где констрайнту не получится использовать (примеры были выше). И тогда нужно помнить, где есть констрайнта, а где нет. Выходит, констрайнта как "защита от дурака" - слабая мера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2017, 10:18 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
авторКак раз сама система может работать очень даже ОК. Руками приходится лесть, когда жизненно необходимо сделать некое нештатное действие. Ради него эту систему переделывать не будут. У нас с Вами просто мнение разное. В excel мне никогда не понадобилось лезть в файлы xls, чтобы что то поправить нотепадом. и затем вновь открыть этот же xls этим же excel'ом. Я слышал, что у excel бывали проблемы, правили баги, но сам не сталкивался. В очень многих популярных тиражируемых программах я также никогда не думал о коде или БД. А вот некоторые программы в РФ кривые. Значит левым людям приходится лезть в БД с select'ами. Иначе никак не разобраться чо не так. А вот некоторые программы в РФ глючные. Значит левым людям приходится лезть в БД с delete'ами update'ами. Иначе никак не исправить проблемы данного софта. При этом можно заказать доработку, от 3 месяцев и выше, просто нереально по срокам. зы Если согласно Вашему опыту таких программ 90% -- то просто ужас. Странно, что программисты ваще находят время на форумах писать, им работать надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2017, 10:33 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
Чем больше таких утверждающих и дискутирующих, тем лучше - мне гарантирована востребованность на рынке труда. "Танцуйте, ребятки, танцуйте, и ваш нос вырастет длинным-длинным. А мы распилим его на дубинки." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2017, 10:39 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
авторСтранно, что программисты ваще находят время на форумах писать, им работать надо. Хотя так подумал, логично. Платят ли программистам за то, чтобы они программы безглючные писали в РФ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2017, 10:40 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
Если согласно Вашему опыту таких программ 90% -- то просто ужас. Это не ужас. Это реалии жизни. Не только в БД, а вообще в любой сфере деятельности. Везде приходится отступать от неких правил, чтобы преодолеть ограничения, наложенные этими правилами. зы: ради веселья почитайте рассказик "хакер в столовой". Есть неск. его вариантов. Пля....констрайнтами они данные собрались защищать....... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2017, 10:53 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
авторЭто не ужас. Это реалии жизни. LSV, хорошо, поясните, пожалуйста, любителю. 1. Почему Ваши реалии не работают для excel? 2. В чём негатив? Реальная программа кривая, единственный способ исправить -- это удалить строку в БД. Пусть левый человек разберётся в зависимостях, сперва удалит или исправит зависимые записи в других таблицах, затем удаляет в своей таблице напрямую. Что не так? То есть без всех этих проверок, которые пишут проектировщики системы, мне, левой личности, случайно испортить базу очень легко. А проверки чуть чуть, но спасали бы от бездумных delet'ов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2017, 11:01 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
azsxавторЭто не ужас. Это реалии жизни. LSV, хорошо, поясните, пожалуйста, любителю. 1. Почему Ваши реалии не работают для excel? 2. В чём негатив? Реальная программа кривая, единственный способ исправить -- это удалить строку в БД. Пусть левый человек разберётся в зависимостях, сперва удалит или исправит зависимые записи в других таблицах, затем удаляет в своей таблице напрямую. Что не так? То есть без всех этих проверок, которые пишут проектировщики системы, мне, левой личности, случайно испортить базу очень легко. А проверки чуть чуть, но спасали бы от бездумных delet'ов.1. Не понял вопроса. 2. Реальная может быть и не кривой. Но иногда нужен быстрый результат, кот. достижим только прямым апдейтом. При разработке системы часто приходится манипулировать данными в целях отладки, поиска ошибок и т.д. При этом иногда приходится кратковременно нарушать целостность. Чтобы проверить свою систему ловли ошибок или просто проверить работу системы с комбинациями разных данных. И так далее до бесконечности....... пример: нужно срочно исключить один документ из выборки. Достаточно просто поменять знак ключа в шапке, чтоб связь со строками разорвалась и документ из сложной выборки исчез. Через секунду вернуть назад. И т.п. Иногда удобно править данные в порядке, кот. противоречит целостности: н-р сначала удаляем шапку, потом ее строки (это сказано просто для примера). И тут констрайнты могут мешать. При этом констрайнту всегда можно заменить диагностической выборкой, показывающей точки с ошибкой. И сделать выводы. Иногда удобно, чтоб ошибки накопились после неск. отдельных манипуляций. И опять сделать выводы. Глюк при сработавшей констрайнте обычно малоинформативен. Нельзя точно сказать, какое значение ключа вызвало глюк. А хотелось бы. В хорошо спроектированной системе нештатное удаление/искажение важных данных невозможно. Констрайнты просто никогда не сработают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2017, 11:50 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSV, извините, что задаю вопросы один по одному, просто хочу для себя разобраться. автор1. Не понял вопроса. Смотрите, мне никогда не надо делать следующую манипуляцию: а) закрываю книгу test.xls (то есть файл закрыт в программе excel); б) открываю файл test.xls для редактирования в notepad++; в) снова открываю файл test.xls в программе excel и получаю благодаря предыдущему редактированию какие то плюсы, например, что вообще заработала какая то функция в файле. То есть excel -- самодостаточная программа. Если не было физических ошибок при записи книги, то ничего вручную там в файле не наделаешь такого, чего нельзя сделать из excel. --- Вы пишите авторПри разработке системы часто приходится манипулировать данными в целях отладки, поиска ошибок и т.д. При этом иногда приходится кратковременно нарушать целостность. При этом: авторВ хорошо спроектированной системе нештатное удаление/искажение важных данных невозможно. Констрайнты просто никогда не сработают. То есть следуя прочитанному разработчику проще без constraint, но нормальной системе нужны constraint. а) обратите внимание, я не со стороны разработчика, а со стороны ТП смотрю. Мне проще и легче, что всяких правил и ограничений в БД нет, но зато испортить что нибудь мне также проще. Было бы логичнее если правила заранее задаст разработчик на уровне БД. Нет? б) у меня в голове не укладывается, что там разработчик хочет удалить вопреки бизнес логике и посмотреть что получится? Простой пример, 2 таблицы, одна фио + id город (внешний ключ); вторая id + город. Обе заполнили данными, затем разработчик хочет удалить город delete в sql. Ему БД говорит, нельзя. Делаем те же таблицы, только внешнего ключа нет, так из приложения id узнаём. Снова удаляем город в sql и что разработчик увидит? Как поведёт себя программа, если какой то специалист ТП зная пароль от БД сам удалит город на который есть связи? В чём ваще мысль такого удаления? И почему разработчик, зная свою систему не может тестово сперва очистить свзяи, а затем удалить город? Он то свою БД знает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2017, 12:23 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
1. Как-о в старой версии Экселя нотпадом грохал пароль. Открылось норм. :) И почему разработчик, зная свою систему не может тестово сперва очистить свзяи, а затем удалить город? Он то свою БД знает. В некот. случаях это придется делать 10-100 раз в день. Ну попробуй удали город (со всеми связями), а потом опять верни все назад. И так неск. раз. :) Связей может быть много к разным таблицам (город много где может используется). Запарися удалять/возвращать. Мне кажется я и так подробнейше описал почему констрайнты могут мешать в реальной повседневной работе.... По моему опыту пользы от них меньше, чем вреда. Чисто ИМХО. Далее впустую дискутировать не хочу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2017, 12:41 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
авторВ некот. случаях это придется делать 10-100 раз в день. Ну попробуй удали город (со всеми связями), а потом опять верни все назад. И так неск. раз. :) Ясно, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2017, 13:05 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSV1. Как-о в старой версии Экселя нотпадом грохал пароль. Открылось норм. :) И почему разработчик, зная свою систему не может тестово сперва очистить свзяи, а затем удалить город? Он то свою БД знает. В некот. случаях это придется делать 10-100 раз в день. Ну попробуй удали город (со всеми связями), а потом опять верни все назад. И так неск. раз. :) Связей может быть много к разным таблицам (город много где может используется). Запарися удалять/возвращать. Мне кажется я и так подробнейше описал почему констрайнты могут мешать в реальной повседневной работе.... По моему опыту пользы от них меньше, чем вреда. Чисто ИМХО. Далее впустую дискутировать не хочу. Да, лучше не пишите больше. И уходите из профессии, пока не поздно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2017, 14:13 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
СидДа, лучше не пишите больше. И уходите из профессии, пока не поздно.Сына, не тебе решать. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2017, 15:52 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
stomskyЯ почему так подробно интересуюсь, - есть мнение, что SQL в качестве языка для реализации сложной бизнес-логики слишком неудобен. Поэтому бизнес логику лучше выносить на уровень сервисов, которые пишутся на JAVA, C# и прочих Питонах. Так на Java бизнес-логику ещё хуже писать, чем на SQL... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2017, 18:11 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVНапример удобно хранить пустую ссылку как = 0, а не null. Но тогда констрайнту не наложишь. А если это строка или дата, как пустую ссылку хранить ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2017, 18:13 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
schiЧем больше таких утверждающих и дискутирующих, тем лучше - мне гарантирована востребованность на рынке труда. "Танцуйте, ребятки, танцуйте, и ваш нос вырастет длинным-длинным. А мы распилим его на дубинки." Во. Я тоже тешу себя этой мыслью... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2017, 18:14 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
На самом деле думаю LSV сейчас просто уссывается над всеми... Типа ну-ну... пилите Шура, пилите - они золотые... Он просто нашел одного-двух денежных клиентов/лохов, сделал им пару помоек и им теперь ни дыхнуть ни пёрднуть без него, только и остается, что бабло слюнявить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2017, 22:13 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
Успокаивает, что это в Киеве... пусть даже это в гос структуре... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.08.2017, 22:15 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
vmagНа самом деле думаю LSV сейчас просто уссывается над всеми... Типа ну-ну... пилите Шура, пилите - они золотые... Он просто нашел одного-двух денежных клиентов/лохов, сделал им пару помоек и им теперь ни дыхнуть ни пёрднуть без него, только и остается, что бабло слюнявить... Думаю, все проще - 1С ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2017, 12:16 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
MasterZivLSVНапример удобно хранить пустую ссылку как = 0, а не null. Но тогда констрайнту не наложишь. А если это строка или дата, как пустую ссылку хранить ?Какие однако дилетантские вопросы :). Строка = пустая строка (не null),'-', '?', 'пусто' или что-то типа того на усмотрение разработчика. Дата = некое значение, принятое в системе за "пусто", н-р 2000-01-01 или 1900-01-01. Это для примера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2017, 09:40 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
vmagУспокаивает, что это в Киеве... пусть даже это в гос структуре... Проф. безграмотность везде обидно видеть. Киев не исключение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2017, 14:49 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVMasterZivпропущено... А если это строка или дата, как пустую ссылку хранить ?Какие однако дилетантские вопросы :). Строка = пустая строка (не null),'-', '?', 'пусто' или что-то типа того на усмотрение разработчика. Дата = некое значение, принятое в системе за "пусто", н-р 2000-01-01 или 1900-01-01. Это для примера. Я знал, что ты так ответишь! :-) 0) ты в курсе, что в некоторых СУБД НЕТ ПУСТЫХ СТРОК ? Пустая строка -- это NULL 1) классно, а что если завтра придёт клиент, и захочет завести документ именно за дату 2000-01-01 или 1900-01-01 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2017, 14:52 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
MasterZivLSVпропущено... Какие однако дилетантские вопросы :). Строка = пустая строка (не null),'-', '?', 'пусто' или что-то типа того на усмотрение разработчика. Дата = некое значение, принятое в системе за "пусто", н-р 2000-01-01 или 1900-01-01. Это для примера. Я знал, что ты так ответишь! :-) 0) ты в курсе, что в некоторых СУБД НЕТ ПУСТЫХ СТРОК ? Пустая строка -- это NULL 1) классно, а что если завтра придёт клиент, и захочет завести документ именно за дату 2000-01-01 или 1900-01-01 ?0) тогда принимаем за "пусто" что-то другое из вышеперечисленного. 1) за "пусто" надо принимать значение, кот. никогда не появится в системе. Многие СУБД вообще не готовы для штатного хранения исторических дат н-р 332г. до н.э. И чо теперь ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2017, 16:10 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
для россейских заднеприводных манагеров и раздолбаев программиздов ни FK не нужны, ни ER диаграммы, ни много чего еще. Ибо тяп-ляп - и в продакшн. Когда будут много миллионные иски к компаниям и штрафы для работников, тогда и понадобится комплексный подход к проектам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2017, 19:04 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVзы: Тот, кто настаивает на использовании FOREIGN KEY просто мало работал с реальными данными. :) 14 лет - это мало? Когда ждать просветления? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2017, 11:40 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
skyANALSVзы: Тот, кто настаивает на использовании FOREIGN KEY просто мало работал с реальными данными. :) 14 лет - это мало? Когда ждать просветления? :)"Мудрость не всегда приходит с возрастом. Часто возраст приходит один" (с) :) зы: Никто так толком и не объяснил, для чего ему констрайнты ? От какого рода угроз они спасают ? При этом, заметьте, я не сказал, что использование констрайнт "неверно" или типа того. Это просто одна из необязательных возможностей. Нравится - пользуй, не нравиццо - не пользуй. Я из тех, кому не нравиццо. Аргументы я привел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 10:00 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSV, практически все Ваши аргументы опираются на задачи, когда наличие foreign key никак не мешает их успешному решению, плавали - знаем :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 10:28 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
skyANALSV, практически все Ваши аргументы опираются на задачи, когда наличие foreign key никак не мешает их успешному решению, плавали - знаем :)Решить можно практически любую задачу. Весь вопрос в цене. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 10:35 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVskyANALSV, практически все Ваши аргументы опираются на задачи, когда наличие foreign key никак не мешает их успешному решению, плавали - знаем :)Решить можно практически любую задачу. Весь вопрос в цене. :) Хм, основная задача ограничения FOREIGN KEY - это управление данными, которые могут быть сохранены в таблице внешнего ключа и контроль изменение данных в таблице первичного ключа. Зачем же платить большую цену за свой велосипед? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 10:44 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVНиодна тиражная ERP система не использует ФК. Почему-то, никто не оспаривает это утверждение. Неужели это правда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 11:07 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
DirksDRLSVНиодна тиражная ERP система не использует ФК. Почему-то, никто не оспаривает это утверждение. Неужели это правда? Распространенные - не используют. К сожалению. Лично я считаю, что FK лучше использовать, как минимум в рамках одного модуля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 11:15 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
DirksDRLSVНиодна тиражная ERP система не использует ФК. Почему-то, никто не оспаривает это утверждение. Неужели это правда? Когда разрабатывал ERP, то это была заказная разработка под крупную нефтяную компанию (100 серверов по всей России). Так вот там данных было до фига, а задач по работе с ними дофигища. И ограничения FOREIGN KEY не мешали, а только не хило снижали риски того, что какой-то нерадивый админ в Ангарске ручками в базу полез и похерил что-нибудь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 12:55 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVMasterZivпропущено... Я знал, что ты так ответишь! :-) 0) ты в курсе, что в некоторых СУБД НЕТ ПУСТЫХ СТРОК ? Пустая строка -- это NULL 1) классно, а что если завтра придёт клиент, и захочет завести документ именно за дату 2000-01-01 или 1900-01-01 ?0) тогда принимаем за "пусто" что-то другое из вышеперечисленного. 1) за "пусто" надо принимать значение, кот. никогда не появится в системе. Многие СУБД вообще не готовы для штатного хранения исторических дат н-р 332г. до н.э. И чо теперь ? Я этим как бэ намекал, что сначала ты весело живёшь, а потом наступает то самое "никогда". Именно для этого придумали NULL, документированный и хорошо всем разработчикам известный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 13:05 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
skyANALSVзы: Тот, кто настаивает на использовании FOREIGN KEY просто мало работал с реальными данными. :) 14 лет - это мало? Когда ждать просветления? :) Ещё лет 10-20 наверное... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 13:06 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVзы: Никто так толком и не объяснил, для чего ему констрайнты ? От какого рода угроз они спасают ? Констрейнты вообще спасают от нарушения целостности данных. Констрейнты FK -- от нарушения ссылочной целостности данных. Констрейнты CHECK -- от нарушения доменной целостности данных Констрейнты UNIQUE, PK -- от нарушения уникальности ключа. Да, если тебе насрать на твои данные, констрейнты можно не использовать... 80% WEB проектов так и делают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 13:09 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
DirksDRLSVНиодна тиражная ERP система не использует ФК. Почему-то, никто не оспаривает это утверждение. Неужели это правда? Так что с бредом-то спорить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 13:09 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
MasterZivDirksDRпропущено... Почему-то, никто не оспаривает это утверждение. Неужели это правда? Так что с бредом-то спорить... А какие используют? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 13:12 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
MasterZivКонстрейнты вообще спасают от нарушения целостности данных. Констрейнты FK -- от нарушения ссылочной целостности данных. Констрейнты CHECK -- от нарушения доменной целостности данных Констрейнты UNIQUE, PK -- от нарушения уникальности ключа.ок. Почему может наступить нарушение целостности ? Это когда ручками туда залесть ? Кто и зачем ? :) Как наложить констрайнту, если в поле может находится ссылка на неск. типов документов (связка: тип док./ключ) ? зы: обсуждаем только ссылочную ц-сть. Уникальность ключа использую постоянно, исличо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 14:21 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVПочему может наступить нарушение целостности ? Ссылочная целостность - Причины нарушений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 15:04 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVКак наложить констрайнту, если в поле может находится ссылка на неск. типов документов (связка: тип док./ключ) ? Хм. Просто ключ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 15:05 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
skyANALSVПочему может наступить нарушение целостности ? Ссылочная целостность - Причины нарушений Не надо давать эти баянные ссылки. Я хочу, чтоб человек ответил своими словами. :) В хорошо спроектированной системе не будет срабатывания СЦ. Удаление записей с СЦ вообще должно быть недоступно в Б/Л. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 15:19 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSV, 1. Можно генерировать триггеры (а так хреново, что нельзя сослаться на view) 2. Обычно с одной БД работают разные "системы", потому нельзя положиться на "хорошее проектирование" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 15:38 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVВ хорошо спроектированной системе... Да, да. Без технического долга и т.п. :) Ещё скажите Вы ни разу рефакторингом не занимались, тогда Вы мало ещё работали с системами :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 15:42 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVУдаление записей с СЦ вообще должно быть недоступно в Б/Л. С чего это вдруг? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 15:43 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
ViPRosОбычно с одной БД работают разные "системы", потому нельзя положиться на "хорошее проектирование" +100500 Изначально стоит задача быстро выйти на рынок, потом обрасти различными "системами" ради конкурентного преимущества. И очень трудно доказывать бизнесу, что надо бы побольше времени на проектирование закладывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 15:46 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
skyANA, а с того, что как раз при проектировании не смогли сделать все варианты, а сделали: удаление сложно - потому не будем делать!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 15:46 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
ViPRosskyANA, а с того, что как раз при проектировании не смогли сделать все варианты, а сделали: удаление сложно - потому не будем делать!!! То есть импортировать к примеру пользователь данные может, а удалить нет? Удобно, чё :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 15:48 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
skyANAViPRosskyANA, а с того, что как раз при проектировании не смогли сделать все варианты, а сделали: удаление сложно - потому не будем делать!!! То есть импортировать к примеру пользователь данные может, а удалить нет? Удобно, чё :) да просто все зависит от "системы" 1. "система" фиксирует не большой поток данных (ручной ввод че нить или еще какой поток) (тут можно и не удалить считают) 2. "система" фонтанирует данными (какие то алгоритмы генерируют большие потоки данных - например, версии расписаний работы завода, аэропорта,..) (тут уж не удалить никак не получится) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 16:00 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
skyANALSVУдаление записей с СЦ вообще должно быть недоступно в Б/Л. С чего это вдруг?Неправильно выразился. ... Речь про срабатывание защиты с СЦ. Не должно быть штатной возможности удалить запись, на кот. есть ссылка. Причем именно Б/Л-ссылка, т.е. в т.ч. и те случаи, кот. невозможно накрыть с помощью СЦ. Именно поэтому СЦ малоценна, т.к. есть многочисленные случаи, когда ее нельзя применить. СЦ - полумера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 16:34 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
ViPRosда просто все зависит от "системы" Именно. Вот только камрад LSV этого почему-то не понимает, хотя намекает на то, что имеет достаточно большой опыт работы с данными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 17:13 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVНе должно быть штатной возможности удалить запись, на кот. есть ссылка. Это почему вдруг? К примеру нашей системой пользуются более 20000 некоммерческих организаций. И все они загружают контакты своих мемберов. И с этими контактами в процессе жизни организации связаны какие-то данные. Но достаточно большая часть мемберов - это люди пожилого возраста. И вот не стало контакта. Почему не должно быть штатной возможности удалить запись о нём из системы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 17:19 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
skyANALSVНе должно быть штатной возможности удалить запись, на кот. есть ссылка. Это почему вдруг? К примеру нашей системой пользуются более 20000 некоммерческих организаций. И все они загружают контакты своих мемберов. И с этими контактами в процессе жизни организации связаны какие-то данные. Но достаточно большая часть мемберов - это люди пожилого возраста. И вот не стало контакта. Почему не должно быть штатной возможности удалить запись о нём из системы? Эмм... А что будете делать, когда вам позвонит пользователь в слезах, и попросить как то восстановить результат отработки штатного механизма удаления, который был по ошибке применен не к тому контакту? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 17:36 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
buven, это сооовсем другой вопрос, никакого отношения к удалению не имеющий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 17:54 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
buvenskyANAпропущено... Это почему вдруг? К примеру нашей системой пользуются более 20000 некоммерческих организаций. И все они загружают контакты своих мемберов. И с этими контактами в процессе жизни организации связаны какие-то данные. Но достаточно большая часть мемберов - это люди пожилого возраста. И вот не стало контакта. Почему не должно быть штатной возможности удалить запись о нём из системы? Эмм... А что будете делать, когда вам позвонит пользователь в слезах, и попросить как то восстановить результат отработки штатного механизма удаления, который был по ошибке применен не к тому контакту? Вот ни разу не звонили по этому поводу :) Хотя когда вот писали ERP, то был такой прецедент, после чего у записей появился признак активности и они на самом деле не удалялись, а делались не активными. Но это уже другая компания, другая система, другие данные, другие требования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 18:09 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
И это кстати пример того, что не надо опыт разработки вашей системы переносить на все остальные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 18:11 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
Бывают случаи, когда у тебя есть небольшое окно, в которое надо успеть протащить данные из оперативной системы в хранилище, некогда разбираться сейчас, загрузил ли ты товары к этим покупкам или нет из мдм. А вот потом после трансформаций/проверок в новые ухоженные объекты можно разложить уже с констрейнтами. А бывает, пытаются создать уполномоченного к еще не созданному юрлицу. Оно, конечно, всегда создается раньше, но в этот раз разработчики какого-нибудь очередного микросервиса в один момент положили узел шины, и понеслось. Я к тому, что в БД нельзя доверять никому, даже своему собственному надприложению с бизнес-логикой. А поменяют там что, да ошибку допустят - лучше не дать испоганить данные, чем потом разгребать, особенно если это повлечет штрафы. Ну и напоследок - бывает так, что тебе приходится делать что-то неествественное с данными в своей базе совсем не по своей вине. Очередное приложение очень важно для бизнеса, но вот не предусмотрели они, что у тебя может не быть еще в базе значения, например, из налоговой, ну не прислали, хотя доки уже тут, клиенты негодуют. Давай ты сделай быренько, чтобы им просто нужные значения вернулись, потом удалишь. АПИ и скрипты на все случаи не запасешься в этом меняющемся мире, поэтому вполне возможно что даже ты, о мудрый, не всегда правильно подчистишь или, наоборот, добавишь, а вдруг кто новенький пришел, найди потом, где напортил. Отказываюсь констрейнты, в том числе СЦ, делать только при уважительных причинах. Но заполнять проверками типа ключевания инн, имхо не стоит, это уже к бизнес-логике больше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.08.2017, 23:40 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
skyANALSVНе должно быть штатной возможности удалить запись, на кот. есть ссылка. Это почему вдруг? К примеру нашей системой пользуются более 20000 некоммерческих организаций. И все они загружают контакты своих мемберов. И с этими контактами в процессе жизни организации связаны какие-то данные. Но достаточно большая часть мемберов - это люди пожилого возраста. И вот не стало контакта. Почему не должно быть штатной возможности удалить запись о нём из системы? Ну очевидный же ответ: такая запись должна иметь признак "неактуален". И тогда ней нельзя воспользоваться. В некот. случаях она может быть нужна. Н-р посмотреть, был ли сделан звонок/контакт в 200х году при заключении договора ХХХ. Тож самое - товары. Товар когда-то продавался, но сейчас его уже нет. Зачем его физически удалять из справочника ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 10:00 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
skyANAИ это кстати пример того, что не надо опыт разработки вашей системы переносить на все остальные. В том то и дело, что вопрос ТС был общий и на самом деле до сих пор нет внятных аргумент за, как заметил LSV. Вспоминается история времен зари перехода наших банков на забугорные АБС, когда представители вендора сильно округляли глаза, услышав, что одно из требований - возможность удалить проводку. И пришлось им таки это реализовывать в итоге. Это к тому что не важно, какая система. На вопрос топика "Нужно ли связи в таблицах в sql?", ответ: если хочешь - конечно нужно, но особого профита от них не жди, и будь готов к возможному геморрою, связанному только с ними. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 12:32 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVНу очевидный же ответ: такая запись должна иметь признак "неактуален". Может иметь такой признак, а может иметь признак "архивная", или ещё какой, но при этом пользователь хочет иметь возможность её удалить с корнями. Зачем его ограничивать, если это его данные и он суперадмин, или член совета директоров? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 12:35 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
buven но особого профита от них не жди, и будь готов к возможному геморрою, связанному только с ними. Не "профит" это - а нужда. Геморрой создает не СЦ, а неумение проектировать большие системы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 12:38 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
Вы ещё скажите, что всю электронную переписку храните за последние 10 лет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 12:39 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
buvenskyANAИ это кстати пример того, что не надо опыт разработки вашей системы переносить на все остальные. В том то и дело, что вопрос ТС был общий и на самом деле до сих пор нет внятных аргумент за, как заметил LSV. Вспоминается история времен зари перехода наших банков на забугорные АБС, когда представители вендора сильно округляли глаза, услышав, что одно из требований - возможность удалить проводку. И пришлось им таки это реализовывать в итоге. Это к тому что не важно, какая система. На вопрос топика "Нужно ли связи в таблицах в sql?", ответ: если хочешь - конечно нужно, но особого профита от них не жди, и будь готов к возможному геморрою, связанному только с ними. А какой такой ОСОБЫЙ профит Вам нужен-то? :) Написали уже зачем нужен FOREIGN KEY и какие бывают причины нарушений ссылочной целосности. Если у Вас с этим нет проблем, или Вы используете какие-то там признаки, или триггера, или специальным кодом обкладываете, так флаг Вам в руки :) А мы вот используем родной механизм СУБД и проблем с ним не встречали и не встречаем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 12:46 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
skyANALSVНу очевидный же ответ: такая запись должна иметь признак "неактуален". Может иметь такой признак, а может иметь признак "архивная", или ещё какой, но при этом пользователь хочет иметь возможность её удалить с корнями. Зачем его ограничивать, если это его данные и он суперадмин, или член совета директоров?ЯННП. К чему этот вопрос ? Стёб такой ? Есть правила построения ИС. И они не смотрят, директор это или уборщица. Чисто технически можно и такое предусмотреть. Ничто особо не мешает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 13:34 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVЕсть правила построения ИС. О каких правилах речь? Ссылку дайте. А вопрос к тому, что пользователи разные бывают и принято одним давать минимум функционала, а другим максимум. Вы с этим не согласны? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 17:01 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
skyANAО каких правилах речь? Ссылку дайте.ОК. тынц :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 19:55 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVskyANAО каких правилах речь? Ссылку дайте.ОК. тынц :) Что-то похоже на то, что Вы юлите. Где конкретно Дейт пишет, что не должно быть штатной возможности удаления в Б/Л? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 20:31 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
А вот тому, что Вы отрицаете, он посвятил целую главу :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2017, 20:37 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
skyANAЧто-то похоже на то, что Вы юлите. Где конкретно Дейт пишет, что не должно быть штатной возможности удаления в Б/Л?существенно дополню: удаления с нарушением СЦ . По хорошему - не должно быть. Но если "очень нужно", то можно. :) Главное помнить про это. Всё, что пишут всякие Дейты, Чены и прочие Конолли это не более чем теория и рекомендации. В любой более-менее большой инф. системе можно найти отход от канонов. Это нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 09:46 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVskyANAЧто-то похоже на то, что Вы юлите. Где конкретно Дейт пишет, что не должно быть штатной возможности удаления в Б/Л?существенно дополню: удаления с нарушением СЦ . По хорошему - не должно быть.Да, не должно быть. И ограничения СЦ это гарантируют. LSVНо если "очень нужно", то можно. :) Главное помнить про это.Если "очень нужно", то можно отключить проверку ограничений, сделать то, что "очень нужно", включить проверку обратно. И не надо ничего дополнительно помнить, документировать, кодить. LSVВсё, что пишут всякие Дейты, Чены и прочие Конолли это не более чем теория и рекомендации.Вы сами привели ссылку на Дейта, и сами же от неё открестились. Вы право, чудак :) LSVВ любой более-менее большой инф. системе можно найти отход от канонов. Это нормально.С этим не спорю. Но сложилось впечатление, что Вы свой "отход от канонов" выдаёте за истину в первой инстанции :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 10:40 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
skyANAС этим не спорю. Но сложилось впечатление, что Вы свой "отход от канонов" выдаёте за истину в первой инстанции :)Впечатление складывается у не в меру впечатлительных. :) Выдаю не за истину в первой инстанции, а всего лишь за бест-практис с описанием случаев применимости. И не более. И не надо ничего дополнительно помнить, документировать, кодить.Как это не надо ? Надо, бро... Не везде можно установить СЦ, поэтому надо всегда помнить, где она есть, а где нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 10:57 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVskyANAС этим не спорю. Но сложилось впечатление, что Вы свой "отход от канонов" выдаёте за истину в первой инстанции :)Впечатление складывается у не в меру впечатлительных. :)Шутка на 2 балла :) LSVВыдаю не за истину в первой инстанции, а всего лишь за бест-практис с описанием случаев применимости. И не более.Это не бест-практис хотя бы потому, что в описанных Вами случаях ограничения СЦ не создают никаких проблем. LSVИ не надо ничего дополнительно помнить, документировать, кодить.Как это не надо ? Надо, бро... Не везде можно установить СЦ, поэтому надо всегда помнить, где она есть, а где нет.Я ему про Фому, он мне про Ерёму :) Ещё раз: если использовать штатный механизм СУБД, то не надо пилить свой велосипед, документировать его и помнить о нём - это же очевидно. А "не везде можно" - это уже к вопросам проектирования и умению пользоваться. Повторюсь, что те примеры, которые Вы приводили не тянут на "не везде можно". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 11:13 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
skyANAесли использовать штатный механизм СУБДЭтого механизма для сохранения целостности Б/Л в общем случае недостаточно. Поэтому контроль целостности делается не на уровне механизмов БД, а на уровне логики конкретной системы. Реализации могут быть разными. Но чем меньше способов контроля - тем лучше. Тем легче ими управлять. СЦ на механизмах СУБД не использует подавляющее число крупных ERP/КИС: 1С/SAP/AXAPTA/NAVISION/JDE. Не знаю насчет Галактики, BAAN, OEBS. Но думаю, что и там вряд ли. Я не знаю ниодной известной тиражной системы, где это применяется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 11:57 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
Читаю про "не удалять совсем" или "удалять вопреки всякой логике" и удивляюсь ентерпрайз разработке всё больше и больше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2017, 10:14 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
"удалять вопреки всякой логике" - это Вы о чём? А "не удалять совсем"... У меня это было реальное требование во времена разработки АИС ТПС, после того как в одном из регионов один из операторов удалил не те данные. Правда звучало оно не "не удалять совсем", а "на самом деле не удалять, а помечать как неактивные". Для оператора это выглядело как удаление, а пользователи с более широкими правами могли как восстановить, так и "удалять совсем". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2017, 10:30 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVskyANAесли использовать штатный механизм СУБДЭтого механизма для сохранения целостности Б/Л в общем случае недостаточно. О чём конкретно речь? Можете пояснить, что за целостность бизнес логики такая? LSVЯ не знаю ниодной известной тиражной системы, где это применяется.Хм, Мастер-Тур. Очень даже известная тиражная система в своей нише. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2017, 10:34 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
skyANAВы ещё скажите, что всю электронную переписку храните за последние 10 лет :) Переписка, бухгалтерские проводки, логи с электронной проходной. С 1995г храним . . . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2017, 10:34 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSV, https://help.sap.com/saphelp_nw73ehp1/helpdata/en/cf/21ea77446011d189700000e8322d00/frameset.htm Это про SAP у которого ссылочная целостность не используется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2017, 10:41 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
автор"удалять вопреки всякой логике" - это Вы о чём? Простой пример. Две таблицы, 1 табл. поля: фио + город; 2 табл. поля: фирма + город. Город может поменять название или объединится с другим (удалиться). По моему мнению контроль на уровне одинаковости названий городов нужен. Третья таблица - города, внешний ключ с двух таблиц. И null для города недопустим. Причина, так как админ софта "на местах" убъётся, но заставит дать ему права root от БД, так как он ж программист и sql знает. И он обязательно найдёт причины по которым надо править и удалять города напрямую прямо в таблице и обязательно в первом варианте не подумает, что надо править не только в таблице с фио, но и в таблице с фирмами. Я могу понять зачем вы это делаете на уровне разработчиков (сам любитель). В фирме, которая пишет софт эффектный менеджер, который заставил внедрить в софт фичи "шьёт, жнёт и на дуде играет" и БД и логика в программе очень усложнена. Также программистам платят мало, они бегут как тараканы. Нафиг в такой фирме усложнять sql логику, пусть админы правят всё что хотят, типа им же хуже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2017, 10:55 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
982183skyANAВы ещё скажите, что всю электронную переписку храните за последние 10 лет :) Переписка, бухгалтерские проводки, логи с электронной проходной. С 1995г храним . . . А Вы лично тоже храните свою переписку за последние 10 лет? Любой спам? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2017, 11:26 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
azsxавтор"удалять вопреки всякой логике" - это Вы о чём? Простой пример. Две таблицы, 1 табл. поля: фио + город; 2 табл. поля: фирма + город. Город может поменять название или объединится с другим (удалиться). По моему мнению контроль на уровне одинаковости названий городов нужен. Третья таблица - города, внешний ключ с двух таблиц. И null для города недопустим. Причина, так как админ софта "на местах" убъётся, но заставит дать ему права root от БД, так как он ж программист и sql знает. И он обязательно найдёт причины по которым надо править и удалять города напрямую прямо в таблице и обязательно в первом варианте не подумает, что надо править не только в таблице с фио, но и в таблице с фирмами. Я могу понять зачем вы это делаете на уровне разработчиков (сам любитель). В фирме, которая пишет софт эффектный менеджер, который заставил внедрить в софт фичи "шьёт, жнёт и на дуде играет" и БД и логика в программе очень усложнена. Также программистам платят мало, они бегут как тараканы. Нафиг в такой фирме усложнять sql логику, пусть админы правят всё что хотят, типа им же хуже. Извините, но ни фига не понял. Такое впечатление, что Вы просто эмоции выплёскиваете :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2017, 11:29 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
azsxИ он обязательно найдёт причины по которым надо править и удалять города напрямую прямо в таблице и обязательно в первом варианте не подумает, что надо править не только в таблице с фио, но и в таблице с фирмами. Вот тут (если использовать ограничения СЦ) ему СУБД скажет, что удаление не возможно, так как есть ссылка на город из таблицы с фирмами. Но повторюсь, что я так и не понял при чём тут "удалять вопреки всякой логике". Вроде логика ясна: надо "склеить" две записи об одном городе в одну. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2017, 11:33 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
авторВот тут (если использовать ограничения СЦ) ему СУБД скажет, что удаление не возможно, так как есть ссылка на город из таблицы с фирмами. Именно поэтому в своих любительских программах я ограничения ставлю. Но я читаю, что некоторые профессионалы ограничения на уровне СУДБ не ставят и в пример, что ограничения надо ставить только на уровне логике софта приводят названия софта, где такого контроля нет. Я ограничения ставить буду, но уже не уверен, что прав. авторНо повторюсь, что я так и не понял при чём тут "удалять вопреки всякой логике". Вроде логика ясна: надо "склеить" две записи об одном городе в одну. Логика, если город менять, то в обоих таблицах. Если есть внешний ключ, то замена сразу в обоих таблицах будет. А если разработчику внешние связи только мешают, то админ на месте может "вопреки всякой логике" sql запросом в одной таблице поменять название города, а во второй забыть. Если таких связей десятки, они не текст, а на числа и хеши -- то ограничения на уровне БД (по моему мнению) прямо спасение перед совершением непоправимой ошибки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2017, 11:45 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
О чём конкретно речь? Можете пояснить, что за целостность бизнес логики такая?На 1 и 2 странице треда писал раза три. Целостность Б/Л это не только запрет удаления строки со ссылкой. Это комплексное понятие. Поэтому желательно ее делать в одном месте и удобным способом для данного проекта: на клиенте, в сервере приложений, ХП и пр. Туда может войти в т.ч. запрет удаления, если есть к.л. ссылка (т.е. аналог СЦ-констрайнт). Я применял ХП. При попытке удаления строки делалась куча проверок. Есть проверка ОК, то делался ряд действий (очистка журналов, смена статусов строк, пересчеты и т.д.). Весь код в одном месте. При желании можно часть проверок отключить в один клик. Также проверка возвращает вменяемое сообщение об ошибке (паруззке и со значениями ключей), что невозможно при срабатывании СЦ_СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2017, 11:45 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSV, а можно глупый вопрос: почему Вы это называете "целостность"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2017, 12:14 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
skyANALSV, а можно глупый вопрос: почему Вы это называете "целостность"?Что "это" ? Целостность -> Непротиворечивость, Правильность, Соответствие установленным правилам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2017, 12:42 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVskyANALSV, а можно глупый вопрос: почему Вы это называете "целостность"?Что "это" ? Целостность -> Непротиворечивость, Правильность, Соответствие установленным правилам. То есть целостность бизнес логики - это непротиворечивость бизнес логики, правильность бизнес логики, или соответствие бизнес логики установленным правилам. Очевидно, что целостность данных - это немного из другой оперы. И ясно, что ограничения СЦ не могут обеспечить правильность БЛ. ИМХО какое-то растекание мыслью по древу. Предлагаю закончить дискуссию :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2017, 12:56 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
LSVЦелостность -> Непротиворечивость, Правильность, Соответствие установленным правилам. Хмм.. а я бы ещё сюда добавил, платежеспособность заказчика. Если заказчик платит, значит база хорошая, правильная. Если не платит, не правильная база, противоречивая какая-то, не соответствует установленным правилам Ну и бред канеш.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2017, 20:13 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
А вот битрикс не использует почему то стандартные средства для целостности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2017, 21:08 |
|
||
|
Нужно ли связи в таблицах в sql
|
|||
|---|---|---|---|
|
#18+
Не читал весь топик. Откоменчу просто тему. Существуют глобальные тренды - замена реляции на агрегаты. Это связано с big-data, неструктурированными данными (JSON/XML) документами. Это связано с упрощением взгляда на разработку (не от БД к клиенту как было раньше) а от бизнес-процесса (hibernate) к DDL. Все это создает предпосылки к использованию реляционных dbms просто как хранилищ. Благо амазон нам подарил копеечный хостинг и удельная стоимость хранения data-row стала низка как никогда. Однако это не означает что нужно проектировать БД без ссылочных связей. Если вы не дурак и если вы цените данные и дорожите ими то - используйте констрейнты настолько - наколько это нужно для самой задачи. Не идите на поводу у дураков. Они начали изучение БЗ с хадупа а вы - начните с Дейта или Кодда. Знание всегда будет ценнее незнания или глупости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2017, 22:46 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1540145]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
52ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
127ms |
get tp. blocked users: |
1ms |
| others: | 15ms |
| total: | 234ms |

| 0 / 0 |

На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даете согласие с использованием данных технологий.