powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Нужно ли связи в таблицах в sql
131 сообщений из 131, показаны все 6 страниц
Нужно ли связи в таблицах в sql
    #39499054
Фотография mr_max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прописывать на уровне бд или это старый век?
__________________________________________________________________
THE TRUTH IS OUT THERE
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39499061
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Связи (констрайнты) будут мешать разными способами.
Поэтому многие разработчики их принципиально не используют.

И правильно делают, ИМХО.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39499067
Фотография mr_max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVСвязи (констрайнты) будут мешать разными способами.
Поэтому многие разработчики их принципиально не используют.

И правильно делают, ИМХО.
согласен.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39499075
Фотография ChA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVСвязи (констрайнты) будут мешать разными способами. Поэтому многие разработчики их принципиально не используют.

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

P.S. ДБ!
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39499178
stomsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVСвязи (констрайнты) будут мешать разными способами.
Каким образом FOREIGN KEY CONSTRAINT может мешать?
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39499217
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stomskyLSVСвязи (констрайнты) будут мешать разными способами.
Каким образом FOREIGN KEY CONSTRAINT может мешать?
Ну в принципе они могут мешать, конечно - их проверки небесплатны и увеличивают требуемые ресурсы на обновление данных.
Но реальные кейсы, когда имеет смысл давиться за микросекунды за счет надежности, прозрачности и самодокументируемости системы - они, ээ, редки, весьма редки.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39499226
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Думаю, тут речь не о ресурсах.
Связи мешают девелоперам другим, они требуют дисциплины - с ними ничего так просто не грохнеш не вставиш,
скрипты приходится писать аккуратнее.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39499362
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторих проверки небесплатны и увеличивают требуемые ресурсы на обновление данных
Зато их проверки не напрасны, то есть если не делать ограничения на уровне БД, то эти ограничения надо делать на уровне логики.
зы
На самом деле я дублирую и в БД стараюсь делать и в программе проверки пишу. Но как правильно делать -- я не знаю.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39499411
scf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имхо, зависит от базы.
Доводы за:
- если данные в базе имеют самостоятельную ценность (живут длительное время, используются более чем одним приложением)
- низкая квалификация программистов

Доводы против:
- требуется большая скорость вставки и другие способы оптимизации уже реализованы
- вставка сущности в сложную нормализованную базу может быть делом нетривиальным
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39499444
stomsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскинstomskyпропущено...

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

scfДоводы против:
- требуется большая скорость вставки и другие способы оптимизации уже реализованы
- вставка сущности в сложную нормализованную базу может быть делом нетривиальным
Ну т.е. надо принять за правило, что отказываться от внешних ключей надо там, где уже пожертвовали нормализацией?
Ведь даже если мы откажемся от FOREIGN KEY (как технической возможности РСУБД) мы же не откажемся от бизнес-требования "обеспечить ссылочную целостность данных"? Нас же не устроит, что, например, "Строка заказа" может существовать без привязки к "Заказу"? А если не устроит, то как без FOREIGN KEY будем обеспечивать выполнение этого бизнес-требования?
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39499478
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если не устроит, то как без FOREIGN KEY будем обеспечивать выполнение этого бизнес-требования? Просто напишите логику, где всегда будет шапка у строки заказа. Только и всего.

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

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

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

зы: Тот, кто настаивает на использовании FOREIGN KEY просто мало работал с реальными данными. :)
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39499611
stomsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVА если не устроит, то как без FOREIGN KEY будем обеспечивать выполнение этого бизнес-требования? Просто напишите логику, где всегда будет шапка у строки заказа. Только и всего.
Давай на примере. Например, есть такая структура данных (T-SQL):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
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 не привел к нарушению ссылочной целостности?
Я правильно понимаю, что вместо этого:
Код: sql
1.
INSERT INTO OrderDetails (OrderId, ...) VALUES (123, ...)


надо сделать что-то вроде этого:
Код: sql
1.
2.
3.
4.
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 и пр.)? Заставишь пользователя заносить с бумаги?
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39499632
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно пример такой ситуации? Для меня это как-то диковато...Всё потому что Вы мало работали с данными. Это пройдет... :)


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

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

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

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

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

Все равно нравятся констрайнты ? ОК. Используй их.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39499682
buven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_max,
LSVНиодна тиражная ERP система не использует ФК. И это абсолютно правильно для постоянно эволюционирующих систем.
+1
Простой кейс:
Есть таблица сделок, есть в ней поле ID контрагента, у контрагента есть ссылка на справочник сегментов и т.д.
И таких полей у вас много за 30 с разной глубиной.
И предположим у вас распух EndOfDay. Вы точно определили, что дело не в связанных со сделками дынных, а в их количестве.
И у вас нет специалиста по производительности. Нужно отдавать анализ на строну.
Если у вас везде присутствует FK - вам придется отдавать, помимо таблицы сделок, еще и всю справочную информацию и рассказывать в какой последовательности заносить данные (пусть по каким то причинам бэкап отдать вы не можете).
Если ФК нет и целостность вы обеспечиваете на стороне клиента - вперед и с песней без всей этой гирлянды справочных данных.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39499686
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVКароч есть масса случаев, когда приходится работать с несогласованными данными.
Масса.

LSVЛучше иметь поврежденные данные (кот. вероятно можно поправить), чем вообще ничего не иметь, кроме кучи ошибок вставки.
А тут есть варианты.
Я бы сначала проверил данные на наличие в справочниках, правильное импортировал, а неправильные отправил бы в обработку.
Чем мучаться потом с корректировкой в рабочей базе.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39499703
stomsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVКароч есть масса случаев, когда приходится работать с несогласованными данными.
Лучше иметь поврежденные данные (кот. вероятно можно поправить), чем вообще ничего не иметь, кроме кучи ошибок вставки. Удалить их всегда успеется.
Т.е. когда надо позволить иметь бардак в базе данных (хотя бы кратковременно)? :)
Ну тогда, конечно, возразить нечего :)

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

LSVВсе равно нравятся констрайнты ? ОК. Используй их.
Договорились. :)
Я только за то, чтобы после того, как на вопрос "нужны ли констрейнты" ответить "нет", все-таки добавить "но в этом случае ты рискуешь... и потому тебе придется ...".
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39499711
Бредятина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_maxПрописывать на уровне бд или это старый век?
__________________________________________________________________
THE TRUTH IS OUT THERE
Вы, вероятно, говорите о "реляционной модели данных". В ней никаких связей нет, и прописать то, чего нет,
"на уровне БД" у Вас не получится.
Вероятно, Вы спрашиваете нужно ли ограничения целостности поддерживать на стороне БД, или их можно
поддерживать на стороне приложения. Чем больше ОЦ Вы будете поддерживать на стороне БД, тем качественнее Ваше приложение.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39499728
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183А тут есть варианты.
Я бы сначала проверил данные на наличие в справочниках, правильное импортировал, а неправильные отправил бы в обработку.
Чем мучаться потом с корректировкой в рабочей базе.Сразу видно, что товарисч мало работал с данными... :)
Импортируете неск. разных тхт-файлов. Вроде бы нормальных. Ну отправьте их сначала "на обработку", ога....
Куда именно их отправить ? Как обрабатывать ?
Особенно, если импорт делается интеллектуально, т.е. не все данные реально импортируются в БД (допустим часть из них уже в базе есть).

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

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


ИСЧО РАЗ: Нравятся констрайнты - ОК.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39499743
Очень лысый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прикладные разработчики часто выдают разные гениальные идеи типа "СУБД разрабатывали лохи, щас мы тут целостность данных будем приложением проверять, да и вообще нафиг эту целостность проверять - будет быстрее работать". Каждый обязательно заново изобретёт EAV и удивится, как это эти старые пердуны за 50 лет до такой классной вещи не додумались. И нормализация не нужна: надо всё в одну таблицу и ведь как классно будет: никаких тебе джойнов, всё будет классно и быстро.
Если по теме, то ответ здесь очень простой: если нужен контроль целостности - нужны констрейнты, не нужен - не нужны.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39499761
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень лысыйЕсли по теме, то ответ здесь очень простой: если нужен контроль целостности - нужны констрейнты, не нужен - не нужны.Ответ дилетантский. :)
Констрейнты не в состоянии обеспечить целостность бизнес-логики. Только малую ее часть.
Поэтому они почти никогда не нужны. Целостность обеспечивают другими средствами.
Удаление/вставка записи в БД это всегда сложный бизнес-процесс. Его нельзя применять в лоб. Для этого делают сложные процедуры, которые много чего делают, прежде чем удалить/вставить что-то. Поэтому польза от констрайнт = 1%.

Повторю: ниодна ERP-система не использует констрейнты.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39499777
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVТот, кто настаивает на использовании FOREIGN KEY просто мало работал с реальными данными. :)

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

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

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

Так что правильно заметили.
Если вам не нужны FK, то лучше брать NoSQL.
Это будет быстрее и проще. :-)
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39499789
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FOREIGN KEY вообще никак не мешают работы с данными.Кому как. Я тоже когда-то давно так думал.

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

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

зы: никто внятной их нужности так и не привёл. Ждёмс...
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39499798
stomsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVзы: никто внятной их нужности так и не привёл. Ждёмс...
Лично для меня тут довод один: это еще одна (да, не совершенная, но чертовски эффективная "в пределах своей компетенции") линия защиты от:
1. Своих же собственных ошибок в коде, содержащем логику работы с БД.
2. Ошибок в коде других (написанных не мной) клиентов, содержащих логику работы с БД.
Если ты уверен в своей непогрешимости, то аплодирую стоя...
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39499810
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stomskyLSVзы: никто внятной их нужности так и не привёл. Ждёмс...
Лично для меня тут довод один: это еще одна (да, не совершенная, но чертовски эффективная "в пределах своей компетенции") линия защиты от:
1. Своих же собственных ошибок в коде, содержащем логику работы с БД.
2. Ошибок в коде других (написанных не мной) клиентов, содержащих логику работы с БД.
Если ты уверен в своей непогрешимости, то аплодирую стоя...Я вообще шапки никогда не удаляю. Для логического удаления есть спец. поле.
Абсолютно все удаления (в т.ч. логические) делаются соотв.процедурами, кот. делают много бизнес-проверок с внятными ответами на ошибки. Поэтому случайно удалить важную инфу невозможно.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39499821
stomsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVАбсолютно все удаления (в т.ч. логические) делаются соотв.процедурами, кот. делают много бизнес-проверок с внятными ответами на ошибки. Поэтому случайно удалить важную инфу невозможно.
Т.е. на каждую сущность (читай таблицу) - отдельная процедура "Delete_<Entity>"?
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39499833
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stomskyLSVАбсолютно все удаления (в т.ч. логические) делаются соотв.процедурами, кот. делают много бизнес-проверок с внятными ответами на ошибки. Поэтому случайно удалить важную инфу невозможно.
Т.е. на каждую сущность (читай таблицу) - отдельная процедура "Delete_<Entity>"?Да. Это единый подход, без исключений.
Хранимая процедура. Возвращает причину неудачи, есличо.

Причин может быть пару десятков. И только одну из них можно поймать констрайнтами.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39499851
buven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVзы: никто внятной их нужности так и не привёл. Ждёмс...

Возможно за уши притянуто, но как защита от сапорта, которому позвонил юзер в гневе и попросил удалить вот эту вот строчку срочно, и у которого ночью нет ничего кроме студии и знания, как написать delete from.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39499862
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buvenLSVзы: никто внятной их нужности так и не привёл. Ждёмс...

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

зы: Иногда приходилось править студией в обход процедур. Для заведома некритичных ситуаций. Но такое решение может принять только эксперт. Т.е. я. :)
Ниодна система не защищена на 100% от ручной поломки б/логики.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39499869
дакэта
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
scfИмхо, зависит от базы.
Доводы за:
<>
- низкая квалификация программистов

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

все высказывания ЛСВ о том, что якобы можно обеспечить целостность дешевле -- бред злобного буратины. в развивающемся приложении -- нельзя. в статичном -- после доказательства, что данная статичная реализация ни в одном случае не ломает логическую целостность. (как видим руками туда лезть никак нельзя, никакому ЛСВ -- нарушается статичность)
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500005
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чисто задело, по этому тоже выскажусь...
Есть БД с нормальной структурой, целостностью, прозрачностью и т.д. где все просто и красиво...
Все, что вокруг (как тут говорят - много всякой информации, текстовых файлов и т.д. и т.п.) - это просто помойка и тут каждый решает для себя уже сам - брать в БД только нужное из помойки, делать тупо ссылку на помойку (кому нужно, тот будет ковыряться) или превратить свою БД тоже в помойку...
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500017
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_maxПрописывать на уровне бд или это старый век?
__________________________________________________________________
THE TRUTH IS OUT THERE
Нужно стремиться прописывать все ограничения целостности по возможности на уровне БД и по возможности декларативно.
Действительно, ведь это логические правила, которым должны отвечать данные. Например, не должно быть этапов договоров не относящихся ни к каким договорам. И декларативно прописанные мало того, что горантировано не позволяют нарушить логические ограничения в БД, так они еще и имеют модельное значение: легко понять что есть такое правило, просто просотрев ОЦ.
БД - это ядро ИС - там вся информация. И поэтому ее модель, которая включает ОЦ имеет значение.
А программ мало того, что много - (во всех прописывать одни и те же ОЦ?) , так в них могут быть ошибки (а БД должна оставаться целостной по возможности), в них не видно, сложней править. Да и программы - это типа внешние модели с точки зрения тех или иных пользователей. А модель БД это модель всей информации системы.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500034
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVКуда именно их отправить ? Как обрабатывать ?

В смысле как?
Проверить наличие данных на наличие в справочниках базы слабо.
Стандартная тривиальная проверка.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500064
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА можно пример такой ситуации? Для меня это как-то диковато...
Могу легко дать вам пример, без имён.
Есть программа, купленная на торгах + ТП ежегодная покупаемая. торги, значит выбрано дешёвое предложение. Oracle + java. По сути программа не рабочая, то есть время от времени (чаще, чем раз в месяц) в программе возникают такие проблемы, которые поправить из программы невозможно никак. Бывает, что причину увидеть из программы также невозможно никак. Заказать доработку у программистов -- это до нескольких месяцев, даже когда проблемы критические.
Как выкрутились (я и ТП).
1. Лезем в БД, селектами. Буквально сверяем строки в таблицах, проблемная строка + работающая строка. Ищем какие то несоответствия.
2. Когда находим (вот в этом поле надо false убрать) рассуждаем зачем там false по закону он или по логике, как его убрать из программы, как он там очутился и т.п.
3. Затем если из программы это сделать никак нельзя -- убираем их update или даже удаляем строки delete. Мне и ТП значительно легче править БД без всяких глупостей, типа ФК. Про риски я промолчу, это кошмар!
---
При этом все же понимают, что это не правильно! Просто денег мало, ищем самый быстрый способ. Или единственно реально выполнимый.
Какие ещё нужны аргументы?
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500072
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azsxМогу легко дать вам пример
[...]
Какие ещё нужны аргументы?

Если Ваш пример сформулировать одной фразой, он будет звучать так - "в кривой и глючной системе жить без констрейнтов проще и легче".
Ну, ээ, возможно :) Но, согласитесь, как аргумент в споре "проектировать ли систему, опираясь на констрейнты или нет" - он звучит слабовато.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500078
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_maxПрописывать на уровне бд или это старый век?
__________________________________________________________________
THE TRUTH IS OUT THERE

нужно
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500079
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот Матроскин,

+

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

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


мнение отдельно неправильного индивидуума неинтересно
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500081
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stomskyLSVСвязи (констрайнты) будут мешать разными способами.
Каким образом FOREIGN KEY CONSTRAINT может мешать?

говорят, плохим танцорам даже шары мешают...
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500083
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257Думаю, тут речь не о ресурсах.
Связи мешают девелоперам другим, они требуют дисциплины - с ними ничего так просто не грохнеш не вставиш,
скрипты приходится писать аккуратнее.

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

ну, ок, если тебе они мешают, как ты у нас работать будешь, когда из у нас в базе несколько тысяч?
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500087
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stomsky Но я ни разу не слышал серьезных аргументов в продолжение разговора об этих тормозах.


потому что их просто нет.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500089
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор"в кривой и глючной системе жить без констрейнтов проще и легче"
Моё мнение, что в программе нужны связи между таблицами, ключи первичные, тригеры. Процедурами для каких либо действий я сам не пользуюсь (но я любитель, пишу только для себя).
Верное замечание, когда система кривая и глючная, когда вопреки всякой логике какие то левые личности прут на БД с рутом поправить чо то по быстрому -- тогда удобно без всяких проверок. Но это огромный риск и явно не верное решение.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500096
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПункты 1-3 можно автоматизировать и положить начало созданию своей надстройки контроля информации.
Именно так я и делаю неспешно. К сожалению в мире есть два нормальных языка, на пхп http://www.sql.ru/forum/1261406/kak-podkluchitsya-k-baze-oracle у меня подключиться просто не получилось к БД, а на fpc https://www.devart.com/odac/download.html компонент платный и дорогой очень. Приходится учить java.
зы
извините, фокспро и vb6 также прекрасны, но они мертвы.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500126
stomsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVstomskyТ.е. на каждую сущность (читай таблицу) - отдельная процедура "Delete_<Entity>"?Да. Это единый подход, без исключений.
Хранимая процедура. Возвращает причину неудачи, есличо.

Причин может быть пару десятков. И только одну из них можно поймать констрайнтами.
А INSERT-ы и UPDATE-ы тоже в хранимых процедурах? Ведь ими тоже ссылочную целостность можно нарушить...
Я почему так подробно интересуюсь, - есть мнение, что SQL в качестве языка для реализации сложной бизнес-логики слишком неудобен. Поэтому бизнес логику лучше выносить на уровень сервисов, которые пишутся на JAVA, C# и прочих Питонах. А ты, получается, возводишь защитную стену их хранимок на этом самом SQL...
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500128
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Верное замечание, когда система кривая и глючная....таких систем с т.з. канонического проектирования - 90%.
В тиражных системах - тож самое или даже хуже.

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

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

Выходит, констрайнта как "защита от дурака" - слабая мера.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500137
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторКак раз сама система может работать очень даже ОК. Руками приходится лесть, когда жизненно необходимо сделать некое нештатное действие. Ради него эту систему переделывать не будут.
У нас с Вами просто мнение разное. В excel мне никогда не понадобилось лезть в файлы xls, чтобы что то поправить нотепадом. и затем вновь открыть этот же xls этим же excel'ом. Я слышал, что у excel бывали проблемы, правили баги, но сам не сталкивался. В очень многих популярных тиражируемых программах я также никогда не думал о коде или БД.
А вот некоторые программы в РФ кривые. Значит левым людям приходится лезть в БД с select'ами. Иначе никак не разобраться чо не так.
А вот некоторые программы в РФ глючные. Значит левым людям приходится лезть в БД с delete'ами update'ами. Иначе никак не исправить проблемы данного софта.
При этом можно заказать доработку, от 3 месяцев и выше, просто нереально по срокам.
зы
Если согласно Вашему опыту таких программ 90% -- то просто ужас. Странно, что программисты ваще находят время на форумах писать, им работать надо.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500146
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чем больше таких утверждающих и дискутирующих, тем лучше - мне гарантирована востребованность на рынке труда.

"Танцуйте, ребятки, танцуйте, и ваш нос вырастет длинным-длинным. А мы распилим его на дубинки."
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500147
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторСтранно, что программисты ваще находят время на форумах писать, им работать надо.
Хотя так подумал, логично. Платят ли программистам за то, чтобы они программы безглючные писали в РФ?
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500162
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если согласно Вашему опыту таких программ 90% -- то просто ужас. Это не ужас. Это реалии жизни.
Не только в БД, а вообще в любой сфере деятельности. Везде приходится отступать от неких правил, чтобы преодолеть ограничения, наложенные этими правилами.

зы: ради веселья почитайте рассказик "хакер в столовой". Есть неск. его вариантов.
Пля....констрайнтами они данные собрались защищать.......
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500169
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЭто не ужас. Это реалии жизни.
LSV, хорошо, поясните, пожалуйста, любителю.
1. Почему Ваши реалии не работают для excel?
2. В чём негатив? Реальная программа кривая, единственный способ исправить -- это удалить строку в БД. Пусть левый человек разберётся в зависимостях, сперва удалит или исправит зависимые записи в других таблицах, затем удаляет в своей таблице напрямую. Что не так?
То есть без всех этих проверок, которые пишут проектировщики системы, мне, левой личности, случайно испортить базу очень легко. А проверки чуть чуть, но спасали бы от бездумных delet'ов.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500208
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azsxавторЭто не ужас. Это реалии жизни.
LSV, хорошо, поясните, пожалуйста, любителю.
1. Почему Ваши реалии не работают для excel?
2. В чём негатив? Реальная программа кривая, единственный способ исправить -- это удалить строку в БД. Пусть левый человек разберётся в зависимостях, сперва удалит или исправит зависимые записи в других таблицах, затем удаляет в своей таблице напрямую. Что не так?
То есть без всех этих проверок, которые пишут проектировщики системы, мне, левой личности, случайно испортить базу очень легко. А проверки чуть чуть, но спасали бы от бездумных delet'ов.1. Не понял вопроса.
2. Реальная может быть и не кривой. Но иногда нужен быстрый результат, кот. достижим только прямым апдейтом.
При разработке системы часто приходится манипулировать данными в целях отладки, поиска ошибок и т.д. При этом иногда приходится кратковременно нарушать целостность. Чтобы проверить свою систему ловли ошибок или просто проверить работу системы с комбинациями разных данных. И так далее до бесконечности.......

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

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

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

В хорошо спроектированной системе нештатное удаление/искажение важных данных невозможно. Констрайнты просто никогда не сработают.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500240
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSV, извините, что задаю вопросы один по одному, просто хочу для себя разобраться.
автор1. Не понял вопроса.
Смотрите, мне никогда не надо делать следующую манипуляцию: а) закрываю книгу test.xls (то есть файл закрыт в программе excel); б) открываю файл test.xls для редактирования в notepad++; в) снова открываю файл test.xls в программе excel и получаю благодаря предыдущему редактированию какие то плюсы, например, что вообще заработала какая то функция в файле.
То есть excel -- самодостаточная программа. Если не было физических ошибок при записи книги, то ничего вручную там в файле не наделаешь такого, чего нельзя сделать из excel.
---
Вы пишите
авторПри разработке системы часто приходится манипулировать данными в целях отладки, поиска ошибок и т.д. При этом иногда приходится кратковременно нарушать целостность.
При этом:
авторВ хорошо спроектированной системе нештатное удаление/искажение важных данных невозможно. Констрайнты просто никогда не сработают.
То есть следуя прочитанному разработчику проще без constraint, но нормальной системе нужны constraint.
а) обратите внимание, я не со стороны разработчика, а со стороны ТП смотрю. Мне проще и легче, что всяких правил и ограничений в БД нет, но зато испортить что нибудь мне также проще. Было бы логичнее если правила заранее задаст разработчик на уровне БД. Нет?
б) у меня в голове не укладывается, что там разработчик хочет удалить вопреки бизнес логике и посмотреть что получится?
Простой пример, 2 таблицы, одна фио + id город (внешний ключ); вторая id + город. Обе заполнили данными, затем разработчик хочет удалить город delete в sql. Ему БД говорит, нельзя. Делаем те же таблицы, только внешнего ключа нет, так из приложения id узнаём. Снова удаляем город в sql и что разработчик увидит? Как поведёт себя программа, если какой то специалист ТП зная пароль от БД сам удалит город на который есть связи?
В чём ваще мысль такого удаления?
И почему разработчик, зная свою систему не может тестово сперва очистить свзяи, а затем удалить город? Он то свою БД знает.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500254
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Как-о в старой версии Экселя нотпадом грохал пароль. Открылось норм. :)

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

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

Мне кажется я и так подробнейше описал почему констрайнты могут мешать в реальной повседневной работе....
По моему опыту пользы от них меньше, чем вреда. Чисто ИМХО.
Далее впустую дискутировать не хочу.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500264
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВ некот. случаях это придется делать 10-100 раз в день. Ну попробуй удали город (со всеми связями), а потом опять верни все назад. И так неск. раз. :)
Ясно, спасибо.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500301
Фотография Сид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSV1. Как-о в старой версии Экселя нотпадом грохал пароль. Открылось норм. :)

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

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

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

Да, лучше не пишите больше. И уходите из профессии, пока не поздно.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500369
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СидДа, лучше не пишите больше. И уходите из профессии, пока не поздно.Сына, не тебе решать. :)
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500447
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stomskyЯ почему так подробно интересуюсь, - есть мнение, что SQL в качестве языка для реализации сложной бизнес-логики слишком неудобен. Поэтому бизнес логику лучше выносить на уровень сервисов, которые пишутся на JAVA, C# и прочих Питонах.


Так на Java бизнес-логику ещё хуже писать, чем на SQL...
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500448
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVНапример удобно хранить пустую ссылку как = 0, а не null. Но тогда констрайнту не наложишь.


А если это строка или дата, как пустую ссылку хранить ?
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500449
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiЧем больше таких утверждающих и дискутирующих, тем лучше - мне гарантирована востребованность на рынке труда.

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

Во. Я тоже тешу себя этой мыслью...
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500546
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле думаю LSV сейчас просто уссывается над всеми...
Типа ну-ну... пилите Шура, пилите - они золотые...
Он просто нашел одного-двух денежных клиентов/лохов, сделал им пару помоек и им теперь ни дыхнуть ни пёрднуть без него, только и остается, что бабло слюнявить...
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500547
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Успокаивает, что это в Киеве... пусть даже это в гос структуре...
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39500634
s_ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmagНа самом деле думаю LSV сейчас просто уссывается над всеми...
Типа ну-ну... пилите Шура, пилите - они золотые...
Он просто нашел одного-двух денежных клиентов/лохов, сделал им пару помоек и им теперь ни дыхнуть ни пёрднуть без него, только и остается, что бабло слюнявить...
Думаю, все проще - 1С
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39501087
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivLSVНапример удобно хранить пустую ссылку как = 0, а не null. Но тогда констрайнту не наложишь.
А если это строка или дата, как пустую ссылку хранить ?Какие однако дилетантские вопросы :).
Строка = пустая строка (не null),'-', '?', 'пусто' или что-то типа того на усмотрение разработчика.
Дата = некое значение, принятое в системе за "пусто", н-р 2000-01-01 или 1900-01-01. Это для примера.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39503416
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmagУспокаивает, что это в Киеве... пусть даже это в гос структуре...

Проф. безграмотность везде обидно видеть. Киев не исключение.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39503419
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVMasterZivпропущено...
А если это строка или дата, как пустую ссылку хранить ?Какие однако дилетантские вопросы :).
Строка = пустая строка (не null),'-', '?', 'пусто' или что-то типа того на усмотрение разработчика.
Дата = некое значение, принятое в системе за "пусто", н-р 2000-01-01 или 1900-01-01. Это для примера.

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

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

1) классно, а что если завтра придёт клиент, и захочет завести документ именно за дату 2000-01-01 или 1900-01-01 ?
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39503518
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivLSVпропущено...
Какие однако дилетантские вопросы :).
Строка = пустая строка (не null),'-', '?', 'пусто' или что-то типа того на усмотрение разработчика.
Дата = некое значение, принятое в системе за "пусто", н-р 2000-01-01 или 1900-01-01. Это для примера.

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

1) классно, а что если завтра придёт клиент, и захочет завести документ именно за дату 2000-01-01 или 1900-01-01 ?0) тогда принимаем за "пусто" что-то другое из вышеперечисленного.
1) за "пусто" надо принимать значение, кот. никогда не появится в системе.
Многие СУБД вообще не готовы для штатного хранения исторических дат н-р 332г. до н.э. И чо теперь ?
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39503673
Фотография Alex_496
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для россейских заднеприводных манагеров и раздолбаев программиздов ни FK не нужны, ни ER диаграммы, ни много чего еще. Ибо тяп-ляп - и в продакшн.

Когда будут много миллионные иски к компаниям и штрафы для работников, тогда и понадобится комплексный подход к проектам
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39504545
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVзы: Тот, кто настаивает на использовании FOREIGN KEY просто мало работал с реальными данными. :)
14 лет - это мало? Когда ждать просветления? :)
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39504789
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANALSVзы: Тот, кто настаивает на использовании FOREIGN KEY просто мало работал с реальными данными. :)
14 лет - это мало? Когда ждать просветления? :)"Мудрость не всегда приходит с возрастом. Часто возраст приходит один" (с) :)

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

При этом, заметьте, я не сказал, что использование констрайнт "неверно" или типа того. Это просто одна из необязательных возможностей. Нравится - пользуй, не нравиццо - не пользуй.
Я из тех, кому не нравиццо. Аргументы я привел.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39504809
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSV,

практически все Ваши аргументы опираются на задачи, когда наличие foreign key никак не мешает их успешному решению, плавали - знаем :)
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39504814
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANALSV,

практически все Ваши аргументы опираются на задачи, когда наличие foreign key никак не мешает их успешному решению, плавали - знаем :)Решить можно практически любую задачу. Весь вопрос в цене. :)
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39504822
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVskyANALSV,

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

Зачем же платить большую цену за свой велосипед? :)
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39504838
Фотография DirksDR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVНиодна тиражная ERP система не использует ФК.
Почему-то, никто не оспаривает это утверждение. Неужели это правда?
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39504843
s_ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DirksDRLSVНиодна тиражная ERP система не использует ФК.
Почему-то, никто не оспаривает это утверждение. Неужели это правда?
Распространенные - не используют. К сожалению.
Лично я считаю, что FK лучше использовать, как минимум в рамках одного модуля.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39504923
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DirksDRLSVНиодна тиражная ERP система не использует ФК.
Почему-то, никто не оспаривает это утверждение. Неужели это правда?
Когда разрабатывал ERP, то это была заказная разработка под крупную нефтяную компанию (100 серверов по всей России).
Так вот там данных было до фига, а задач по работе с ними дофигища.
И ограничения FOREIGN KEY не мешали, а только не хило снижали риски того, что какой-то нерадивый админ в Ангарске ручками в базу полез и похерил что-нибудь.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39504928
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVMasterZivпропущено...


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

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

Я этим как бэ намекал, что сначала ты весело живёшь, а потом наступает то самое "никогда".
Именно для этого придумали NULL, документированный и хорошо всем разработчикам известный.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39504929
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANALSVзы: Тот, кто настаивает на использовании FOREIGN KEY просто мало работал с реальными данными. :)
14 лет - это мало? Когда ждать просветления? :)

Ещё лет 10-20 наверное...
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39504932
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVзы: Никто так толком и не объяснил, для чего ему констрайнты ? От какого рода угроз они спасают ?


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

Да, если тебе насрать на твои данные, констрейнты можно не использовать...
80% WEB проектов так и делают.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39504933
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DirksDRLSVНиодна тиражная ERP система не использует ФК.
Почему-то, никто не оспаривает это утверждение. Неужели это правда?

Так что с бредом-то спорить...
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39504937
s_ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivDirksDRпропущено...

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

Так что с бредом-то спорить...
А какие используют?
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39504973
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivКонстрейнты вообще спасают от нарушения целостности данных.
Констрейнты FK -- от нарушения ссылочной целостности данных.
Констрейнты CHECK -- от нарушения доменной целостности данных
Констрейнты UNIQUE, PK -- от нарушения уникальности ключа.ок. Почему может наступить нарушение целостности ? Это когда ручками туда залесть ? Кто и зачем ? :)

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

зы: обсуждаем только ссылочную ц-сть. Уникальность ключа использую постоянно, исличо.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39505005
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVПочему может наступить нарушение целостности ?
Ссылочная целостность - Причины нарушений
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39505007
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVКак наложить констрайнту, если в поле может находится ссылка на неск. типов документов (связка: тип док./ключ) ?
Хм. Просто ключ.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39505016
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANALSVПочему может наступить нарушение целостности ?
Ссылочная целостность - Причины нарушений Не надо давать эти баянные ссылки. Я хочу, чтоб человек ответил своими словами. :)
В хорошо спроектированной системе не будет срабатывания СЦ. Удаление записей с СЦ вообще должно быть недоступно в Б/Л.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39505038
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSV,

1. Можно генерировать триггеры (а так хреново, что нельзя сослаться на view)
2. Обычно с одной БД работают разные "системы", потому нельзя положиться на "хорошее проектирование"
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39505042
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVВ хорошо спроектированной системе...
Да, да. Без технического долга и т.п. :)

Ещё скажите Вы ни разу рефакторингом не занимались, тогда Вы мало ещё работали с системами :)
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39505043
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVУдаление записей с СЦ вообще должно быть недоступно в Б/Л.
С чего это вдруг?
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39505047
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosОбычно с одной БД работают разные "системы", потому нельзя положиться на "хорошее проектирование"
+100500

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

...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39505048
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

а с того, что как раз при проектировании не смогли сделать все варианты, а сделали:
удаление сложно - потому не будем делать!!!
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39505051
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosskyANA,

а с того, что как раз при проектировании не смогли сделать все варианты, а сделали:
удаление сложно - потому не будем делать!!!
То есть импортировать к примеру пользователь данные может, а удалить нет? Удобно, чё :)
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39505059
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAViPRosskyANA,

а с того, что как раз при проектировании не смогли сделать все варианты, а сделали:
удаление сложно - потому не будем делать!!!
То есть импортировать к примеру пользователь данные может, а удалить нет? Удобно, чё :)
да просто все зависит от "системы"
1. "система" фиксирует не большой поток данных (ручной ввод че нить или еще какой поток) (тут можно и не удалить считают)
2. "система" фонтанирует данными (какие то алгоритмы генерируют большие потоки данных - например, версии расписаний работы завода, аэропорта,..) (тут уж не удалить никак не получится)
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39505088
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANALSVУдаление записей с СЦ вообще должно быть недоступно в Б/Л.
С чего это вдруг?Неправильно выразился. ... Речь про срабатывание защиты с СЦ.

Не должно быть штатной возможности удалить запись, на кот. есть ссылка.
Причем именно Б/Л-ссылка, т.е. в т.ч. и те случаи, кот. невозможно накрыть с помощью СЦ.
Именно поэтому СЦ малоценна, т.к. есть многочисленные случаи, когда ее нельзя применить.
СЦ - полумера.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39505115
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRosда просто все зависит от "системы"
Именно. Вот только камрад LSV этого почему-то не понимает, хотя намекает на то, что имеет достаточно большой опыт работы с данными.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39505118
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVНе должно быть штатной возможности удалить запись, на кот. есть ссылка.
Это почему вдруг?

К примеру нашей системой пользуются более 20000 некоммерческих организаций.
И все они загружают контакты своих мемберов. И с этими контактами в процессе жизни организации связаны какие-то данные.
Но достаточно большая часть мемберов - это люди пожилого возраста.
И вот не стало контакта. Почему не должно быть штатной возможности удалить запись о нём из системы?
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39505144
buven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANALSVНе должно быть штатной возможности удалить запись, на кот. есть ссылка.
Это почему вдруг?

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

Эмм... А что будете делать, когда вам позвонит пользователь в слезах, и попросить как то восстановить результат отработки штатного механизма удаления, который был по ошибке применен не к тому контакту?
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39505171
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buven,

это сооовсем другой вопрос, никакого отношения к удалению не имеющий
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39505198
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buvenskyANAпропущено...

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

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

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

Хотя когда вот писали ERP, то был такой прецедент, после чего у записей появился признак активности и они на самом деле не удалялись, а делались не активными.
Но это уже другая компания, другая система, другие данные, другие требования.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39505199
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И это кстати пример того, что не надо опыт разработки вашей системы переносить на все остальные.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39505317
kaldorey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бывают случаи, когда у тебя есть небольшое окно, в которое надо успеть протащить данные из оперативной системы в хранилище, некогда разбираться сейчас, загрузил ли ты товары к этим покупкам или нет из мдм. А вот потом после трансформаций/проверок в новые ухоженные объекты можно разложить уже с констрейнтами.
А бывает, пытаются создать уполномоченного к еще не созданному юрлицу. Оно, конечно, всегда создается раньше, но в этот раз разработчики какого-нибудь очередного микросервиса в один момент положили узел шины, и понеслось. Я к тому, что в БД нельзя доверять никому, даже своему собственному надприложению с бизнес-логикой. А поменяют там что, да ошибку допустят - лучше не дать испоганить данные, чем потом разгребать, особенно если это повлечет штрафы.
Ну и напоследок - бывает так, что тебе приходится делать что-то неествественное с данными в своей базе совсем не по своей вине. Очередное приложение очень важно для бизнеса, но вот не предусмотрели они, что у тебя может не быть еще в базе значения, например, из налоговой, ну не прислали, хотя доки уже тут, клиенты негодуют. Давай ты сделай быренько, чтобы им просто нужные значения вернулись, потом удалишь. АПИ и скрипты на все случаи не запасешься в этом меняющемся мире, поэтому вполне возможно что даже ты, о мудрый, не всегда правильно подчистишь или, наоборот, добавишь, а вдруг кто новенький пришел, найди потом, где напортил.

Отказываюсь констрейнты, в том числе СЦ, делать только при уважительных причинах. Но заполнять проверками типа ключевания инн, имхо не стоит, это уже к бизнес-логике больше.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39505432
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANALSVНе должно быть штатной возможности удалить запись, на кот. есть ссылка.
Это почему вдруг?

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

Тож самое - товары. Товар когда-то продавался, но сейчас его уже нет. Зачем его физически удалять из справочника ?
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39505544
buven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAИ это кстати пример того, что не надо опыт разработки вашей системы переносить на все остальные.

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

Зачем его ограничивать, если это его данные и он суперадмин, или член совета директоров?
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39505550
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buven но особого профита от них не жди, и будь готов к возможному геморрою, связанному только с ними.

Не "профит" это - а нужда.
Геморрой создает не СЦ, а неумение проектировать большие системы.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39505551
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы ещё скажите, что всю электронную переписку храните за последние 10 лет :)
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39505556
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buvenskyANAИ это кстати пример того, что не надо опыт разработки вашей системы переносить на все остальные.

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

Если у Вас с этим нет проблем, или Вы используете какие-то там признаки, или триггера, или специальным кодом обкладываете, так флаг Вам в руки :)
А мы вот используем родной механизм СУБД и проблем с ним не встречали и не встречаем.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39505586
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANALSVНу очевидный же ответ: такая запись должна иметь признак "неактуален".
Может иметь такой признак, а может иметь признак "архивная", или ещё какой, но при этом пользователь хочет иметь возможность её удалить с корнями.
Зачем его ограничивать, если это его данные и он суперадмин, или член совета директоров?ЯННП. К чему этот вопрос ? Стёб такой ?
Есть правила построения ИС. И они не смотрят, директор это или уборщица.
Чисто технически можно и такое предусмотреть. Ничто особо не мешает.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39505835
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVЕсть правила построения ИС.
О каких правилах речь? Ссылку дайте.

А вопрос к тому, что пользователи разные бывают и принято одним давать минимум функционала, а другим максимум.
Вы с этим не согласны?
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39505932
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAО каких правилах речь? Ссылку дайте.ОК.
тынц :)
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39505938
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVskyANAО каких правилах речь? Ссылку дайте.ОК.
тынц :)
Что-то похоже на то, что Вы юлите. Где конкретно Дейт пишет, что не должно быть штатной возможности удаления в Б/Л?
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39505940
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот тому, что Вы отрицаете, он посвятил целую главу :)
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39506079
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAЧто-то похоже на то, что Вы юлите. Где конкретно Дейт пишет, что не должно быть штатной возможности удаления в Б/Л?существенно дополню: удаления с нарушением СЦ .
По хорошему - не должно быть. Но если "очень нужно", то можно. :) Главное помнить про это.
Всё, что пишут всякие Дейты, Чены и прочие Конолли это не более чем теория и рекомендации.
В любой более-менее большой инф. системе можно найти отход от канонов. Это нормально.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39506123
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVskyANAЧто-то похоже на то, что Вы юлите. Где конкретно Дейт пишет, что не должно быть штатной возможности удаления в Б/Л?существенно дополню: удаления с нарушением СЦ .
По хорошему - не должно быть.Да, не должно быть. И ограничения СЦ это гарантируют.

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

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

LSVВ любой более-менее большой инф. системе можно найти отход от канонов. Это нормально.С этим не спорю. Но сложилось впечатление, что Вы свой "отход от канонов" выдаёте за истину в первой инстанции :)
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39506141
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAС этим не спорю. Но сложилось впечатление, что Вы свой "отход от канонов" выдаёте за истину в первой инстанции :)Впечатление складывается у не в меру впечатлительных. :)
Выдаю не за истину в первой инстанции, а всего лишь за бест-практис с описанием случаев применимости. И не более.

И не надо ничего дополнительно помнить, документировать, кодить.Как это не надо ? Надо, бро... Не везде можно установить СЦ, поэтому надо всегда помнить, где она есть, а где нет.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39506156
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVskyANAС этим не спорю. Но сложилось впечатление, что Вы свой "отход от канонов" выдаёте за истину в первой инстанции :)Впечатление складывается у не в меру впечатлительных. :)Шутка на 2 балла :)

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

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

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

А "не везде можно" - это уже к вопросам проектирования и умению пользоваться.
Повторюсь, что те примеры, которые Вы приводили не тянут на "не везде можно".
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39506202
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAесли использовать штатный механизм СУБДЭтого механизма для сохранения целостности Б/Л в общем случае недостаточно.
Поэтому контроль целостности делается не на уровне механизмов БД, а на уровне логики конкретной системы. Реализации могут быть разными. Но чем меньше способов контроля - тем лучше. Тем легче ими управлять.

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

Я не знаю ниодной известной тиражной системы, где это применяется.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39506672
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читаю про "не удалять совсем" или "удалять вопреки всякой логике" и удивляюсь ентерпрайз разработке всё больше и больше.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39506676
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"удалять вопреки всякой логике" - это Вы о чём?

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

У меня это было реальное требование во времена разработки АИС ТПС, после того как в одном из регионов один из операторов удалил не те данные.
Правда звучало оно не "не удалять совсем", а "на самом деле не удалять, а помечать как неактивные".
Для оператора это выглядело как удаление, а пользователи с более широкими правами могли как восстановить, так и "удалять совсем".
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39506678
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVskyANAесли использовать штатный механизм СУБДЭтого механизма для сохранения целостности Б/Л в общем случае недостаточно.
О чём конкретно речь? Можете пояснить, что за целостность бизнес логики такая?

LSVЯ не знаю ниодной известной тиражной системы, где это применяется.Хм, Мастер-Тур. Очень даже известная тиражная система в своей нише.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39506679
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAВы ещё скажите, что всю электронную переписку храните за последние 10 лет :)
Переписка, бухгалтерские проводки, логи с электронной проходной.
С 1995г храним . . .
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39506689
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSV,

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

Это про SAP у которого ссылочная целостность не используется.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39506701
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор"удалять вопреки всякой логике" - это Вы о чём?
Простой пример. Две таблицы, 1 табл. поля: фио + город; 2 табл. поля: фирма + город. Город может поменять название или объединится с другим (удалиться).
По моему мнению контроль на уровне одинаковости названий городов нужен. Третья таблица - города, внешний ключ с двух таблиц. И null для города недопустим.
Причина, так как админ софта "на местах" убъётся, но заставит дать ему права root от БД, так как он ж программист и sql знает. И он обязательно найдёт причины по которым надо править и удалять города напрямую прямо в таблице и обязательно в первом варианте не подумает, что надо править не только в таблице с фио, но и в таблице с фирмами.
Я могу понять зачем вы это делаете на уровне разработчиков (сам любитель).
В фирме, которая пишет софт эффектный менеджер, который заставил внедрить в софт фичи "шьёт, жнёт и на дуде играет" и БД и логика в программе очень усложнена. Также программистам платят мало, они бегут как тараканы. Нафиг в такой фирме усложнять sql логику, пусть админы правят всё что хотят, типа им же хуже.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39506717
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183skyANAВы ещё скажите, что всю электронную переписку храните за последние 10 лет :)
Переписка, бухгалтерские проводки, логи с электронной проходной.
С 1995г храним . . .
А Вы лично тоже храните свою переписку за последние 10 лет? Любой спам?
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39506720
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azsxавтор"удалять вопреки всякой логике" - это Вы о чём?
Простой пример. Две таблицы, 1 табл. поля: фио + город; 2 табл. поля: фирма + город. Город может поменять название или объединится с другим (удалиться).
По моему мнению контроль на уровне одинаковости названий городов нужен. Третья таблица - города, внешний ключ с двух таблиц. И null для города недопустим.
Причина, так как админ софта "на местах" убъётся, но заставит дать ему права root от БД, так как он ж программист и sql знает. И он обязательно найдёт причины по которым надо править и удалять города напрямую прямо в таблице и обязательно в первом варианте не подумает, что надо править не только в таблице с фио, но и в таблице с фирмами.
Я могу понять зачем вы это делаете на уровне разработчиков (сам любитель).
В фирме, которая пишет софт эффектный менеджер, который заставил внедрить в софт фичи "шьёт, жнёт и на дуде играет" и БД и логика в программе очень усложнена. Также программистам платят мало, они бегут как тараканы. Нафиг в такой фирме усложнять sql логику, пусть админы правят всё что хотят, типа им же хуже.
Извините, но ни фига не понял. Такое впечатление, что Вы просто эмоции выплёскиваете :)
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39506725
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azsxИ он обязательно найдёт причины по которым надо править и удалять города напрямую прямо в таблице и обязательно в первом варианте не подумает, что надо править не только в таблице с фио, но и в таблице с фирмами.
Вот тут (если использовать ограничения СЦ) ему СУБД скажет, что удаление не возможно, так как есть ссылка на город из таблицы с фирмами.

Но повторюсь, что я так и не понял при чём тут "удалять вопреки всякой логике". Вроде логика ясна: надо "склеить" две записи об одном городе в одну.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39506734
azsx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВот тут (если использовать ограничения СЦ) ему СУБД скажет, что удаление не возможно, так как есть ссылка на город из таблицы с фирмами.
Именно поэтому в своих любительских программах я ограничения ставлю. Но я читаю, что некоторые профессионалы ограничения на уровне СУДБ не ставят и в пример, что ограничения надо ставить только на уровне логике софта приводят названия софта, где такого контроля нет. Я ограничения ставить буду, но уже не уверен, что прав.
авторНо повторюсь, что я так и не понял при чём тут "удалять вопреки всякой логике". Вроде логика ясна: надо "склеить" две записи об одном городе в одну.
Логика, если город менять, то в обоих таблицах. Если есть внешний ключ, то замена сразу в обоих таблицах будет. А если разработчику внешние связи только мешают, то админ на месте может "вопреки всякой логике" sql запросом в одной таблице поменять название города, а во второй забыть.
Если таких связей десятки, они не текст, а на числа и хеши -- то ограничения на уровне БД (по моему мнению) прямо спасение перед совершением непоправимой ошибки.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39506735
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О чём конкретно речь? Можете пояснить, что за целостность бизнес логики такая?На 1 и 2 странице треда писал раза три.

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

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

Также проверка возвращает вменяемое сообщение об ошибке (паруззке и со значениями ключей), что невозможно при срабатывании СЦ_СУБД.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39506753
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSV,

а можно глупый вопрос: почему Вы это называете "целостность"?
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39506769
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANALSV,
а можно глупый вопрос: почему Вы это называете "целостность"?Что "это" ?

Целостность -> Непротиворечивость, Правильность, Соответствие установленным правилам.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39506779
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVskyANALSV,
а можно глупый вопрос: почему Вы это называете "целостность"?Что "это" ?

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

Очевидно, что целостность данных - это немного из другой оперы. И ясно, что ограничения СЦ не могут обеспечить правильность БЛ.
ИМХО какое-то растекание мыслью по древу. Предлагаю закончить дискуссию :)
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39507169
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVЦелостность -> Непротиворечивость, Правильность, Соответствие установленным правилам.

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

Ну и бред канеш..
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39507195
Фотография mr_max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот битрикс не использует почему то стандартные средства для целостности.
...
Рейтинг: 0 / 0
Нужно ли связи в таблицах в sql
    #39507212
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не читал весь топик.

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

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

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

Не идите на поводу у дураков. Они начали изучение БЗ с хадупа
а вы - начните с Дейта или Кодда. Знание всегда будет ценнее
незнания или глупости.
...
Рейтинг: 0 / 0
131 сообщений из 131, показаны все 6 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Нужно ли связи в таблицах в sql
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]