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

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

Может иметь такой признак, а может иметь признак "архивная", или ещё какой, но при этом пользователь хочет иметь возможность её удалить с корнями.

Зачем его ограничивать, если это его данные и он суперадмин, или член совета директоров?
15 авг 17, 12:35    [20724786]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
ViPRos
Member

Откуда:
Сообщений: 7978
buven
но особого профита от них не жди, и будь готов к возможному геморрою, связанному только с ними.


Не "профит" это - а нужда.
Геморрой создает не СЦ, а неумение проектировать большие системы.
15 авг 17, 12:38    [20724799]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 22808
Вы ещё скажите, что всю электронную переписку храните за последние 10 лет :)
15 авг 17, 12:39    [20724800]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
skyANA
Member

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


В том то и дело, что вопрос ТС был общий и на самом деле до сих пор нет внятных аргумент за, как заметил LSV.
Вспоминается история времен зари перехода наших банков на забугорные АБС, когда представители вендора сильно округляли глаза, услышав, что одно из требований - возможность удалить проводку. И пришлось им таки это реализовывать в итоге.
Это к тому что не важно, какая система. На вопрос топика "Нужно ли связи в таблицах в sql?", ответ: если хочешь - конечно нужно, но особого профита от них не жди, и будь готов к возможному геморрою, связанному только с ними.

А какой такой ОСОБЫЙ профит Вам нужен-то? :)
Написали уже зачем нужен FOREIGN KEY и какие бывают причины нарушений ссылочной целосности.

Если у Вас с этим нет проблем, или Вы используете какие-то там признаки, или триггера, или специальным кодом обкладываете, так флаг Вам в руки :)
А мы вот используем родной механизм СУБД и проблем с ним не встречали и не встречаем.
15 авг 17, 12:46    [20724818]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
LSV
Member

Откуда: Киев
Сообщений: 30144
skyANA
LSV
Ну очевидный же ответ: такая запись должна иметь признак "неактуален".

Может иметь такой признак, а может иметь признак "архивная", или ещё какой, но при этом пользователь хочет иметь возможность её удалить с корнями.
Зачем его ограничивать, если это его данные и он суперадмин, или член совета директоров?
ЯННП. К чему этот вопрос ? Стёб такой ?
Есть правила построения ИС. И они не смотрят, директор это или уборщица.
Чисто технически можно и такое предусмотреть. Ничто особо не мешает.
15 авг 17, 13:34    [20724951]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 22808
LSV
Есть правила построения ИС.

О каких правилах речь? Ссылку дайте.

А вопрос к тому, что пользователи разные бывают и принято одним давать минимум функционала, а другим максимум.
Вы с этим не согласны?
15 авг 17, 17:01    [20725955]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
LSV
Member

Откуда: Киев
Сообщений: 30144
skyANA
О каких правилах речь? Ссылку дайте.
ОК.
тынц :)
15 авг 17, 19:55    [20726414]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 22808
LSV
skyANA
О каких правилах речь? Ссылку дайте.
ОК.
тынц :)

Что-то похоже на то, что Вы юлите. Где конкретно Дейт пишет, что не должно быть штатной возможности удаления в Б/Л?
15 авг 17, 20:31    [20726470]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 22808
А вот тому, что Вы отрицаете, он посвятил целую главу :)
15 авг 17, 20:37    [20726480]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
LSV
Member

Откуда: Киев
Сообщений: 30144
skyANA
Что-то похоже на то, что Вы юлите. Где конкретно Дейт пишет, что не должно быть штатной возможности удаления в Б/Л?
существенно дополню: удаления с нарушением СЦ.
По хорошему - не должно быть. Но если "очень нужно", то можно. :) Главное помнить про это.
Всё, что пишут всякие Дейты, Чены и прочие Конолли это не более чем теория и рекомендации.
В любой более-менее большой инф. системе можно найти отход от канонов. Это нормально.
16 авг 17, 09:46    [20727178]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 22808
LSV
skyANA
Что-то похоже на то, что Вы юлите. Где конкретно Дейт пишет, что не должно быть штатной возможности удаления в Б/Л?
существенно дополню: удаления с нарушением СЦ.
По хорошему - не должно быть.
Да, не должно быть. И ограничения СЦ это гарантируют.

LSV
Но если "очень нужно", то можно. :) Главное помнить про это.
Если "очень нужно", то можно отключить проверку ограничений, сделать то, что "очень нужно", включить проверку обратно.
И не надо ничего дополнительно помнить, документировать, кодить.

LSV
Всё, что пишут всякие Дейты, Чены и прочие Конолли это не более чем теория и рекомендации.
Вы сами привели ссылку на Дейта, и сами же от неё открестились. Вы право, чудак :)

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

Откуда: Киев
Сообщений: 30144
skyANA
С этим не спорю. Но сложилось впечатление, что Вы свой "отход от канонов" выдаёте за истину в первой инстанции :)
Впечатление складывается у не в меру впечатлительных. :)
Выдаю не за истину в первой инстанции, а всего лишь за бест-практис с описанием случаев применимости. И не более.

И не надо ничего дополнительно помнить, документировать, кодить.
Как это не надо ? Надо, бро... Не везде можно установить СЦ, поэтому надо всегда помнить, где она есть, а где нет.
16 авг 17, 10:57    [20727411]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 22808
LSV
skyANA
С этим не спорю. Но сложилось впечатление, что Вы свой "отход от канонов" выдаёте за истину в первой инстанции :)
Впечатление складывается у не в меру впечатлительных. :)
Шутка на 2 балла :)

LSV
Выдаю не за истину в первой инстанции, а всего лишь за бест-практис с описанием случаев применимости. И не более.
Это не бест-практис хотя бы потому, что в описанных Вами случаях ограничения СЦ не создают никаких проблем.

LSV
И не надо ничего дополнительно помнить, документировать, кодить.
Как это не надо ? Надо, бро... Не везде можно установить СЦ, поэтому надо всегда помнить, где она есть, а где нет.
Я ему про Фому, он мне про Ерёму :)

Ещё раз: если использовать штатный механизм СУБД, то не надо пилить свой велосипед, документировать его и помнить о нём - это же очевидно.

А "не везде можно" - это уже к вопросам проектирования и умению пользоваться.
Повторюсь, что те примеры, которые Вы приводили не тянут на "не везде можно".
16 авг 17, 11:13    [20727457]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
LSV
Member

Откуда: Киев
Сообщений: 30144
skyANA
если использовать штатный механизм СУБД
Этого механизма для сохранения целостности Б/Л в общем случае недостаточно.
Поэтому контроль целостности делается не на уровне механизмов БД, а на уровне логики конкретной системы. Реализации могут быть разными. Но чем меньше способов контроля - тем лучше. Тем легче ими управлять.

СЦ на механизмах СУБД не использует подавляющее число крупных ERP/КИС: 1С/SAP/AXAPTA/NAVISION/JDE.
Не знаю насчет Галактики, BAAN, OEBS. Но думаю, что и там вряд ли.

Я не знаю ниодной известной тиражной системы, где это применяется.
16 авг 17, 11:57    [20727586]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
azsx
Member

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

Откуда: Зеленоград
Сообщений: 22808
"удалять вопреки всякой логике" - это Вы о чём?

А "не удалять совсем"...

У меня это было реальное требование во времена разработки АИС ТПС, после того как в одном из регионов один из операторов удалил не те данные.
Правда звучало оно не "не удалять совсем", а "на самом деле не удалять, а помечать как неактивные".
Для оператора это выглядело как удаление, а пользователи с более широкими правами могли как восстановить, так и "удалять совсем".
17 авг 17, 10:30    [20730255]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 22808
LSV
skyANA
если использовать штатный механизм СУБД
Этого механизма для сохранения целостности Б/Л в общем случае недостаточно.

О чём конкретно речь? Можете пояснить, что за целостность бизнес логики такая?

LSV
Я не знаю ниодной известной тиражной системы, где это применяется.
Хм, Мастер-Тур. Очень даже известная тиражная система в своей нише.
17 авг 17, 10:34    [20730273]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
982183
Member

Откуда:
Сообщений: 1344
skyANA
Вы ещё скажите, что всю электронную переписку храните за последние 10 лет :)

Переписка, бухгалтерские проводки, логи с электронной проходной.
С 1995г храним . . .
17 авг 17, 10:34    [20730277]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
schi
Member

Откуда: Москва
Сообщений: 2351
LSV,

https://help.sap.com/saphelp_nw73ehp1/helpdata/en/cf/21ea77446011d189700000e8322d00/frameset.htm

Это про SAP у которого ссылочная целостность не используется.
17 авг 17, 10:41    [20730305]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
azsx
Member

Откуда:
Сообщений: 523
автор
"удалять вопреки всякой логике" - это Вы о чём?

Простой пример. Две таблицы, 1 табл. поля: фио + город; 2 табл. поля: фирма + город. Город может поменять название или объединится с другим (удалиться).
По моему мнению контроль на уровне одинаковости названий городов нужен. Третья таблица - города, внешний ключ с двух таблиц. И null для города недопустим.
Причина, так как админ софта "на местах" убъётся, но заставит дать ему права root от БД, так как он ж программист и sql знает. И он обязательно найдёт причины по которым надо править и удалять города напрямую прямо в таблице и обязательно в первом варианте не подумает, что надо править не только в таблице с фио, но и в таблице с фирмами.
Я могу понять зачем вы это делаете на уровне разработчиков (сам любитель).
В фирме, которая пишет софт эффектный менеджер, который заставил внедрить в софт фичи "шьёт, жнёт и на дуде играет" и БД и логика в программе очень усложнена. Также программистам платят мало, они бегут как тараканы. Нафиг в такой фирме усложнять sql логику, пусть админы правят всё что хотят, типа им же хуже.
17 авг 17, 10:55    [20730397]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 22808
982183
skyANA
Вы ещё скажите, что всю электронную переписку храните за последние 10 лет :)

Переписка, бухгалтерские проводки, логи с электронной проходной.
С 1995г храним . . .

А Вы лично тоже храните свою переписку за последние 10 лет? Любой спам?
17 авг 17, 11:26    [20730498]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 22808
azsx
автор
"удалять вопреки всякой логике" - это Вы о чём?

Простой пример. Две таблицы, 1 табл. поля: фио + город; 2 табл. поля: фирма + город. Город может поменять название или объединится с другим (удалиться).
По моему мнению контроль на уровне одинаковости названий городов нужен. Третья таблица - города, внешний ключ с двух таблиц. И null для города недопустим.
Причина, так как админ софта "на местах" убъётся, но заставит дать ему права root от БД, так как он ж программист и sql знает. И он обязательно найдёт причины по которым надо править и удалять города напрямую прямо в таблице и обязательно в первом варианте не подумает, что надо править не только в таблице с фио, но и в таблице с фирмами.
Я могу понять зачем вы это делаете на уровне разработчиков (сам любитель).
В фирме, которая пишет софт эффектный менеджер, который заставил внедрить в софт фичи "шьёт, жнёт и на дуде играет" и БД и логика в программе очень усложнена. Также программистам платят мало, они бегут как тараканы. Нафиг в такой фирме усложнять sql логику, пусть админы правят всё что хотят, типа им же хуже.

Извините, но ни фига не понял. Такое впечатление, что Вы просто эмоции выплёскиваете :)
17 авг 17, 11:29    [20730514]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 22808
azsx
И он обязательно найдёт причины по которым надо править и удалять города напрямую прямо в таблице и обязательно в первом варианте не подумает, что надо править не только в таблице с фио, но и в таблице с фирмами.

Вот тут (если использовать ограничения СЦ) ему СУБД скажет, что удаление не возможно, так как есть ссылка на город из таблицы с фирмами.

Но повторюсь, что я так и не понял при чём тут "удалять вопреки всякой логике". Вроде логика ясна: надо "склеить" две записи об одном городе в одну.
17 авг 17, 11:33    [20730536]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
azsx
Member

Откуда:
Сообщений: 523
автор
Вот тут (если использовать ограничения СЦ) ему СУБД скажет, что удаление не возможно, так как есть ссылка на город из таблицы с фирмами.

Именно поэтому в своих любительских программах я ограничения ставлю. Но я читаю, что некоторые профессионалы ограничения на уровне СУДБ не ставят и в пример, что ограничения надо ставить только на уровне логике софта приводят названия софта, где такого контроля нет. Я ограничения ставить буду, но уже не уверен, что прав.
автор
Но повторюсь, что я так и не понял при чём тут "удалять вопреки всякой логике". Вроде логика ясна: надо "склеить" две записи об одном городе в одну.

Логика, если город менять, то в обоих таблицах. Если есть внешний ключ, то замена сразу в обоих таблицах будет. А если разработчику внешние связи только мешают, то админ на месте может "вопреки всякой логике" sql запросом в одной таблице поменять название города, а во второй забыть.
Если таких связей десятки, они не текст, а на числа и хеши -- то ограничения на уровне БД (по моему мнению) прямо спасение перед совершением непоправимой ошибки.
17 авг 17, 11:45    [20730593]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
LSV
Member

Откуда: Киев
Сообщений: 30144
О чём конкретно речь? Можете пояснить, что за целостность бизнес логики такая?
На 1 и 2 странице треда писал раза три.

Целостность Б/Л это не только запрет удаления строки со ссылкой. Это комплексное понятие.
Поэтому желательно ее делать в одном месте и удобным способом для данного проекта: на клиенте, в сервере приложений, ХП и пр.
Туда может войти в т.ч. запрет удаления, если есть к.л. ссылка (т.е. аналог СЦ-констрайнт).

Я применял ХП. При попытке удаления строки делалась куча проверок. Есть проверка ОК, то делался ряд действий (очистка журналов, смена статусов строк, пересчеты и т.д.). Весь код в одном месте. При желании можно часть проверок отключить в один клик.

Также проверка возвращает вменяемое сообщение об ошибке (паруззке и со значениями ключей), что невозможно при срабатывании СЦ_СУБД.
17 авг 17, 11:45    [20730594]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 3 4 [5] 6   вперед  Ctrl      все
Все форумы / Проектирование БД Ответить