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

Откуда:
Сообщений: 1271
Прописывать на уровне бд или это старый век?
__________________________________________________________________
THE TRUTH IS OUT THERE
2 авг 17, 14:49    [20695081]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
LSV
Member

Откуда: Киев
Сообщений: 29968
Связи (констрайнты) будут мешать разными способами.
Поэтому многие разработчики их принципиально не используют.

И правильно делают, ИМХО.
2 авг 17, 14:55    [20695107]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
mr_max
Member

Откуда:
Сообщений: 1271
LSV
Связи (констрайнты) будут мешать разными способами.
Поэтому многие разработчики их принципиально не используют.

И правильно делают, ИМХО.

согласен.
2 авг 17, 15:02    [20695131]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
ChA
Member

Откуда: Москва
Сообщений: 10354
LSV
Связи (констрайнты) будут мешать разными способами. Поэтому многие разработчики их принципиально не используют.

И правильно делают, ИМХО.
Да и таблицы устарели, надо держать всё в XML и NoSQL. И БД привязывать только к одному приложению, только кретин полагает, что БД могут пользоватся разными приложениями.

P.S. ДБ!
2 авг 17, 15:10    [20695167]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
stomsky
Member

Откуда: Волгоград
Сообщений: 124
LSV
Связи (констрайнты) будут мешать разными способами.

Каким образом FOREIGN KEY CONSTRAINT может мешать?
2 авг 17, 17:16    [20695693]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 7577
stomsky
LSV
Связи (констрайнты) будут мешать разными способами.

Каким образом FOREIGN KEY CONSTRAINT может мешать?

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

Откуда:
Сообщений: 2491
Думаю, тут речь не о ресурсах.
Связи мешают девелоперам другим, они требуют дисциплины - с ними ничего так просто не грохнеш не вставиш,
скрипты приходится писать аккуратнее.
2 авг 17, 18:28    [20695933]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
azsx
Member

Откуда:
Сообщений: 485
автор
их проверки небесплатны и увеличивают требуемые ресурсы на обновление данных

Зато их проверки не напрасны, то есть если не делать ограничения на уровне БД, то эти ограничения надо делать на уровне логики.
зы
На самом деле я дублирую и в БД стараюсь делать и в программе проверки пишу. Но как правильно делать -- я не знаю.
3 авг 17, 04:21    [20696650]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
scf
Member

Откуда:
Сообщений: 1352
Имхо, зависит от базы.
Доводы за:
- если данные в базе имеют самостоятельную ценность (живут длительное время, используются более чем одним приложением)
- низкая квалификация программистов

Доводы против:
- требуется большая скорость вставки и другие способы оптимизации уже реализованы
- вставка сущности в сложную нормализованную базу может быть делом нетривиальным
3 авг 17, 08:38    [20696809]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
stomsky
Member

Откуда: Волгоград
Сообщений: 124
Кот Матроскин
stomsky
пропущено...

Каким образом FOREIGN KEY CONSTRAINT может мешать?

Ну в принципе они могут мешать, конечно - их проверки небесплатны и увеличивают требуемые ресурсы на обновление данных

Кот, блин, ну ты такой троллинг запорол!!!
Разумеется я знаю про эти якобы "тормоза". Но я ни разу не слышал серьезных аргументов в продолжение разговора об этих тормозах.
Поэтому надеюсь, что LSV и объяснит.

scf
Доводы против:
- требуется большая скорость вставки и другие способы оптимизации уже реализованы
- вставка сущности в сложную нормализованную базу может быть делом нетривиальным

Ну т.е. надо принять за правило, что отказываться от внешних ключей надо там, где уже пожертвовали нормализацией?
Ведь даже если мы откажемся от FOREIGN KEY (как технической возможности РСУБД) мы же не откажемся от бизнес-требования "обеспечить ссылочную целостность данных"? Нас же не устроит, что, например, "Строка заказа" может существовать без привязки к "Заказу"? А если не устроит, то как без FOREIGN KEY будем обеспечивать выполнение этого бизнес-требования?
3 авг 17, 09:18    [20696903]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
LSV
Member

Откуда: Киев
Сообщений: 29968
А если не устроит, то как без FOREIGN KEY будем обеспечивать выполнение этого бизнес-требования?
Просто напишите логику, где всегда будет шапка у строки заказа. Только и всего.

А при различных ручных манипуляциях с данными часто приходится кратковременно и осознанно нарушать некую логику.
Изредка возможна ситуация, что сначала вставляются строки, а затем шапка.
Или импорт из сырого источника, где логика уже изначально нарушена. И вообще таких ситуаций немало.
И тогда FOREIGN KEY будут люто мешать.

Тож самое касается и триггеров, созданных для поддержки ФК.

Нарушение логики ФК всегда можно обнаружить и правильно отреагировать (н-р заново создать шапку или удалить/переместить осиротелые строки) при этом не выпадая в ошибки СУБД. Не всегда вообще возможно создание ФК. Тогда придется делать другое решение, т.е. применять несколько разных методов вместо одного.

зы: Тот, кто настаивает на использовании FOREIGN KEY просто мало работал с реальными данными. :)
3 авг 17, 09:58    [20696999]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
stomsky
Member

Откуда: Волгоград
Сообщений: 124
LSV
А если не устроит, то как без FOREIGN KEY будем обеспечивать выполнение этого бизнес-требования?
Просто напишите логику, где всегда будет шапка у строки заказа. Только и всего.

Давай на примере. Например, есть такая структура данных (T-SQL):
CREATE TABLE Orders
(
  OrderId INT IDENTITY (1, 1) NOT NULL,
....
  CONSTRAINT Orders_PK PRIMARY KEY(OrderId)
)
CREATE TABLE OrderDetails
(
  OrderDetailId INT IDENTITY (1, 1) NOT NULL,
  OrderId INT NOT NULL,
....
  CONSTRAINT OrderDetails_PK PRIMARY KEY (OrderDetailId)
)

По-моему, между этими таблицами должна быть связь внешним ключом между столбцами: Orders.OrderId -> OrderDetails.OrderId.
Но мы внешние ключи решили не использовать.
Что должно быть в слое бизнес-логики для того, чтобы запрос на вставку строки в OrderDetails не привел к нарушению ссылочной целостности?
Я правильно понимаю, что вместо этого:
INSERT INTO OrderDetails (OrderId, ...) VALUES (123, ...)

надо сделать что-то вроде этого:
IF NOT EXISTS (SELECT 1 FROM Orders WHERE OrderId = 123)
  RAISERROR('Нельзя нарушать ссылочную целостность', 16, 1)
ELSE
  INSERT INTO OrderDetails (OrderId, ...) VALUES (123, ...)

?
Ну, само собой, это все надо выполнить с нужным уровнем изоляции и наложением блокировки на выбранную в Order строку, чтобы между SELECT-ом и INSERT-ом другой пользователь эту строку не стер.
Если я понял правильно, то ИМХО быстрее отработает с внешним ключом...

LSV
А при различных ручных манипуляциях с данными часто приходится кратковременно и осознанно нарушать некую логику.
Изредка возможна ситуация, что сначала вставляются строки, а затем шапка.

А можно пример такой ситуации? Для меня это как-то диковато...

LSV
Или импорт из сырого источника, где логика уже изначально нарушена.

Ну в этом случае данные, которые надо загрузить в базу, просто некорректны с точки зрения модели данных бизнес-логики.
Я таких случаях в той же базе делаю отдельные таблицы для первоначальной (черновой) загрузки таких данных (может быть, не нормализованные и, да, может быть, без внешних ключей). Этакая маленькая свалка данных в базе данных. Но потом пользователю через интерфейс программы все равно приходится наводить порядок и перегонять эти данные в основные таблицы базы, в которых уже есть внешние ключи.
Все-таки просто загрузить данные в базу - мало. Главное как их потом можно будет использовать: строить отчеты или производить расчеты. А люди, которые пишут аналитические запросы, в праве рассчитывать на то, что данные в базе корректны. И "потерянных" строк в Detail-таблицах не будет. Я не прав?

LSV
Нарушение логики ФК всегда можно обнаружить и правильно отреагировать (н-р заново создать шапку или удалить/переместить осиротелые строки)

Как ты создашь заново строку в таблице Orders??? Откуда ты возьмешь ее реквизиты (номер, дату, КлиентId и пр.)? Заставишь пользователя заносить с бумаги?
3 авг 17, 12:25    [20697535]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
LSV
Member

Откуда: Киев
Сообщений: 29968
А можно пример такой ситуации? Для меня это как-то диковато...
Всё потому что Вы мало работали с данными. Это пройдет... :)


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

stomsky
Как ты создашь заново строку в таблице Orders??? Откуда ты возьмешь ее реквизиты (номер, дату, КлиентId и пр.)? Заставишь пользователя заносить с бумаги?
Не нужно проецировать проблему на конкретный случай. Мы обсуждаем подход, а не ордера.
Допустим я "просто знаю", что эта строка принадлежит клиенту ХХХ. :)
Можно штатно создать пустой документ и вставить ссылку на шапку в сиротской строке.
Кстати заново заносить с бумаги тоже приходилось. :)

Кароч есть масса случаев, когда приходится работать с несогласованными данными.
Лучше иметь поврежденные данные (кот. вероятно можно поправить), чем вообще ничего не иметь, кроме кучи ошибок вставки.
Удалить их всегда успеется.

Констрайнты не универсальны. Сегодня это ссылка на единственную таблицу. Завтра логика потребует сделать сложный ключ и сделать ссылку на разные таблицы (тип + ключ). Или вдруг потребуется запретить наличие ссылки на строку, у кот. сумма недостаточна или "тип" не тот.

Ниодна тиражная ERP система не использует ФК. И это абсолютно правильно для постоянно эволюционирующих систем.

Все равно нравятся констрайнты ? ОК. Используй их.
3 авг 17, 13:09    [20697663]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
buven
Member

Откуда:
Сообщений: 747
mr_max,
LSV
Ниодна тиражная ERP система не использует ФК. И это абсолютно правильно для постоянно эволюционирующих систем.

+1
Простой кейс:
Есть таблица сделок, есть в ней поле ID контрагента, у контрагента есть ссылка на справочник сегментов и т.д.
И таких полей у вас много за 30 с разной глубиной.
И предположим у вас распух EndOfDay. Вы точно определили, что дело не в связанных со сделками дынных, а в их количестве.
И у вас нет специалиста по производительности. Нужно отдавать анализ на строну.
Если у вас везде присутствует FK - вам придется отдавать, помимо таблицы сделок, еще и всю справочную информацию и рассказывать в какой последовательности заносить данные (пусть по каким то причинам бэкап отдать вы не можете).
Если ФК нет и целостность вы обеспечиваете на стороне клиента - вперед и с песней без всей этой гирлянды справочных данных.
3 авг 17, 14:06    [20697886]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
982183
Member

Откуда:
Сообщений: 929
LSV
Кароч есть масса случаев, когда приходится работать с несогласованными данными.

Масса.

LSV
Лучше иметь поврежденные данные (кот. вероятно можно поправить), чем вообще ничего не иметь, кроме кучи ошибок вставки.

А тут есть варианты.
Я бы сначала проверил данные на наличие в справочниках, правильное импортировал, а неправильные отправил бы в обработку.
Чем мучаться потом с корректировкой в рабочей базе.
3 авг 17, 14:09    [20697898]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
stomsky
Member

Откуда: Волгоград
Сообщений: 124
LSV
Кароч есть масса случаев, когда приходится работать с несогласованными данными.
Лучше иметь поврежденные данные (кот. вероятно можно поправить), чем вообще ничего не иметь, кроме кучи ошибок вставки. Удалить их всегда успеется.

Т.е. когда надо позволить иметь бардак в базе данных (хотя бы кратковременно)? :)
Ну тогда, конечно, возразить нечего :)

LSV
Ни одна тиражная ERP система не использует ФК. И это абсолютно правильно для постоянно эволюционирующих систем.

Хорошо, при должной прямоте рук разработчиков и достаточном их количестве без FOREIGN KEY обойтись можно. Можно даже без уникальных первичных ключей обойтись. Обычных индексов одних наделать и нормально. Но это, по-моему, из области: "у нас такая большая и богатая контора, что мы можем позволить себе разработать свою СУБД (свой ORM, свой Web-сервер и пр.)". На этом сайте реально все работают в таких конторах?
Чтобы отказаться от FOREIGN KEY в промышленной СУБД необходимо между нею (СУБД) и клиентом (написанным не тобой) воздвигнуть стену из сервисов доступа к базе. И обязать клиента модифицировать БД только посредствам этих сервисов.

LSV
Все равно нравятся констрайнты ? ОК. Используй их.

Договорились. :)
Я только за то, чтобы после того, как на вопрос "нужны ли констрейнты" ответить "нет", все-таки добавить "но в этом случае ты рискуешь... и потому тебе придется ...".
3 авг 17, 14:31    [20697965]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
Бредятина
Member

Откуда: Москва
Сообщений: 1654
mr_max
Прописывать на уровне бд или это старый век?
__________________________________________________________________
THE TRUTH IS OUT THERE

Вы, вероятно, говорите о "реляционной модели данных". В ней никаких связей нет, и прописать то, чего нет,
"на уровне БД" у Вас не получится.
Вероятно, Вы спрашиваете нужно ли ограничения целостности поддерживать на стороне БД, или их можно
поддерживать на стороне приложения. Чем больше ОЦ Вы будете поддерживать на стороне БД, тем качественнее Ваше приложение.
3 авг 17, 14:43    [20698030]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
LSV
Member

Откуда: Киев
Сообщений: 29968
982183
А тут есть варианты.
Я бы сначала проверил данные на наличие в справочниках, правильное импортировал, а неправильные отправил бы в обработку.
Чем мучаться потом с корректировкой в рабочей базе.
Сразу видно, что товарисч мало работал с данными... :)
Импортируете неск. разных тхт-файлов. Вроде бы нормальных. Ну отправьте их сначала "на обработку", ога....
Куда именно их отправить ? Как обрабатывать ?
Особенно, если импорт делается интеллектуально, т.е. не все данные реально импортируются в БД (допустим часть из них уже в базе есть).

зы: Я вообще за то, чтоб импорт делать только специальным механизмом, кот. умеет многократно проверить вводимые данные.
Да, это работает медленно. Это трудоёмко в создании, но за то данные будут надежными, а ошибки информативными.

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


ИСЧО РАЗ: Нравятся констрайнты - ОК.
3 авг 17, 15:07    [20698126]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
Очень лысый
Member

Откуда: БОМЖ
Сообщений: 478
Прикладные разработчики часто выдают разные гениальные идеи типа "СУБД разрабатывали лохи, щас мы тут целостность данных будем приложением проверять, да и вообще нафиг эту целостность проверять - будет быстрее работать". Каждый обязательно заново изобретёт EAV и удивится, как это эти старые пердуны за 50 лет до такой классной вещи не додумались. И нормализация не нужна: надо всё в одну таблицу и ведь как классно будет: никаких тебе джойнов, всё будет классно и быстро.
Если по теме, то ответ здесь очень простой: если нужен контроль целостности - нужны констрейнты, не нужен - не нужны.
3 авг 17, 15:22    [20698222]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
LSV
Member

Откуда: Киев
Сообщений: 29968
Очень лысый
Если по теме, то ответ здесь очень простой: если нужен контроль целостности - нужны констрейнты, не нужен - не нужны.
Ответ дилетантский. :)
Констрейнты не в состоянии обеспечить целостность бизнес-логики. Только малую ее часть.
Поэтому они почти никогда не нужны. Целостность обеспечивают другими средствами.
Удаление/вставка записи в БД это всегда сложный бизнес-процесс. Его нельзя применять в лоб. Для этого делают сложные процедуры, которые много чего делают, прежде чем удалить/вставить что-то. Поэтому польза от констрайнт = 1%.

Повторю: ниодна ERP-система не использует констрейнты.
3 авг 17, 15:55    [20698410]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
mad_nazgul
Member

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


FOREIGN KEY вообще никак не мешают работы с данными.
От слова вообще.

Если у вас "сырые"/"грязные" и т.д. данные, то не надо их сразу пихать в таблицы.
Создаются временные таблицы, которые позволяют в начале данные привести к приемлемому виду, а потом правильно разложить по таблицам.

Зато это один из инструментов достижения ACID.

Так что правильно заметили.
Если вам не нужны FK, то лучше брать NoSQL.
Это будет быстрее и проще. :-)
3 авг 17, 16:12    [20698486]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
LSV
Member

Откуда: Киев
Сообщений: 29968
FOREIGN KEY вообще никак не мешают работы с данными.
Кому как. Я тоже когда-то давно так думал.

В таком случае для чего они нужны ?
Мешают удалять ? Дык есть простой рецепт: А ты не удаляй. :)

Если "привести к приемлемому виду, а потом правильно разложить по таблицам". ОК. А тут какую роль играют констрайнты, если все в приемлимом виде ?

зы: никто внятной их нужности так и не привёл. Ждёмс...
3 авг 17, 16:29    [20698549]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
stomsky
Member

Откуда: Волгоград
Сообщений: 124
LSV
зы: никто внятной их нужности так и не привёл. Ждёмс...

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

Откуда: Киев
Сообщений: 29968
stomsky
LSV
зы: никто внятной их нужности так и не привёл. Ждёмс...

Лично для меня тут довод один: это еще одна (да, не совершенная, но чертовски эффективная "в пределах своей компетенции") линия защиты от:
1. Своих же собственных ошибок в коде, содержащем логику работы с БД.
2. Ошибок в коде других (написанных не мной) клиентов, содержащих логику работы с БД.
Если ты уверен в своей непогрешимости, то аплодирую стоя...
Я вообще шапки никогда не удаляю. Для логического удаления есть спец. поле.
Абсолютно все удаления (в т.ч. логические) делаются соотв.процедурами, кот. делают много бизнес-проверок с внятными ответами на ошибки. Поэтому случайно удалить важную инфу невозможно.
3 авг 17, 16:58    [20698650]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
stomsky
Member

Откуда: Волгоград
Сообщений: 124
LSV
Абсолютно все удаления (в т.ч. логические) делаются соотв.процедурами, кот. делают много бизнес-проверок с внятными ответами на ошибки. Поэтому случайно удалить важную инфу невозможно.

Т.е. на каждую сущность (читай таблицу) - отдельная процедура "Delete_<Entity>"?
3 авг 17, 17:12    [20698689]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
LSV
Member

Откуда: Киев
Сообщений: 29968
stomsky
LSV
Абсолютно все удаления (в т.ч. логические) делаются соотв.процедурами, кот. делают много бизнес-проверок с внятными ответами на ошибки. Поэтому случайно удалить важную инфу невозможно.

Т.е. на каждую сущность (читай таблицу) - отдельная процедура "Delete_<Entity>"?
Да. Это единый подход, без исключений.
Хранимая процедура. Возвращает причину неудачи, есличо.

Причин может быть пару десятков. И только одну из них можно поймать констрайнтами.
3 авг 17, 17:19    [20698715]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
buven
Member

Откуда:
Сообщений: 747
LSV
зы: никто внятной их нужности так и не привёл. Ждёмс...


Возможно за уши притянуто, но как защита от сапорта, которому позвонил юзер в гневе и попросил удалить вот эту вот строчку срочно, и у которого ночью нет ничего кроме студии и знания, как написать delete from.
3 авг 17, 17:44    [20698767]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
LSV
Member

Откуда: Киев
Сообщений: 29968
buven
LSV
зы: никто внятной их нужности так и не привёл. Ждёмс...


Возможно за уши притянуто, но как защита от сапорта, которому позвонил юзер в гневе и попросил удалить вот эту вот строчку срочно, и у которого ночью нет ничего кроме студии и знания, как написать delete from.
Студией удалять могу только я. Остальные - штатными процедурами. :)

зы: Иногда приходилось править студией в обход процедур. Для заведома некритичных ситуаций. Но такое решение может принять только эксперт. Т.е. я. :)
Ниодна система не защищена на 100% от ручной поломки б/логики.
3 авг 17, 18:01    [20698821]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
дакэта
Guest
scf
Имхо, зависит от базы.
Доводы за:
<>
- низкая квалификация программистов

Доводы против:
<>
- вставка сущности в сложную нормализованную базу может быть делом нетривиальным

"низкая квалификация программистов" -- основной довод ПРОТИВ ФК, т.к. кривые руки не дают работать со "сложными нормализованными сущностями" , а хочется махать шашкой.

все высказывания ЛСВ о том, что якобы можно обеспечить целостность дешевле -- бред злобного буратины. в развивающемся приложении -- нельзя. в статичном -- после доказательства, что данная статичная реализация ни в одном случае не ломает логическую целостность. (как видим руками туда лезть никак нельзя, никакому ЛСВ -- нарушается статичность)
3 авг 17, 18:11    [20698850]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
vmag
Member

Откуда: г. Одинцово
Сообщений: 2636
Чисто задело, по этому тоже выскажусь...
Есть БД с нормальной структурой, целостностью, прозрачностью и т.д. где все просто и красиво...
Все, что вокруг (как тут говорят - много всякой информации, текстовых файлов и т.д. и т.п.) - это просто помойка и тут каждый решает для себя уже сам - брать в БД только нужное из помойки, делать тупо ссылку на помойку (кому нужно, тот будет ковыряться) или превратить свою БД тоже в помойку...
3 авг 17, 23:02    [20699276]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
vadiminfo
Member

Откуда: Обнинск
Сообщений: 4663
mr_max
Прописывать на уровне бд или это старый век?
__________________________________________________________________
THE TRUTH IS OUT THERE

Нужно стремиться прописывать все ограничения целостности по возможности на уровне БД и по возможности декларативно.
Действительно, ведь это логические правила, которым должны отвечать данные. Например, не должно быть этапов договоров не относящихся ни к каким договорам. И декларативно прописанные мало того, что горантировано не позволяют нарушить логические ограничения в БД, так они еще и имеют модельное значение: легко понять что есть такое правило, просто просотрев ОЦ.
БД - это ядро ИС - там вся информация. И поэтому ее модель, которая включает ОЦ имеет значение.
А программ мало того, что много - (во всех прописывать одни и те же ОЦ?) , так в них могут быть ошибки (а БД должна оставаться целостной по возможности), в них не видно, сложней править. Да и программы - это типа внешние модели с точки зрения тех или иных пользователей. А модель БД это модель всей информации системы.
3 авг 17, 23:38    [20699317]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
982183
Member

Откуда:
Сообщений: 929
LSV
Куда именно их отправить ? Как обрабатывать ?

В смысле как?
Проверить наличие данных на наличие в справочниках базы слабо.
Стандартная тривиальная проверка.
4 авг 17, 02:12    [20699389]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
azsx
Member

Откуда:
Сообщений: 485
автор
А можно пример такой ситуации? Для меня это как-то диковато...

Могу легко дать вам пример, без имён.
Есть программа, купленная на торгах + ТП ежегодная покупаемая. торги, значит выбрано дешёвое предложение. Oracle + java. По сути программа не рабочая, то есть время от времени (чаще, чем раз в месяц) в программе возникают такие проблемы, которые поправить из программы невозможно никак. Бывает, что причину увидеть из программы также невозможно никак. Заказать доработку у программистов -- это до нескольких месяцев, даже когда проблемы критические.
Как выкрутились (я и ТП).
1. Лезем в БД, селектами. Буквально сверяем строки в таблицах, проблемная строка + работающая строка. Ищем какие то несоответствия.
2. Когда находим (вот в этом поле надо false убрать) рассуждаем зачем там false по закону он или по логике, как его убрать из программы, как он там очутился и т.п.
3. Затем если из программы это сделать никак нельзя -- убираем их update или даже удаляем строки delete. Мне и ТП значительно легче править БД без всяких глупостей, типа ФК. Про риски я промолчу, это кошмар!
---
При этом все же понимают, что это не правильно! Просто денег мало, ищем самый быстрый способ. Или единственно реально выполнимый.
Какие ещё нужны аргументы?
4 авг 17, 08:14    [20699483]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 7577
azsx
Могу легко дать вам пример
[...]
Какие ещё нужны аргументы?


Если Ваш пример сформулировать одной фразой, он будет звучать так - "в кривой и глючной системе жить без констрейнтов проще и легче".
Ну, ээ, возможно :) Но, согласитесь, как аргумент в споре "проектировать ли систему, опираясь на констрейнты или нет" - он звучит слабовато.
4 авг 17, 08:32    [20699511]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 33424
mr_max
Прописывать на уровне бд или это старый век?
__________________________________________________________________
THE TRUTH IS OUT THERE


нужно
4 авг 17, 09:10    [20699561]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
vmag
Member

Откуда: г. Одинцово
Сообщений: 2636
Кот Матроскин,

+

В принципе, можно проанализировать любую готовую БД уже по факту (для этого нужен анализ каждой конкретной разработки):
1. БД спроектирована оптимально, интерфейс удобен и понятен, система в целом стабильна, иногда возникают некоторые вопросы, которые решаются по телефону после звонка в службу поддержки - это значит, что разработчик сделал ставку на массовое распространение продукта и готов вести конкурентную политику с целью максимального привлечения клиентов, и получения прибыли с продаж продукта.
2. БД и интерфейс в целом выполняют свои функции, но есть определенные моменты, которые разработчик может устранить только своим личным участием - это значит, что ввиду определенной специфики, данное ПО не имеет возможности массового распространения, а разработчик имеет огромное желание постоянно доить узкий круг своих клиентов, эксплуатирующих его ПО.
3. БД (ПО) глючное до не могу, но другой альтернативы просто нет - это значит, что ПО Федерального уровня, написанное наспех студентами за бесплатно (несмотря на выделенный на это гос бюджет) для обеспечения выполнения одного из Федеральных законов. Тут нужно тупо всей страной жаловаться во все инстанции, заваливать траблами службу поддержки и просто терпеливо ждать...
4. БД (ПО) глючное до не могу, но есть альтернатива - нужно переходить на альтернативное ПО, или пытаться писать свое (дорабатывать существующее, делать свои надстройки). Показателен пример от
azsx
Как выкрутились (я и ТП).
1. Лезем в БД, селектами. Буквально сверяем строки в таблицах, проблемная строка + работающая строка. Ищем какие то несоответствия.
2. Когда находим (вот в этом поле надо false убрать) рассуждаем зачем там false по закону он или по логике, как его убрать из программы, как он там очутился и т.п.
3. Затем если из программы это сделать никак нельзя -- убираем их update или даже удаляем строки delete. Мне и ТП значительно легче править БД без всяких глупостей, типа ФК.

Пункты 1-3 можно автоматизировать и положить начало созданию своей надстройки контроля информации.
Ну и т.д. и т.п.
4 авг 17, 09:10    [20699563]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 33424
LSV
Связи (констрайнты) будут мешать разными способами.
Поэтому многие разработчики их принципиально не используют.

И правильно делают, ИМХО.



мнение отдельно неправильного индивидуума неинтересно
4 авг 17, 09:10    [20699564]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 33424
stomsky
LSV
Связи (констрайнты) будут мешать разными способами.

Каким образом FOREIGN KEY CONSTRAINT может мешать?


говорят, плохим танцорам даже шары мешают...
4 авг 17, 09:12    [20699568]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 33424
SERG1257
Думаю, тут речь не о ресурсах.
Связи мешают девелоперам другим, они требуют дисциплины - с ними ничего так просто не грохнеш не вставиш,
скрипты приходится писать аккуратнее.


особенно они мешали на собеседованиях. спросишь бывало "что же такое этот foreign key, и чем отличается от primary key" ? а в ответ "они только и мешают..."

ну, ок, если тебе они мешают, как ты у нас работать будешь, когда из у нас в базе несколько тысяч?
4 авг 17, 09:16    [20699581]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 33424
stomsky
Но я ни разу не слышал серьезных аргументов в продолжение разговора об этих тормозах.


потому что их просто нет.
4 авг 17, 09:18    [20699588]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
azsx
Member

Откуда:
Сообщений: 485
автор
"в кривой и глючной системе жить без констрейнтов проще и легче"

Моё мнение, что в программе нужны связи между таблицами, ключи первичные, тригеры. Процедурами для каких либо действий я сам не пользуюсь (но я любитель, пишу только для себя).
Верное замечание, когда система кривая и глючная, когда вопреки всякой логике какие то левые личности прут на БД с рутом поправить чо то по быстрому -- тогда удобно без всяких проверок. Но это огромный риск и явно не верное решение.
4 авг 17, 09:20    [20699593]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
azsx
Member

Откуда:
Сообщений: 485
автор
Пункты 1-3 можно автоматизировать и положить начало созданию своей надстройки контроля информации.

Именно так я и делаю неспешно. К сожалению в мире есть два нормальных языка, на пхп http://www.sql.ru/forum/1261406/kak-podkluchitsya-k-baze-oracle у меня подключиться просто не получилось к БД, а на fpc https://www.devart.com/odac/download.html компонент платный и дорогой очень. Приходится учить java.
зы
извините, фокспро и vb6 также прекрасны, но они мертвы.
4 авг 17, 09:34    [20699636]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
stomsky
Member

Откуда: Волгоград
Сообщений: 124
LSV
stomsky
Т.е. на каждую сущность (читай таблицу) - отдельная процедура "Delete_<Entity>"?
Да. Это единый подход, без исключений.
Хранимая процедура. Возвращает причину неудачи, есличо.

Причин может быть пару десятков. И только одну из них можно поймать констрайнтами.

А INSERT-ы и UPDATE-ы тоже в хранимых процедурах? Ведь ими тоже ссылочную целостность можно нарушить...
Я почему так подробно интересуюсь, - есть мнение, что SQL в качестве языка для реализации сложной бизнес-логики слишком неудобен. Поэтому бизнес логику лучше выносить на уровень сервисов, которые пишутся на JAVA, C# и прочих Питонах. А ты, получается, возводишь защитную стену их хранимок на этом самом SQL...
4 авг 17, 10:11    [20699766]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
LSV
Member

Откуда: Киев
Сообщений: 29968
Верное замечание, когда система кривая и глючная....
таких систем с т.з. канонического проектирования - 90%.
В тиражных системах - тож самое или даже хуже.

И вообще причем тут глючность ? Как раз сама система может работать очень даже ОК. Руками приходится лесть, когда жизненно необходимо сделать некое нештатное действие. Ради него эту систему переделывать не будут.

а еще:
Например удобно хранить пустую ссылку как = 0, а не null. Но тогда констрайнту не наложишь. В любой большой системе полно мест, где констрайнту не получится использовать (примеры были выше). И тогда нужно помнить, где есть констрайнта, а где нет.

Выходит, констрайнта как "защита от дурака" - слабая мера.
4 авг 17, 10:18    [20699786]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
azsx
Member

Откуда:
Сообщений: 485
автор
Как раз сама система может работать очень даже ОК. Руками приходится лесть, когда жизненно необходимо сделать некое нештатное действие. Ради него эту систему переделывать не будут.

У нас с Вами просто мнение разное. В excel мне никогда не понадобилось лезть в файлы xls, чтобы что то поправить нотепадом. и затем вновь открыть этот же xls этим же excel'ом. Я слышал, что у excel бывали проблемы, правили баги, но сам не сталкивался. В очень многих популярных тиражируемых программах я также никогда не думал о коде или БД.
А вот некоторые программы в РФ кривые. Значит левым людям приходится лезть в БД с select'ами. Иначе никак не разобраться чо не так.
А вот некоторые программы в РФ глючные. Значит левым людям приходится лезть в БД с delete'ами update'ами. Иначе никак не исправить проблемы данного софта.
При этом можно заказать доработку, от 3 месяцев и выше, просто нереально по срокам.
зы
Если согласно Вашему опыту таких программ 90% -- то просто ужас. Странно, что программисты ваще находят время на форумах писать, им работать надо.
4 авг 17, 10:33    [20699839]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
schi
Member

Откуда: Москва
Сообщений: 2209
Чем больше таких утверждающих и дискутирующих, тем лучше - мне гарантирована востребованность на рынке труда.

"Танцуйте, ребятки, танцуйте, и ваш нос вырастет длинным-длинным. А мы распилим его на дубинки."
4 авг 17, 10:39    [20699870]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
azsx
Member

Откуда:
Сообщений: 485
автор
Странно, что программисты ваще находят время на форумах писать, им работать надо.

Хотя так подумал, логично. Платят ли программистам за то, чтобы они программы безглючные писали в РФ?
4 авг 17, 10:40    [20699873]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
LSV
Member

Откуда: Киев
Сообщений: 29968
Если согласно Вашему опыту таких программ 90% -- то просто ужас.
Это не ужас. Это реалии жизни.
Не только в БД, а вообще в любой сфере деятельности. Везде приходится отступать от неких правил, чтобы преодолеть ограничения, наложенные этими правилами.

зы: ради веселья почитайте рассказик "хакер в столовой". Есть неск. его вариантов.
Пля....констрайнтами они данные собрались защищать.......
4 авг 17, 10:53    [20699948]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
azsx
Member

Откуда:
Сообщений: 485
автор
Это не ужас. Это реалии жизни.

LSV, хорошо, поясните, пожалуйста, любителю.
1. Почему Ваши реалии не работают для excel?
2. В чём негатив? Реальная программа кривая, единственный способ исправить -- это удалить строку в БД. Пусть левый человек разберётся в зависимостях, сперва удалит или исправит зависимые записи в других таблицах, затем удаляет в своей таблице напрямую. Что не так?
То есть без всех этих проверок, которые пишут проектировщики системы, мне, левой личности, случайно испортить базу очень легко. А проверки чуть чуть, но спасали бы от бездумных delet'ов.
4 авг 17, 11:01    [20699981]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
LSV
Member

Откуда: Киев
Сообщений: 29968
azsx
автор
Это не ужас. Это реалии жизни.

LSV, хорошо, поясните, пожалуйста, любителю.
1. Почему Ваши реалии не работают для excel?
2. В чём негатив? Реальная программа кривая, единственный способ исправить -- это удалить строку в БД. Пусть левый человек разберётся в зависимостях, сперва удалит или исправит зависимые записи в других таблицах, затем удаляет в своей таблице напрямую. Что не так?
То есть без всех этих проверок, которые пишут проектировщики системы, мне, левой личности, случайно испортить базу очень легко. А проверки чуть чуть, но спасали бы от бездумных delet'ов.
1. Не понял вопроса.
2. Реальная может быть и не кривой. Но иногда нужен быстрый результат, кот. достижим только прямым апдейтом.
При разработке системы часто приходится манипулировать данными в целях отладки, поиска ошибок и т.д. При этом иногда приходится кратковременно нарушать целостность. Чтобы проверить свою систему ловли ошибок или просто проверить работу системы с комбинациями разных данных. И так далее до бесконечности.......

пример: нужно срочно исключить один документ из выборки. Достаточно просто поменять знак ключа в шапке, чтоб связь со строками разорвалась и документ из сложной выборки исчез. Через секунду вернуть назад. И т.п.

Иногда удобно править данные в порядке, кот. противоречит целостности: н-р сначала удаляем шапку, потом ее строки (это сказано просто для примера).
И тут констрайнты могут мешать.

При этом констрайнту всегда можно заменить диагностической выборкой, показывающей точки с ошибкой. И сделать выводы.
Иногда удобно, чтоб ошибки накопились после неск. отдельных манипуляций. И опять сделать выводы.
Глюк при сработавшей констрайнте обычно малоинформативен. Нельзя точно сказать, какое значение ключа вызвало глюк. А хотелось бы.

В хорошо спроектированной системе нештатное удаление/искажение важных данных невозможно. Констрайнты просто никогда не сработают.
4 авг 17, 11:50    [20700234]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
azsx
Member

Откуда:
Сообщений: 485
LSV, извините, что задаю вопросы один по одному, просто хочу для себя разобраться.
автор
1. Не понял вопроса.

Смотрите, мне никогда не надо делать следующую манипуляцию: а) закрываю книгу test.xls (то есть файл закрыт в программе excel); б) открываю файл test.xls для редактирования в notepad++; в) снова открываю файл test.xls в программе excel и получаю благодаря предыдущему редактированию какие то плюсы, например, что вообще заработала какая то функция в файле.
То есть excel -- самодостаточная программа. Если не было физических ошибок при записи книги, то ничего вручную там в файле не наделаешь такого, чего нельзя сделать из excel.
---
Вы пишите
автор
При разработке системы часто приходится манипулировать данными в целях отладки, поиска ошибок и т.д. При этом иногда приходится кратковременно нарушать целостность.

При этом:
автор
В хорошо спроектированной системе нештатное удаление/искажение важных данных невозможно. Констрайнты просто никогда не сработают.

То есть следуя прочитанному разработчику проще без constraint, но нормальной системе нужны constraint.
а) обратите внимание, я не со стороны разработчика, а со стороны ТП смотрю. Мне проще и легче, что всяких правил и ограничений в БД нет, но зато испортить что нибудь мне также проще. Было бы логичнее если правила заранее задаст разработчик на уровне БД. Нет?
б) у меня в голове не укладывается, что там разработчик хочет удалить вопреки бизнес логике и посмотреть что получится?
Простой пример, 2 таблицы, одна фио + id город (внешний ключ); вторая id + город. Обе заполнили данными, затем разработчик хочет удалить город delete в sql. Ему БД говорит, нельзя. Делаем те же таблицы, только внешнего ключа нет, так из приложения id узнаём. Снова удаляем город в sql и что разработчик увидит? Как поведёт себя программа, если какой то специалист ТП зная пароль от БД сам удалит город на который есть связи?
В чём ваще мысль такого удаления?
И почему разработчик, зная свою систему не может тестово сперва очистить свзяи, а затем удалить город? Он то свою БД знает.
4 авг 17, 12:23    [20700371]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
LSV
Member

Откуда: Киев
Сообщений: 29968
1. Как-о в старой версии Экселя нотпадом грохал пароль. Открылось норм. :)

И почему разработчик, зная свою систему не может тестово сперва очистить свзяи, а затем удалить город? Он то свою БД знает.
В некот. случаях это придется делать 10-100 раз в день. Ну попробуй удали город (со всеми связями), а потом опять верни все назад. И так неск. раз. :)

Связей может быть много к разным таблицам (город много где может используется). Запарися удалять/возвращать.

Мне кажется я и так подробнейше описал почему констрайнты могут мешать в реальной повседневной работе....
По моему опыту пользы от них меньше, чем вреда. Чисто ИМХО.
Далее впустую дискутировать не хочу.
4 авг 17, 12:41    [20700453]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
azsx
Member

Откуда:
Сообщений: 485
автор
В некот. случаях это придется делать 10-100 раз в день. Ну попробуй удали город (со всеми связями), а потом опять верни все назад. И так неск. раз. :)

Ясно, спасибо.
4 авг 17, 13:05    [20700561]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
Сид
Member

Откуда: Москва
Сообщений: 297
LSV
1. Как-о в старой версии Экселя нотпадом грохал пароль. Открылось норм. :)

И почему разработчик, зная свою систему не может тестово сперва очистить свзяи, а затем удалить город? Он то свою БД знает.
В некот. случаях это придется делать 10-100 раз в день. Ну попробуй удали город (со всеми связями), а потом опять верни все назад. И так неск. раз. :)

Связей может быть много к разным таблицам (город много где может используется). Запарися удалять/возвращать.

Мне кажется я и так подробнейше описал почему констрайнты могут мешать в реальной повседневной работе....
По моему опыту пользы от них меньше, чем вреда. Чисто ИМХО.
Далее впустую дискутировать не хочу.


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

Откуда: Киев
Сообщений: 29968
Сид
Да, лучше не пишите больше. И уходите из профессии, пока не поздно.
Сына, не тебе решать. :)
4 авг 17, 15:52    [20701331]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 33424
stomsky
Я почему так подробно интересуюсь, - есть мнение, что SQL в качестве языка для реализации сложной бизнес-логики слишком неудобен. Поэтому бизнес логику лучше выносить на уровень сервисов, которые пишутся на JAVA, C# и прочих Питонах.


Так на Java бизнес-логику ещё хуже писать, чем на SQL...
4 авг 17, 18:11    [20701816]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 33424
LSV
Например удобно хранить пустую ссылку как = 0, а не null. Но тогда констрайнту не наложишь.


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

Откуда: Питер
Сообщений: 33424
schi
Чем больше таких утверждающих и дискутирующих, тем лучше - мне гарантирована востребованность на рынке труда.

"Танцуйте, ребятки, танцуйте, и ваш нос вырастет длинным-длинным. А мы распилим его на дубинки."


Во. Я тоже тешу себя этой мыслью...
4 авг 17, 18:14    [20701820]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
vmag
Member

Откуда: г. Одинцово
Сообщений: 2636
На самом деле думаю LSV сейчас просто уссывается над всеми...
Типа ну-ну... пилите Шура, пилите - они золотые...
Он просто нашел одного-двух денежных клиентов/лохов, сделал им пару помоек и им теперь ни дыхнуть ни пёрднуть без него, только и остается, что бабло слюнявить...
4 авг 17, 22:13    [20702091]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
vmag
Member

Откуда: г. Одинцово
Сообщений: 2636
Успокаивает, что это в Киеве... пусть даже это в гос структуре...
4 авг 17, 22:15    [20702092]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
s_ustinov
Member

Откуда: Lugano, CH
Сообщений: 1750
vmag
На самом деле думаю LSV сейчас просто уссывается над всеми...
Типа ну-ну... пилите Шура, пилите - они золотые...
Он просто нашел одного-двух денежных клиентов/лохов, сделал им пару помоек и им теперь ни дыхнуть ни пёрднуть без него, только и остается, что бабло слюнявить...

Думаю, все проще - 1С
5 авг 17, 12:16    [20702495]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
LSV
Member

Откуда: Киев
Сообщений: 29968
MasterZiv
LSV
Например удобно хранить пустую ссылку как = 0, а не null. Но тогда констрайнту не наложишь.
А если это строка или дата, как пустую ссылку хранить ?
Какие однако дилетантские вопросы :).
Строка = пустая строка (не null),'-', '?', 'пусто' или что-то типа того на усмотрение разработчика.
Дата = некое значение, принятое в системе за "пусто", н-р 2000-01-01 или 1900-01-01. Это для примера.
7 авг 17, 09:40    [20704396]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 33424
vmag
Успокаивает, что это в Киеве... пусть даже это в гос структуре...


Проф. безграмотность везде обидно видеть. Киев не исключение.
10 авг 17, 14:49    [20713688]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 33424
LSV
MasterZiv
пропущено...
А если это строка или дата, как пустую ссылку хранить ?
Какие однако дилетантские вопросы :).
Строка = пустая строка (не null),'-', '?', 'пусто' или что-то типа того на усмотрение разработчика.
Дата = некое значение, принятое в системе за "пусто", н-р 2000-01-01 или 1900-01-01. Это для примера.


Я знал, что ты так ответишь!
:-)

0) ты в курсе, что в некоторых СУБД НЕТ ПУСТЫХ СТРОК ? Пустая строка -- это NULL

1) классно, а что если завтра придёт клиент, и захочет завести документ именно за дату 2000-01-01 или 1900-01-01 ?
10 авг 17, 14:52    [20713694]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
LSV
Member

Откуда: Киев
Сообщений: 29968
MasterZiv
LSV
пропущено...
Какие однако дилетантские вопросы :).
Строка = пустая строка (не null),'-', '?', 'пусто' или что-то типа того на усмотрение разработчика.
Дата = некое значение, принятое в системе за "пусто", н-р 2000-01-01 или 1900-01-01. Это для примера.


Я знал, что ты так ответишь!
:-)
0) ты в курсе, что в некоторых СУБД НЕТ ПУСТЫХ СТРОК ? Пустая строка -- это NULL

1) классно, а что если завтра придёт клиент, и захочет завести документ именно за дату 2000-01-01 или 1900-01-01 ?
0) тогда принимаем за "пусто" что-то другое из вышеперечисленного.
1) за "пусто" надо принимать значение, кот. никогда не появится в системе.
Многие СУБД вообще не готовы для штатного хранения исторических дат н-р 332г. до н.э. И чо теперь ?
10 авг 17, 16:10    [20714036]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
Alex_496
Member

Откуда: Moscow http://dvbi.ru
Сообщений: 3466
для россейских заднеприводных манагеров и раздолбаев программиздов ни FK не нужны, ни ER диаграммы, ни много чего еще. Ибо тяп-ляп - и в продакшн.

Когда будут много миллионные иски к компаниям и штрафы для работников, тогда и понадобится комплексный подход к проектам
10 авг 17, 19:04    [20714591]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
skyANA
Member

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

14 лет - это мало? Когда ждать просветления? :)
13 авг 17, 11:40    [20719541]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
LSV
Member

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

14 лет - это мало? Когда ждать просветления? :)
"Мудрость не всегда приходит с возрастом. Часто возраст приходит один" (с) :)

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

При этом, заметьте, я не сказал, что использование констрайнт "неверно" или типа того. Это просто одна из необязательных возможностей. Нравится - пользуй, не нравиццо - не пользуй.
Я из тех, кому не нравиццо. Аргументы я привел.
14 авг 17, 10:00    [20720947]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
skyANA
Member

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

практически все Ваши аргументы опираются на задачи, когда наличие foreign key никак не мешает их успешному решению, плавали - знаем :)
14 авг 17, 10:28    [20721025]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
LSV
Member

Откуда: Киев
Сообщений: 29968
skyANA
LSV,

практически все Ваши аргументы опираются на задачи, когда наличие foreign key никак не мешает их успешному решению, плавали - знаем :)
Решить можно практически любую задачу. Весь вопрос в цене. :)
14 авг 17, 10:35    [20721057]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
skyANA
Member

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

практически все Ваши аргументы опираются на задачи, когда наличие foreign key никак не мешает их успешному решению, плавали - знаем :)
Решить можно практически любую задачу. Весь вопрос в цене. :)

Хм, основная задача ограничения FOREIGN KEY - это управление данными, которые могут быть сохранены в таблице внешнего ключа и контроль изменение данных в таблице первичного ключа.

Зачем же платить большую цену за свой велосипед? :)
14 авг 17, 10:44    [20721095]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
DirksDR
Member

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

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

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

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

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

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

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

Когда разрабатывал ERP, то это была заказная разработка под крупную нефтяную компанию (100 серверов по всей России).
Так вот там данных было до фига, а задач по работе с ними дофигища.
И ограничения FOREIGN KEY не мешали, а только не хило снижали риски того, что какой-то нерадивый админ в Ангарске ручками в базу полез и похерил что-нибудь.
14 авг 17, 12:55    [20721584]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 33424
LSV
MasterZiv
пропущено...


Я знал, что ты так ответишь!
:-)
0) ты в курсе, что в некоторых СУБД НЕТ ПУСТЫХ СТРОК ? Пустая строка -- это NULL

1) классно, а что если завтра придёт клиент, и захочет завести документ именно за дату 2000-01-01 или 1900-01-01 ?
0) тогда принимаем за "пусто" что-то другое из вышеперечисленного.
1) за "пусто" надо принимать значение, кот. никогда не появится в системе.
Многие СУБД вообще не готовы для штатного хранения исторических дат н-р 332г. до н.э. И чо теперь ?


Я этим как бэ намекал, что сначала ты весело живёшь, а потом наступает то самое "никогда".
Именно для этого придумали NULL, документированный и хорошо всем разработчикам известный.
14 авг 17, 13:05    [20721625]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
MasterZiv
Member

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

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


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

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


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

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

Откуда: Питер
Сообщений: 33424
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

Откуда: Киев
Сообщений: 29968
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

Откуда: Киев
Сообщений: 29968
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

Откуда: Киев
Сообщений: 29968
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

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

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

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

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

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


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

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

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

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

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


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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

а можно глупый вопрос: почему Вы это называете "целостность"?
17 авг 17, 12:14    [20730741]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
LSV
Member

Откуда: Киев
Сообщений: 29968
skyANA
LSV,
а можно глупый вопрос: почему Вы это называете "целостность"?
Что "это" ?

Целостность -> Непротиворечивость, Правильность, Соответствие установленным правилам.
17 авг 17, 12:42    [20730891]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 22601
LSV
skyANA
LSV,
а можно глупый вопрос: почему Вы это называете "целостность"?
Что "это" ?

Целостность -> Непротиворечивость, Правильность, Соответствие установленным правилам.

То есть целостность бизнес логики - это непротиворечивость бизнес логики, правильность бизнес логики, или соответствие бизнес логики установленным правилам.

Очевидно, что целостность данных - это немного из другой оперы. И ясно, что ограничения СЦ не могут обеспечить правильность БЛ.
ИМХО какое-то растекание мыслью по древу. Предлагаю закончить дискуссию :)
17 авг 17, 12:56    [20730955]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
hVostt
Member

Откуда:
Сообщений: 11359
LSV
Целостность -> Непротиворечивость, Правильность, Соответствие установленным правилам.


Хмм.. а я бы ещё сюда добавил, платежеспособность заказчика. Если заказчик платит, значит база хорошая, правильная. Если не платит, не правильная база, противоречивая какая-то, не соответствует установленным правилам

Ну и бред канеш..
17 авг 17, 20:13    [20732512]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
mr_max
Member

Откуда:
Сообщений: 1271
А вот битрикс не использует почему то стандартные средства для целостности.
17 авг 17, 21:08    [20732603]     Ответить | Цитировать Сообщить модератору
 Re: Нужно ли связи в таблицах в sql  [new]
mayton
Member

Откуда: loopback
Сообщений: 35509
Не читал весь топик.

Откоменчу просто тему.

Существуют глобальные тренды - замена реляции на агрегаты.
Это связано с big-data, неструктурированными данными (JSON/XML)
документами. Это связано с упрощением взгляда на разработку
(не от БД к клиенту как было раньше) а от бизнес-процесса (hibernate)
к DDL. Все это создает предпосылки к использованию реляционных
dbms просто как хранилищ. Благо амазон нам подарил копеечный
хостинг и удельная стоимость хранения data-row стала низка как
никогда.

Однако это не означает что нужно проектировать БД без ссылочных
связей. Если вы не дурак и если вы цените данные и дорожите ими
то - используйте констрейнты настолько - наколько это нужно для
самой задачи.

Не идите на поводу у дураков. Они начали изучение БЗ с хадупа
а вы - начните с Дейта или Кодда. Знание всегда будет ценнее
незнания или глупости.
17 авг 17, 22:46    [20732761]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3 4 5 6      [все]
Все форумы / Проектирование БД Ответить