Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Проектирование БД Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4] 5 6   вперед  Ctrl      все
 Re: Нужно ли связи в таблицах в sql  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 33420
skyANA
LSV
зы: Тот, кто настаивает на использовании FOREIGN KEY просто мало работал с реальными данными. :)

14 лет - это мало? Когда ждать просветления? :)


Ещё лет 10-20 наверное...
14 авг 17, 13:06    [20721630]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 33420
LSV
зы: Никто так толком и не объяснил, для чего ему констрайнты ? От какого рода угроз они спасают ?


Констрейнты вообще спасают от нарушения целостности данных.
Констрейнты FK -- от нарушения ссылочной целостности данных.
Констрейнты CHECK -- от нарушения доменной целостности данных
Констрейнты UNIQUE, PK -- от нарушения уникальности ключа.

Да, если тебе насрать на твои данные, констрейнты можно не использовать...
80% WEB проектов так и делают.
14 авг 17, 13:09    [20721643]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 33420
DirksDR
LSV
Ниодна тиражная ERP система не использует ФК.

Почему-то, никто не оспаривает это утверждение. Неужели это правда?


Так что с бредом-то спорить...
14 авг 17, 13:09    [20721647]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
s_ustinov
Member

Откуда: Lugano, CH
Сообщений: 1750
MasterZiv
DirksDR
пропущено...

Почему-то, никто не оспаривает это утверждение. Неужели это правда?


Так что с бредом-то спорить...

А какие используют?
14 авг 17, 13:12    [20721657]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
LSV
Member

Откуда: Киев
Сообщений: 29964
MasterZiv
Констрейнты вообще спасают от нарушения целостности данных.
Констрейнты FK -- от нарушения ссылочной целостности данных.
Констрейнты CHECK -- от нарушения доменной целостности данных
Констрейнты UNIQUE, PK -- от нарушения уникальности ключа.
ок. Почему может наступить нарушение целостности ? Это когда ручками туда залесть ? Кто и зачем ? :)

Как наложить констрайнту, если в поле может находится ссылка на неск. типов документов (связка: тип док./ключ) ?

зы: обсуждаем только ссылочную ц-сть. Уникальность ключа использую постоянно, исличо.
14 авг 17, 14:21    [20721934]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 22601
LSV
Почему может наступить нарушение целостности ?

Ссылочная целостность - Причины нарушений
14 авг 17, 15:04    [20722128]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 22601
LSV
Как наложить констрайнту, если в поле может находится ссылка на неск. типов документов (связка: тип док./ключ) ?

Хм. Просто ключ.
14 авг 17, 15:05    [20722135]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
LSV
Member

Откуда: Киев
Сообщений: 29964
skyANA
LSV
Почему может наступить нарушение целостности ?

Ссылочная целостность - Причины нарушений
Не надо давать эти баянные ссылки. Я хочу, чтоб человек ответил своими словами. :)
В хорошо спроектированной системе не будет срабатывания СЦ. Удаление записей с СЦ вообще должно быть недоступно в Б/Л.
14 авг 17, 15:19    [20722221]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
ViPRos
Member

Откуда:
Сообщений: 7917
LSV,

1. Можно генерировать триггеры (а так хреново, что нельзя сослаться на view)
2. Обычно с одной БД работают разные "системы", потому нельзя положиться на "хорошее проектирование"
14 авг 17, 15:38    [20722349]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 22601
LSV
В хорошо спроектированной системе...

Да, да. Без технического долга и т.п. :)

Ещё скажите Вы ни разу рефакторингом не занимались, тогда Вы мало ещё работали с системами :)
14 авг 17, 15:42    [20722362]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 22601
LSV
Удаление записей с СЦ вообще должно быть недоступно в Б/Л.

С чего это вдруг?
14 авг 17, 15:43    [20722368]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 22601
ViPRos
Обычно с одной БД работают разные "системы", потому нельзя положиться на "хорошее проектирование"

+100500

Изначально стоит задача быстро выйти на рынок, потом обрасти различными "системами" ради конкурентного преимущества.
И очень трудно доказывать бизнесу, что надо бы побольше времени на проектирование закладывать.

Картинка с другого сайта.
14 авг 17, 15:46    [20722386]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
ViPRos
Member

Откуда:
Сообщений: 7917
skyANA,

а с того, что как раз при проектировании не смогли сделать все варианты, а сделали:
удаление сложно - потому не будем делать!!!
14 авг 17, 15:46    [20722387]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 22601
ViPRos
skyANA,

а с того, что как раз при проектировании не смогли сделать все варианты, а сделали:
удаление сложно - потому не будем делать!!!

То есть импортировать к примеру пользователь данные может, а удалить нет? Удобно, чё :)
14 авг 17, 15:48    [20722397]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
ViPRos
Member

Откуда:
Сообщений: 7917
skyANA
ViPRos
skyANA,

а с того, что как раз при проектировании не смогли сделать все варианты, а сделали:
удаление сложно - потому не будем делать!!!

То есть импортировать к примеру пользователь данные может, а удалить нет? Удобно, чё :)

да просто все зависит от "системы"
1. "система" фиксирует не большой поток данных (ручной ввод че нить или еще какой поток) (тут можно и не удалить считают)
2. "система" фонтанирует данными (какие то алгоритмы генерируют большие потоки данных - например, версии расписаний работы завода, аэропорта,..) (тут уж не удалить никак не получится)
14 авг 17, 16:00    [20722452]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
LSV
Member

Откуда: Киев
Сообщений: 29964
skyANA
LSV
Удаление записей с СЦ вообще должно быть недоступно в Б/Л.

С чего это вдруг?
Неправильно выразился. ... Речь про срабатывание защиты с СЦ.

Не должно быть штатной возможности удалить запись, на кот. есть ссылка.
Причем именно Б/Л-ссылка, т.е. в т.ч. и те случаи, кот. невозможно накрыть с помощью СЦ.
Именно поэтому СЦ малоценна, т.к. есть многочисленные случаи, когда ее нельзя применить.
СЦ - полумера.
14 авг 17, 16:34    [20722559]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 22601
ViPRos
да просто все зависит от "системы"

Именно. Вот только камрад LSV этого почему-то не понимает, хотя намекает на то, что имеет достаточно большой опыт работы с данными.
14 авг 17, 17:13    [20722723]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 22601
LSV
Не должно быть штатной возможности удалить запись, на кот. есть ссылка.

Это почему вдруг?

К примеру нашей системой пользуются более 20000 некоммерческих организаций.
И все они загружают контакты своих мемберов. И с этими контактами в процессе жизни организации связаны какие-то данные.
Но достаточно большая часть мемберов - это люди пожилого возраста.
И вот не стало контакта. Почему не должно быть штатной возможности удалить запись о нём из системы?
14 авг 17, 17:19    [20722743]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
buven
Member

Откуда:
Сообщений: 747
skyANA
LSV
Не должно быть штатной возможности удалить запись, на кот. есть ссылка.

Это почему вдруг?

К примеру нашей системой пользуются более 20000 некоммерческих организаций.
И все они загружают контакты своих мемберов. И с этими контактами в процессе жизни организации связаны какие-то данные.
Но достаточно большая часть мемберов - это люди пожилого возраста.
И вот не стало контакта. Почему не должно быть штатной возможности удалить запись о нём из системы?


Эмм... А что будете делать, когда вам позвонит пользователь в слезах, и попросить как то восстановить результат отработки штатного механизма удаления, который был по ошибке применен не к тому контакту?
14 авг 17, 17:36    [20722839]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
ViPRos
Member

Откуда:
Сообщений: 7917
buven,

это сооовсем другой вопрос, никакого отношения к удалению не имеющий
14 авг 17, 17:54    [20722925]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 22601
buven
skyANA
пропущено...

Это почему вдруг?

К примеру нашей системой пользуются более 20000 некоммерческих организаций.
И все они загружают контакты своих мемберов. И с этими контактами в процессе жизни организации связаны какие-то данные.
Но достаточно большая часть мемберов - это люди пожилого возраста.
И вот не стало контакта. Почему не должно быть штатной возможности удалить запись о нём из системы?


Эмм... А что будете делать, когда вам позвонит пользователь в слезах, и попросить как то восстановить результат отработки штатного механизма удаления, который был по ошибке применен не к тому контакту?

Вот ни разу не звонили по этому поводу :)

Хотя когда вот писали ERP, то был такой прецедент, после чего у записей появился признак активности и они на самом деле не удалялись, а делались не активными.
Но это уже другая компания, другая система, другие данные, другие требования.
14 авг 17, 18:09    [20722979]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 22601
И это кстати пример того, что не надо опыт разработки вашей системы переносить на все остальные.
14 авг 17, 18:11    [20722988]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
kaldorey
Member

Откуда:
Сообщений: 557
Бывают случаи, когда у тебя есть небольшое окно, в которое надо успеть протащить данные из оперативной системы в хранилище, некогда разбираться сейчас, загрузил ли ты товары к этим покупкам или нет из мдм. А вот потом после трансформаций/проверок в новые ухоженные объекты можно разложить уже с констрейнтами.
А бывает, пытаются создать уполномоченного к еще не созданному юрлицу. Оно, конечно, всегда создается раньше, но в этот раз разработчики какого-нибудь очередного микросервиса в один момент положили узел шины, и понеслось. Я к тому, что в БД нельзя доверять никому, даже своему собственному надприложению с бизнес-логикой. А поменяют там что, да ошибку допустят - лучше не дать испоганить данные, чем потом разгребать, особенно если это повлечет штрафы.
Ну и напоследок - бывает так, что тебе приходится делать что-то неествественное с данными в своей базе совсем не по своей вине. Очередное приложение очень важно для бизнеса, но вот не предусмотрели они, что у тебя может не быть еще в базе значения, например, из налоговой, ну не прислали, хотя доки уже тут, клиенты негодуют. Давай ты сделай быренько, чтобы им просто нужные значения вернулись, потом удалишь. АПИ и скрипты на все случаи не запасешься в этом меняющемся мире, поэтому вполне возможно что даже ты, о мудрый, не всегда правильно подчистишь или, наоборот, добавишь, а вдруг кто новенький пришел, найди потом, где напортил.

Отказываюсь констрейнты, в том числе СЦ, делать только при уважительных причинах. Но заполнять проверками типа ключевания инн, имхо не стоит, это уже к бизнес-логике больше.
14 авг 17, 23:40    [20723636]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
LSV
Member

Откуда: Киев
Сообщений: 29964
skyANA
LSV
Не должно быть штатной возможности удалить запись, на кот. есть ссылка.

Это почему вдруг?

К примеру нашей системой пользуются более 20000 некоммерческих организаций.
И все они загружают контакты своих мемберов. И с этими контактами в процессе жизни организации связаны какие-то данные.
Но достаточно большая часть мемберов - это люди пожилого возраста.
И вот не стало контакта. Почему не должно быть штатной возможности удалить запись о нём из системы?
Ну очевидный же ответ: такая запись должна иметь признак "неактуален". И тогда ней нельзя воспользоваться.
В некот. случаях она может быть нужна. Н-р посмотреть, был ли сделан звонок/контакт в 200х году при заключении договора ХХХ.

Тож самое - товары. Товар когда-то продавался, но сейчас его уже нет. Зачем его физически удалять из справочника ?
15 авг 17, 10:00    [20724106]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
buven
Member

Откуда:
Сообщений: 747
skyANA
И это кстати пример того, что не надо опыт разработки вашей системы переносить на все остальные.


В том то и дело, что вопрос ТС был общий и на самом деле до сих пор нет внятных аргумент за, как заметил LSV.
Вспоминается история времен зари перехода наших банков на забугорные АБС, когда представители вендора сильно округляли глаза, услышав, что одно из требований - возможность удалить проводку. И пришлось им таки это реализовывать в итоге.
Это к тому что не важно, какая система. На вопрос топика "Нужно ли связи в таблицах в sql?", ответ: если хочешь - конечно нужно, но особого профита от них не жди, и будь готов к возможному геморрою, связанному только с ними.
15 авг 17, 12:32    [20724779]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 [4] 5 6   вперед  Ctrl      все
Все форумы / Проектирование БД Ответить