powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Отсутствие PK, FK....
69 сообщений из 69, показаны все 3 страниц
Отсутствие PK, FK....
    #35710348
Серж
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!

На новой работе выяснилось что база данных (отнюдь не маленькая как по кол-ву объектов, так и по объемам) построена без PK, FK, все поля NULL. Т.е. перв. ключи есть, но не у всех таблиц и они не заданы декларативно. Есть уникальные индексы на эти поля. ФК тоже присутствуют по факту, но также декларативно не заданы. Все поля нуловские. Ограничений на конкретные столбцы нет. Часто денормализация.

Я всегда приводил к 3НФ (без фанатизма), создавал суррогатные ПК (даже у тех таблиц, которым они сейчас казалось бы и не нужны), всегда использовал ссылочную целостность. Всегда старался создавать NOT NULL поля, чтобы избегать постоянных IS NOT NULL/ISNUL()... Кратко - я опирался на эти ограничения и на их основе строил ПО.

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

Вот и сталкивается мой успешный опыт с местным успешным опытом :-)

Собственно в этой теме я не хочу устраивать спор -- как правильно. Очевидно, что можно построить надежную систему и без единого constraint'а.


Мне интересно на сколько часто встречаются системы построенные на таких принципах?

Отказались ли от них в силу неудобств или разработка так и продолжается?

Какого типа задачи решались (у нас в основном массированная закачка из других систем и аналитика)?

Были эти системы централизованные или распределенные (имеются в виду серверная часть)?

И дает ли это ощутимый выигрыш в производительности (за счет отсутствия проверок ссылочной целостности)?
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35710398
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в исторической БД сложно иметь PK и FK.

а для аналитических приложений ограничения скорее вредны, ведь данные на входе могут быть некачественные.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35710443
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
explaв исторической БД сложно иметь PK и FK.

а для аналитических приложений ограничения скорее вредны, ведь данные на входе могут быть некачественные.о-о
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35710450
Фотография Ёш
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mysql с движком MyISAM просто не поддерживает ссылочную целостность, а эта БД достаточно распространена

авторНа новой работе выяснилось что база данных (отнюдь не маленькая как по кол-ву объектов, так и по объемам) построена без PK, FK, все поля NULL.может быть они её портировали с mysql без изменений ? :)


--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35710486
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Серж пишет:

> Мне интересно на сколько часто встречаются системы построенные на таких
> принципах?

т.е. насколько часто встречаются безграмотно разработанные системы ?
Ну, на столько же, насколько часто встречаются безграмотные люди.
Бывает.

> Отказались ли от них в силу неудобств или разработка так и продолжается?

вы можете постепенно добавлять первичные ключи и FK, они ничему не помешают,
если данные реально в порядке. PK можно делать из одного из UK, собственно
разницы между ними особенно и нет.

> Какого типа задачи решались (у нас в основном массированная закачка из
> других систем и аналитика)?

Это абсолютно неважно, какие задачи решаются.

> Были эти системы централизованные или распределенные (имеются в виду
> серверная часть)?

Тоже неважно.

> И дает ли это ощутимый выигрыш в производительности (за счет отсутствия
> проверок ссылочной целостности)?

Иногда FK не применяют именно из-за невозможности их применения
в силу низкой производительности. Но если на FK в дочерней таблице
строить индекс, то всё в общем-то в порядке. Ощутимого выигрыша в
производительности там в этом случае не будет. А вот если индекса
нет, будет серьёзный провал в производительности, в случае наличия
FK.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35710499
Фотография Valentin Kotelnitski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так ключи все-таки есть?
и если без фанатизма и все работает, то ...?
паря, строй новые системы как умеешь и не лезь туда, где все отлажено.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35710615
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> база данных (отнюдь не маленькая как по кол-ву объектов, так и по объемам) построена без PK, FK

Дебилов в этом мире вообще сильно больше, чем нормальных людей.

> И самое главное -- все работает уже не один год. И это аргумент неопровержимый.

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

> Очевидно, что можно построить надежную систему и без единого constraint'а.

Принципиально невозможно спроектировать ничего сложнее записной книжки без ограничений целостности. Рассматривайте это как факт, без обсуждения.

Плохо спроектированные базы данных - это мертвые базы данных. Ноль дополнительного функционала, ноль расширения. Потому как дебила, который это изначально написал, уже не найти. А если и найти, то он наверняка уже поумнел и ему самому будет страшно заниматься редизайном.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35710967
Фотография Valentin Kotelnitski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621,
ты как считаешь, успешный опыт обуреваем жаждой столкнуться с проблемами?


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35711074
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621 пишет:

> Принципиально невозможно спроектировать ничего сложнее записной книжки
> без ограничений целостности. Рассматривайте это как факт, без обсуждения.
>

Да нет, к сожалению возможно.

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

Я бы сравнивал их с "зомби": шевелятся, делают вид, что работают ...
но дохлые.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35711103
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Серж1. Мне интересно на сколько часто встречаются системы построенные на таких принципах?

2. Отказались ли от них в силу неудобств или разработка так и продолжается?

3. Какого типа задачи решались (у нас в основном массированная закачка из других систем и аналитика)?

4. Были эти системы централизованные или распределенные (имеются в виду серверная часть)?

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

Говоря за свою...
1. Несколько сотен инсталляций.
2. Нет конечно. Ведь всё работает.
3. OLTP.
4. БД централизованная. Но система взаимодействует с кучей внешних систем (дилеры, приём платежей).
5. Скорее нет, всё равно какие то проверки приходится делать, но менее эффективными способами. Другое дело, когда исходные данные уже проверены.

NOT NULL мы конечно используем.
Для реальных данных сложно вводить какие либо ограничения. Рано или поздно в силу изменений в бизнесе или от бардака находятся такие сведения, которые не проходят проверку. В лучшем случае производится разбирательство и исправление, в худшем, в систему вводятся фальсифицированные сведения (лишь бы съела).
В такой ситуации хуже всего удалять ограничения целостности, поскольку разработчики (чтобы упростить себе жизнь) уже могли завязать на них свой код.

В общем, я постепено прихожу к мнению, что использовать системные механизмы СУБД (такие как декларативные ограничения целостности, транзакции) нужно для реализации системных механизмов приложения (например для реализации элементарных изменений объекта, или для поддержки пользовательских типов данных), где правила диктует не бизнес а разработчик.
Бизнес транзакции, проверки бизнес правил должны стать заботой приложений, которые изменять гораздо легче, чем БД с большой историей. Программировать приложения для таких БД сложнее, однако и возможностей для конфигурирования и модификации системы становится значительно больше.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35711147
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin Kotelnitski
guest_20040621,
ты как считаешь, успешный опыт обуреваем жаждой столкнуться с проблемами?




Голословные утверждения. Лично я не слышал, чтобы какой нибудь программист повесился из-за своей ошибки.

Ограничения целостности это палка о двух концах. С одной стороны они повышают качество данных, с другой, они могут мешать приложениям выполнять свои функции. В частности ошибочно введённые ограничения, это такая же проблема, как кривые данные. Отличаются только подходы к исправлению ситуации.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35711218
Фотография Valentin Kotelnitski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mcureenabЛично я не слышал, чтобы какой нибудь программист повесился
из-за своей ошибки.
я вот тоже не стреляюсь

о топикстартере:
я так понял, что парень рвется в бой,
но ему, чем самому что-то сваять, видимо проще раскритиковать чью-то систему

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35711341
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin Kotelnitski, да не он первый. Я поначалу тоже думал, что ограничения целостности это сплошное благо. Но когда создал такое ограничение, которое по ходу ещё и не позволяло удалять записи усомнился. :) Много гемора было с тестированием, потому как приходилось генерить только исключительно правильные данные и применять их правильными транзакциями. Потом, так же как автор, столкнулся с системой, где тоже на мой взгляд было много неправильного, но система работала и работает и работать будет. Постепенно вник в тему и всё встало на свои места.

Все эти штучки, как болты и заклёпки. Сборка на болтах ремонтопригодна, но ненадёжна, на заклёпках надёжнее, но разбирать сложно, а монокок это вообще верх функционального совершенства, но если он ломается, то ремонту не подлежит и модернизировать его нельзя. Коммерческий успех системы зависит не от количества ограничений целостности в БД, а от того, насколько грамотно они применяются или не применяются в тех или иных ситуациях.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35711855
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помню, как был озадачен мой ПМ,когда не обнаружил FK в БД MS Projects.Долго приставал с вопросами
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35713394
Серж
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivбезграмотно разработанные системы... зачислить в разряд "безграмотных" это легко. Мне интересно понять, вдруг там сокрыт какой-то глубокий смысл, а я его не замечаю :)

MasterZivвы можете постепенно добавлять первичные ключи и FKСейчас это уже невозможно. Кода столько, что никто не сможет поручиться, что произойдет при добавлении ФК.

guest_20040621Принципиально невозможно спроектировать ничего сложнее записной книжки без ограничений целостностиИменно так всегда и считал. Но используют же люди MySQL, а там (как подсказывает Ёш) этого механизма может и не быть.

Valentin Kotelnitskiстрой новые системы как умеешь и не лезь туда, где все отлажено.
...
я так понял, что парень рвется в бой,
но ему, чем самому что-то сваять, видимо проще раскритиковать чью-то систему Валентин, в твоих поучениях и домыслах я не нуждаюсь. Это первое.
Второе, вопросы я задал конкретные к тем, у кого опыт есть. Если есть что сказать по существу - велкам. Если нет, лучше научите своих подчиненных чему-нибудь полезному.

Ёш, нет, на сколько я знаю, MySQL там не водился :)
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35713617
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Серж пишет:

> ... зачислить в разряд "безграмотных" это легко. Мне интересно понять,
> вдруг там сокрыт какой-то глубокий смысл, а я его не замечаю :)

Вы же сами сказали, что во многих таблицах есть UNIQUE. почему бы один
из них не сделать PK ? Какая разница-то ? Но вот не сделали. Почему ?
Либо не знали, что PK обязательно должен быть, либо

> Сейчас это уже невозможно. Кода столько, что никто не сможет поручиться,
> что произойдет при добавлении ФК.

Ну так не добавляйте FK пока, добавляйте PK. Да и FK можно в любой момент
дропнуть ежели что.

> Именно так всегда и считал. Но используют же люди MySQL, а там (как
> подсказывает Ёш) этого механизма может и не быть.

Он там есть в InnoDB.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35713713
Фотография Valentin Kotelnitski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергвопросы я задал конкретные

вопросы ты задал собирательно-обобщающие

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35713793
KOT MATPOCKuH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621> Очевидно, что можно построить надежную систему и без единого constraint'а.

Принципиально невозможно спроектировать ничего сложнее записной книжки без ограничений целостности. Рассматривайте это как факт, без обсуждения.

А кто сказал, что проектировали без PK, FK и др.?
Вполне возможно, что проектировали - "по уму", а потом занялись тюнингом производительности и пожалуйста, снесли констрейнты. Особенно, если констрейнты по факту реализованы на клиенте или в процедурах модификации данных, то зачем их дублировать штатными средствами БД? Только для тормозов, потому что фактически они проверяют всегда корректные данные.
Многие, прочитав мною написанное, сразу начнут говорить про развитие системы, подключение внешних клиентов и т.д. и т.п....
Да, знаю!
А может разработчик не хочет облегчать жизнь других разработчиков/админов?! Нужно развитие - "велком снова ко мне" :)
Такая ситуация на самом деле не редка.

Оракл апликешн, например, содержит крайне мало констрейнтов. Почти нет FK. Считаете, что оракл не умеет проектировать системы? Или Oracle E-Buissines Suite не сложнее записной книжки???
Я не призываю ни к чему, просто некая констатация некоторых фактов
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35714620
guest_20040621,

ну да, ну да... А если посмотреть на FoxPro + Btrieve разработчиков банковских информационных систем середины 90х прошлого века, то все сплошь дебилы...

Короче, не надо ля-ля на счёт записных книжек. Плохому танцору FK не поможет.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35715219
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Серж
Здесь ничего этого нет, правда, и задачи здесь сильно отличаются от моих прежних. И самое главное -- все работает уже не один год. И это аргумент неопровержимый.


Раньше в провинции всякие там ораклы стали диковинкой с приходом всяких там роботронов и атишек. Но были такие ынтересные вещи как борланд дельфи с локалскл, которые работали с табличками, которые были созданы на всяких там клипперах. Щоб не отставать народ переписывал с клипперов на эти локалскли всякие там бухгалтерии и торговли не трогая таблички (параллельно раотали старые и новын машинки, досы с виндовсами и ос/2 вкупе с новелями). Пашут лет 20. Это точно. БАЛАНС ТОЧНО ТАКОЙ ЖЕ КАК И у других джав и нетов с их субдшками с их констрейнтами на СЕРВЕРНОЙ стороне.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35715251
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> ну да, ну да...

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

> то все сплошь дебилы...

Не обязательно. Есть люди, так и оставшиеся в середине девяностых. Если им там нравится - отлично. Только при этом делиться мыслями из середины девяностых нужно очень аккуратно и тщательно выбирая аудиторию из подобных себе. Чтобы нормальные люди это не видели и не слышали.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35715408
guest_20040621> ну да, ну да...

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



Была. Где то там... А где то здесь народ покупал или тырил FoxPro, NetWare, ещё хрен знает что, и за скромное вознаграждение решал промышленные задачи подручными средствами.

Конечно, в XXI веке задачи стали значительно сложнее тех, что решались в XXм, однако и в XX народ не куличики лепил и вполне успешно. И проблема 2000 года оказалась не смертельной.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35715461
Фотография Mr Marmelad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, чего мучаетесь?

:И самое главное -- все работает уже не один год. И это аргумент неопровержимый.
Кругом ещё полно систем ждущих Вашего "мудрого" решения. Прелесть то в том и заключается что всё что однажды сделано "неправильно" - потенциально хороший кусок работы для Вас и Ваших детей. Вдумайтесь - почему Американцы НИЧЕГО не строят НАВЕКА - фундаментально? Да всё очень просто - мы думаем о наших ПОТОМКАХ - мы знаем что надо и им оставить нечто чтоб построить (или отремонтировать). Так ЗАЧЕМ отсраивать фундаментальные вещи если максимум через 10-15 лет (по айтишным меркам) камня на камне не останется от сегодняшних технологии, бизнеса, заклёпок, болтов и так далее. IBM на сегодня почти Мумия. Оракл и Мелкомягкий с CA в купе - седовласые реликты, а всего то им по 25 лет отроду. Вот помню DEC был с Алфой процессором и технологиями так и не пробравшимися в ХХ век... вот дети наши покапаются в исторических справках и разбомбенят всю теорию реляционной базы. Сведут всё в формат объектно-ориентированных баз и кому тогда вообще все ключи нужны будут... так что как сказал бы мой любимый герой Остап Ибрагимович - расслабьтесь и получайте удовольствие.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35715668
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВдумайтесь - почему Американцы НИЧЕГО не строят НАВЕКА - фундаментально?
Да, ладно уж.Вы американцы-просто жадины,ваши дети с Кобола переписывать будут,если мы не все к тому времени успеем ;-)
Из этой серии понравилась история.В Англии был сильный ураган и повалило все столбы электропередач, кроме одной компании, где проектировщик был из России.Англичане посчитали, что такие страсти бывают раз в 115 лет и экономически невыгодно делать такие опоры на случай ядерной войны.Парня уволили, а нас медальку дали бы
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35715717
Фотография Mr Marmelad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaВы американцы-просто жадины

не так всё просто, Коллега. как ни странно на островах где по многу раз в год бушуют ураганы выживают в основном лёгкие и разборные домишки. А вот "фундаментальные" постройки никогда не бывают доведены до разумной кондиции. В Америку в начале XX века тогдашние "Новые Американские" понавозили зАмков из Вечного города Рима. на разборку и перевозку таких домов выделялись миллионы долларов и годы работы. Эти зАмки не выдержали конкуренции с природой. А вот разборные домишки разрушаются за часы и выстраиваются за дни - и пожалуйста живи опять... А вы говорите "Жадность". Разумная осторожность будет более подходящим термином на мой взгляд. Или вот - Лучшее Враг Хорошего..
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35715862
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Быстрее-целесообразность и умение считать деньги.Какая разница на чем написана и на каком железе крутится,если устраивает
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35715868
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mr Marmelad А вот разборные домишки разрушаются за часы и выстраиваются за дни - и пожалуйста живи опять... А вы говорите "Жадность".

Хм. ИМХО, всё дело в страховке.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35715890
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SeVaБыстрее-целесообразность и умение считать деньги.Какая разница на чем написана и на каком железе крутится,если устраивает

Есть тонкий момент - имидж. Технологии и продукты, которые у всех на слуху, такие как Linux, WEB, XML, Java, .NET делают продукт более привлекательным даже при отсутствии технической целесообразности их использования. Акции компании могут возрасти уже только потому, что она использует или разрабатывает продукты на какой нибудь популярной платформе.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35715941
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имидж-из нашей бочки:навороченный cмартфон на последние шиши в кредит для только позвонить,галстук у простого клерка дороже, чем вся экипировка у забугорного CIO etc.
Если Linux повышал бы стоимость,давно бы все на нем сидели.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35717388
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SeVaЕсли Linux повышал бы стоимость,давно бы все на нем сидели.

Linux, это для энтузиастов.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35718708
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
explaSeVaЕсли Linux повышал бы стоимость,давно бы все на нем сидели.Linux, это для энтузиастов.А винда - для мазохистов.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35718788
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BelyexplaSeVaЕсли Linux повышал бы стоимость,давно бы все на нем сидели.Linux, это для энтузиастов.А винда - для мазохистов. Windows для профессионалов.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35718790
Сахават Юсифов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
expla,

н узря ты это
для профи все по фиг
ос 3.0 или ос/2
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35738071
Goffman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Серж
Я всегда приводил к 3НФ (без фанатизма), создавал суррогатные ПК (даже у тех таблиц, которым они сейчас казалось бы и не нужны), всегда использовал ссылочную целостность. Всегда старался создавать NOT NULL поля, чтобы избегать постоянных IS NOT NULL/ISNUL()... Кратко - я опирался на эти ограничения и на их основе строил ПО.

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

Вот и сталкивается мой успешный опыт с местным успешным опытом :-)

Собственно в этой теме я не хочу устраивать спор -- как правильно. Очевидно, что можно построить надежную систему и без единого constraint'а.

....
у нас в основном массированная закачка из других систем и аналитика


Вы преподносите эту систему как нечто необычное.
Но вы сами подумайте, зачем этой системе иметь констрейнты.
Все данные уже сформированы в других системах, осталось только закачать их и построить аналитические запросы.

О констрейнтах нужно было заботится в системе, где вводится информация, а в данном случае мне думается разработчики поступили совершенно адекватно :)
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35738118
KOT MATPOCKuH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Goffman +1

Добавлю, констрейнты в такой системе существуют только чтобы она тормозила, другой цели - нет.
Если нада показать начальству, что железо надо бы улучшить, то - вперед, создавайте все мыслимые и не мыслимые констрейнты (только не перестарайтесь, система должна работать) тормоза обязательно будут!!!

ЗЫ Вообще-то мне очень стыдно писать такие рекомендации, но, надеюсь меня поймут правильно
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35739556
olzhas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Констрейны нужны.
вот почему.
1. В БД данные могут попасть любым способом, через Сервер Приложений, Федерацию, Через запросы в этой же базе, Импорт из csv фала и т.д. И во всех этих случаях не возможно учесть ограничения на данные, лучше чем констрейны здесь ни кто не справиться.
2. При использовании связи в БД, а не декларативно в коде, всегда понятно что с чем связанно. Легче запросы писать (Есть у вас есть ПК в таблице? вы уже знаете что запрос дубляж не вернет).
3. Ну и они еще на некоторых СУБД помогают при оптимизации.

Ну и на последок представте что БД это тоже своего рода сервер. А Серевера приложений клиенты. Вы же на сервере (т.е. БД) должны проверять то что вам прислал клиент (приложение на сервере приложении, прямое соединение через JDBC и т.д. и т.п.)
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35739801
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
olzhas,

1. в настоящее время декларативные ограничения целостности поддерживаемые СУБД далеко не всегда позволяют описать все инварианты модели данных. Так что на долю прикладного кода остаётся достаточно работы по проверке данных.

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

3. иногда помогают, иногда мешают. если помогают, то от чего ж их не использовать... речь то о том, что тут они скорее мешают.

4. БД в силу своей пасивной природы не может быть сервером. Сервер, это СУБД. А проверять данные нужно лишь в той мере, в какой это необходимо для корректной работы системы. Для БД существенно лишь соответствие данных структуре хранилища и типам полей записей, чтобы СУБД могла корректно извлечь эти данные из файлов БД и предоставить эти данные пользователю. Остальное, это подпорки для логики приложений.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35739910
Goffman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olzhasКонстрейны нужны.
вот почему.
....
Я не сказал что констрейнты не нужны в принципе.
И не зря выделил жирным шрифтом назначение системы массированная закачка из других систем и аналитика .

Представьте придет из какой-нибудь дочерней компании к вам 5-мег файл данных. вы начинаете его импортировать и вдруг бац, "UNIQUE CONSTRAINT".
Что будете делать?
Искать выпавшую запись и наводить разборки?
а если этих записей десяток-другой по разным причинам?
Если в дочерней компании поменялась бизнес-логика и ваши констрейнты в головном офисе ей уже не отвечают?
Если набор констрейнтов в одной системе противоречит набору констрейнтов другой системы?
Нужен этот гемор?
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35739915
olzhas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
explaolzhas,

1. в настоящее время декларативные ограничения целостности поддерживаемые СУБД далеко не всегда позволяют описать все инварианты модели данных. Так что на долю прикладного кода остаётся достаточно работы по проверке данных.

Согласен не все, однако можно задейсвовать хранимые процедуры, UDF. (Я к этому не призываю, это как контр аргумент)

expla
2. для описания БД служит проектная и эксплуатационная документация. Опять таки в силу ограниченности возможностей СУБД вы не сможете описать все свойства данных на только уровне ограничений целостности.


А всегда ли эта документация есть? Актуально ли она? И еще очень много проблем с документации, да и вообще кто ее читает?
Да возможности Костреинов ограничены, но они и не признаны решать все проблемы. Мы же говорим о простых вещах, как целостность БД(первичные и вторичные ключи, ключи уникальности).

expla
3. иногда помогают, иногда мешают. если помогают, то от чего ж их не использовать... речь то о том, что тут они скорее мешают.

Мешают в чем, в производительности? Да, вставка(или другая операция) будет дольше, но все равно вы это время же потратите на сервере приложении и еще где нибудь.

expla

4. БД в силу своей пасивной природы не может быть сервером. Сервер, это СУБД. А проверять данные нужно лишь в той мере, в какой это необходимо для корректной работы системы. Для БД существенно лишь соответствие данных структуре хранилища и типам полей записей, чтобы СУБД могла корректно извлечь эти данные из файлов БД и предоставить эти данные пользователю. Остальное, это подпорки для логики приложений.
А что вы подразумеваете под словом сервер? Давайте выкиним и связки сервер приложений и построим обычную двух звенку, И что по вашему в этом случае будет сервером?

СУБД расшифровывается как Система Управления Базами Данных, она должна управлять данными, а не быть просто хранилищем.

Да и вообще считаю, что спорить бессмыслено. Все постигается в Практике, вот у меня задача, как раз такая. Такое ощущение, что проектировщик при проектировании вообще не понимал значения ключей. Теперь вот разбираюсь с этим бардаком.
Не спорю можно и в Сервере приложении все так разработать, что будут работать как часики, а БД использовать просто что бы быстро достать данные. Но я же все таки склоняюсь к возможностям БД, на мой взгляд это правильнее.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35739918
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лучше гемор, чем превращение БД в хранилище мусора.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35739931
olzhas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Goffman,

Вы мене напомнили один случай, у нас тоже заливка из других систем при чем миллионами записей. Начали заливать, опа ключ мешает. Что делать?! Снесли ключ залили данные. Все задачу выполнили.
А потом через пол годика выходит а от куда тут эти данные, а почему данные по 2 раза залились и т.д. и т.п.

На счет противоречий контстрейнов, с начало нужно констрейны в порядок привести, а потом уж и данные перегонять.
Вы когда поле в таблице из null -> not null переводите вам база что говорит (при условии что есть нулевые записи)?
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35739935
olzhas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
egorychлучше гемор, чем превращение БД в хранилище мусора.
+1
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35739954
Goffman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychлучше гемор, чем превращение БД в хранилище мусора.
Громко сказано. С чего вы взяли что непременно будет хранилище мусора?
Если можете, прокоментируйте проблемы , которые я озвучил, можно будет более предметно тему обсудить
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35739968
Goffman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
olzhas
Вы когда поле в таблице из null -> not null переводите вам база что говорит (при условии что есть нулевые записи)?
Не забывайте, что вы не можете контролировать данные, они к вам поступают из внешних систем в виде дампа.
Следовательно следить за чистотой данных обязана внешняя система, а не система закачки.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35739978
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GoffmanПредставьте придет из какой-нибудь дочерней компании к вам 5-мег файл данных. вы начинаете его импортировать и вдруг бац, "UNIQUE CONSTRAINT".
Что будете делать?
Искать выпавшую запись и наводить разборки?
а если этих записей десяток-другой по разным причинам?

С декларативными ограничениями или без оных приложение должно быть заточено на обработку таких ситуаций (в первом случае нужно обрабатывать исключение, во втором проверять и отбрасывать записи самостоятельно).
Определённо ошибки в данных проще искать и исправлять когда они уже лежат в БД, а не в сыром файле. Практически есть ошибки которые удобно и эффективно отлавливать на уровне СУБД. Тот же самый UNIQUE удобно ловить на этапе добавления записей, тогда как после добавления записи для проверки нам может потребоваться перелопатить очень большой объём данных. С другой стороны гарантировать выполнение ограничений можно и другими, иногда очень простыми и эффективными средствами.

Goffman
Если в дочерней компании поменялась бизнес-логика и ваши констрейнты в головном офисе ей уже не отвечают?
Если набор констрейнтов в одной системе противоречит набору констрейнтов другой системы?


Тут имеет место ошибка проектирования взаимодействующих систем. Даже если удасться впихнуть данные в БД целевой ситемы, не факт, что её приложения смогут их обработать. Если уж делать декларативные ограничения целостности, то для того, чтобы их реально использовать в runtime, а не на всякий случай.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35739981
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Goffmanolzhas
Вы когда поле в таблице из null -> not null переводите вам база что говорит (при условии что есть нулевые записи)?
Не забывайте, что вы не можете контролировать данные, они к вам поступают из внешних систем в виде дампа.
Следовательно следить за чистотой данных обязана внешняя система, а не система закачки.

Ну это ты загнул... Всё зависит от контракта между системами. Как контракт составлен так и должно быть.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35740000
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если при GoffmanЕсли в дочерней компании поменялась бизнес-логика и ваши констрейнты в головном офисе ей уже не отвечают?
Если набор констрейнтов в одной системе противоречит набору констрейнтов другой системы? вы всё равно закачиваете данные в свою базу, то она становится хранилищем мусора по-определению. Потому что вы загружаете в свою базу данные, противоречащие вашим бизнес-требованиям.

второй момент:
GoffmanСледовательно следить за чистотой данных обязана внешняя система, а не система закачки.
внешняя система в общем случае ничего не знает о системе ограничений в вашей базе данных. Более того, она и не должна этого знать и даже более того, ей это должно быть вообще по-барабану. Правильность и непротиворечивость данных в вашей базе данных должны обеспечить вы, как DBA, именно за это вам и платят, если вы, конечно, DBA
кстати говоря, первая цитата противоречит второй, вы не находите?
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35740009
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в целом, склонен согласиться с expla
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35740602
Goffman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychесли при GoffmanЕсли в дочерней компании поменялась бизнес-логика и ваши констрейнты в головном офисе ей уже не отвечают?
Если набор констрейнтов в одной системе противоречит набору констрейнтов другой системы? вы всё равно закачиваете данные в свою базу, то она становится хранилищем мусора по-определению. Потому что вы загружаете в свою базу данные, противоречащие вашим бизнес-требованиям.

Извините, но бред...
Вы представляете себе хотя бы примерно, для каких целей создаются аналитические системы?
И чем аналитическая ИС принципиально отличается например от системы учета?
(без обид)

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

egorych
Более того, она и не должна этого знать и даже более того, ей это должно быть вообще по-барабану.
Ну это вы уж загнули, а выгрузку она для кого делает? На деревню к дедушке?

egorych
Правильность и непротиворечивость данных в вашей базе данных должны обеспечить вы, как DBA, именно за это вам и платят, если вы, конечно, DBA
Ошибаетесь я занимаюсь разработкой, а не администрированием.

egorych
кстати говоря, первая цитата противоречит второй, вы не находите?
Ничуть, вдумайтесь что сказал автор. Данные собираются из разных ИС.
Например в первой системе номер документа обязан быть уникальным в пределах всей БД.
А во второй системе номер может быть начинаться заново каждый год.

А вам нужно закачать данные из таблиц разных ИС, в одну таблицу аналитической системы.
Какое ограничение в данном случае Вы наложите на номер документ? а?

egorych
в целом, склонен согласиться с expla



Вы можете соглашаться друг с другом сколько хотите, но то что описанная автором топика система долгие годы работает без всяких проблем, подтверждает мою правоту.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35740619
Goffman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
expla
Определённо ошибки в данных проще искать и исправлять когда они уже лежат в БД, а не в сыром файле. Практически есть ошибки которые удобно и эффективно отлавливать на уровне СУБД. Тот же самый UNIQUE удобно ловить на этапе добавления записей, тогда как после добавления записи для проверки нам может потребоваться перелопатить очень большой объём данных.

Для проверки чего? Какие основания сомневаться в чистоте переданных данных?
Все ограничения и прочие бизнес-правила УЖЕ заложены во внешнюю систему.
Данные во внешней системе хранятся в соответствии с этими БП.
Если мы выгружаем данные из системы, то мы можем быть уверены, что данные уже содержат все необходимые ограничения, так для чего эти правила еще дублировать в аналитике.
Аналитика - это совершенно другой класс задач.

expla
С другой стороны гарантировать выполнение ограничений можно и другими, иногда очень простыми и эффективными средствами.

Согласен :)

expla
Goffman
Если в дочерней компании поменялась бизнес-логика и ваши констрейнты в головном офисе ей уже не отвечают?
Если набор констрейнтов в одной системе противоречит набору констрейнтов другой системы?


Тут имеет место ошибка проектирования взаимодействующих систем. Даже если удасться впихнуть данные в БД целевой ситемы, не факт, что её приложения смогут их обработать. Если уж делать декларативные ограничения целостности, то для того, чтобы их реально использовать в runtime, а не на всякий случай.
Мне думается, если системы выполняют свои задачи, то никакой ошибки проектирования нет.
Конечно не факт, для того чтобы приложения смогли работать, нужно грамотно все спроектировать и разработать.
Но отсутвие PK и FK совсем не говорит о безграмотности разработчика.
Он вероятно предвидел все возможные проблемы связанные с констрейнтами.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35740637
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Goffman
Он вероятно предвидел все возможные проблемы связанные с констрейнтами.

Скорее он предвидел проблемы связанные с их отсутствием. Просто дискуссия немного оторвалась от контекста аналитики и ушла в область ограничений целостности вообще.

Высказывание на счёт "массированная закачка из других систем" не верно. Суть не в количестве данных, а в их качестве, т.е. опять же в соблюдении контракта программирования.
Если данные по сути не требуют проверки, то и не надо тратить на это время. Если данные могут содержать критичные ошибки, то их надо проверять.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35740642
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Goffman
expla
Goffman
Если в дочерней компании поменялась бизнес-логика и ваши констрейнты в головном офисе ей уже не отвечают?
Если набор констрейнтов в одной системе противоречит набору констрейнтов другой системы?


Тут имеет место ошибка проектирования взаимодействующих систем. Даже если удасться впихнуть данные в БД целевой ситемы, не факт, что её приложения смогут их обработать. Если уж делать декларативные ограничения целостности, то для того, чтобы их реально использовать в runtime, а не на всякий случай.
Мне думается, если системы выполняют свои задачи, то никакой ошибки проектирования нет.
Конечно не факт, для того чтобы приложения смогли работать, нужно грамотно все спроектировать и разработать.


Так ты определись, выполняют или нет. Если БД не принимает информацию, это проблема, но удаление ограничений целостности скорее всего её не решит (ведь создавались они не для того чтобы продемонстрировать грамотность разработчика). Если приложения не умеют работать с новыми данными, придётся и их дорабатывать. Другое дело, что аналитические приложения должны быть по возможности толерантны к такого рода изменениям в бизнесе.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35740677
Goffman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
expla,

Я же привел пример противоречия, в одном из предыдущих постов, когда системы по своему хорошие, но данные в одну таблицу с ограничением на уникальность запихнуть невозможно.
Тут нет никакой ошибки проектирования, это могут быть просто тонкости работы в двух разных компаниях.

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

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

Конечно при желании можно работать и так, но мне думается что на практике это очень неудобно.
Дублирование функционала неадекватно увеличивает стоимость сопровождения системы.

Гораздо проще организационными мерами заставить филиалы выдавать чистую информацию.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35740792
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Goffmanexpla,

Я же привел пример противоречия, в одном из предыдущих постов, когда системы по своему хорошие, но данные в одну таблицу с ограничением на уникальность запихнуть невозможно.
Тут нет никакой ошибки проектирования, это могут быть просто тонкости работы в двух разных компаниях.



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

Вообще, применительно ко всем системам, система долна иметь как можно более слабые предусловия и как можно более сильные постусловия. Это залог успеха построения систем без ошибок, в том числе и в плане интеграции. Навешивание ограничений целостности на БД противоречит первой части правила, но одновременно способствует выполнению второй части правила. Хорошая БД как обчно находтся гдето между двумя крайностями.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35740803
Goffman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно по третьему кругу пошли, с Наступающим! :)
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35741221
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Goffman
Дублирование функционала неадекватно увеличивает стоимость сопровождения системы.

Гораздо проще организационными мерами заставить филиалы выдавать чистую информацию.

Отсутствие констрейнтов может увеличить стоимость сопровождения системы в другом месте.

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

Но предположим, что произошла организационная ошибка - рассогласование справочников.

Если в центральной БД есть соответствующие констрейнты (FK) - то имеем:

ошибка обнаруживается администратором загрузки немедленно,

сотрудники принимают осмысленные организационный меры к исправлению

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

- либо временно снимают констрейнт, и получают дополнительные отчеты, четко понимая, какие из них верны

срочно согласовывают справочники

барышня на справочниках получает трындюлей

программисты - ничего

администратор загрузки - премию за своевременное обнаружение ошибки.

Если в центральной БД нет соответствующих констрейнтов - то имеем:


загрузка присходит успешно

заинтересованные лица получают красивые отчеты по продажам, сдают в налоговую

случайно обнаруживается расхождение итогов между отчетами в разрезе товаров, и в разрезе контрагентов

зовут программистов, ейными отчетами им в харю тычут.

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

сотрудники принимают осмысленные организационный меры к исправлению

срочно согласовывают справочники

начальство едет в налоговую проситься пересдавать отчеты после срока, привозит штрафы и мешок трындюлей.

барышня на справочниках получае трындюлей,

программисты - трындюлей,

администратор загрузки - по идее ничего, на практике - трындюлей за компанию.

Предвидя повторение ситуации, программисты во всех случаях, когда "По идее филиал должен согласовывать справочники с центром, и все должно быть хорошо", предвидят худшую ситуацию, и сотнями переписывают все связи во всех SQL-запросах на OUTER JOIN'ы, что усложняет систему и... (недостатки укажите сами).

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


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

Вместо рассогласования справочников предположите, что филиал в своем справочнике снял констрейнт уникальности с кода товара и набил дублей - результаты запросов в центре будут еще веселее. Поэтому все-таки нужно выделить некий минимальный набор ограничений, в расчете на который строятся запросы, и поддерживать его как в филиалах, так и в центре.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35741373
KOT MATPOCKuH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat Fisher, хороший пример нехорошей системы!

Нехорошесть заключается в основном в том, что заливка занных из филиалов идет в рабочие таблицы.
Как сказал непомню кто - за это расстрел на месте.
Долгими мытарствами пришел к следующей архитектуре по интеграции систем:
1) Система экспортер готовит пакет выгрузки данных.
2) Данные переливаются в интеграционные таблицы, записи которой преобретают (как минимум) два дополнительных поля: экземпляр пакета/перекачки, статус записи
3) Идентификация данных: для данных перелитых из гетерогенных источников определяются значения полей в системе-импортере, доопределяюся другие параметры, определяется корректность данных. Для этого шага иногда создаются достаточно сложные экспертные системы по определению корректных данных (если такова воля заказчика). Был даже случай, когда из 420 ошибок ввода система пропустила только 7
4) в систему-импортер, точнее в рабочие таблицы заливаются только корректные данные из экспортных таблиц.

На каждом шаге, начиная со второго статусами записей определяется прохождение шагов для записей, а также корректность данных записи.
Кроме этого, не перелитые данные всегда можно позже проанализировать.

Данная архитектура не лишена недостатков, но большенство часто-случающихся проблем в ней нет.

Возвращаясь к теме: система-импортер предназначена для аналитики, а значит функциональность системы перекачки и контроля данных ей особо не нужна, а когда начинает серьезно влиять на производительность, то ее (функциональность по контролю качества данных) нужно гнать из основной системы поганой метлой - в отдельную функциональность. Тем более, что не факт, что требования к закачиваемым данным полностью одинаковы с требованиями к данным в системе.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35741577
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KOT MATPOCKuH, я полностью согласен, что если в систему консолидации данных входит мощная подсистема экспорта-импорта, с экспертной системой по проверке даных, то подсистема аналитики может не заморачиваться проверкой данных. Но скажите мне честно, как кот коту - неужели Вы думаете, что автор вопроса имел в виду именно такую ситуацию? Я как-то не вижу намеков на это, а потому больше склоняюсь к мысли о бездумном переносе с MySQL или DBF, что достойно сожаления.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35741770
Bely
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat Fisherнеужели Вы думаете, что автор вопроса имел в виду именно такую ситуацию?Интересно, а что автор подразумевал под этой фразой?
авторИ самое главное -- все работает уже не один год. И это аргумент неопровержимый.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35742419
KOT MATPOCKuH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat FisherKOT MATPOCKuH, я полностью согласен, что если в систему консолидации данных входит мощная подсистема экспорта-импорта, с экспертной системой по проверке даных, то подсистема аналитики может не заморачиваться проверкой данных. Но скажите мне честно, как кот коту - неужели Вы думаете, что автор вопроса имел в виду именно такую ситуацию? Я как-то не вижу намеков на это, а потому больше склоняюсь к мысли о бездумном переносе с MySQL или DBF, что достойно сожаления.
А подсистема экспорта-импорта вовсе не обязана быть супер-мега крутой. Эламентарная проверка корректности данных, например, даты или заполненность ключевых полей - проверить весьма не сложно.
Простой пример: в перекачке (так ее назовем) основное - некая таблица с рабочими данными, но имеет FK (логический) на небольшой справочник. Проще в перекачку кинуть весь этот справочник (из системы-экспортера). Тогда в подсистеме экспорта-импорта нужно проверить для всех ли получаемых данных в этом справочнике в системе-импортере есть аналогичные записи. Если нет - добавить их туда с требованиями системы-импортера (например там больше полей) и для основной рабочей таблицы подправить (если нужно) идентификаторы-ссылки на обновленный справочник.

А если в тупую заливать таблицы по-порядку в систему с констрейнтами, то далеко не всегда угадаешь с правильным порядком заливки таблиц и порядком заливки в них строк (вспомним свинное ухо).
И особо это касается переливки данных из других систем, с другими типами полей
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35742497
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KOT MATPOCKuH
А подсистема экспорта-импорта вовсе не обязана быть супер-мега крутой. Эламентарная проверка корректности данных...

Крутой не крутой, но тогда она ОБЯЗАТЕЛЬНО должна реализовывать В ПОЛНОМ ОБЪЕМЕ:

1. Проверки на заполненность (NOT NULL) всех полей, для которых это необходимо. Иначе, во все запросы в сравнения придется добавлять [NOT] IS NULL, и продумать, что это будет означать. Например, если пользователь привычно нажал галочку "..и сумма не меньше 0" - то включать сюда "OR summa IS NULL" ? В общем случае не скажешь.

2. Проверки на ссылочную целостность по всем ключам. Иначе все JOIN'ы придется переделать на OUTER, и продумать, что это будет означать в отчетах.

3. Все проверки на уникальность. Иначе запросы молча начнут возвращать мусор.

4. Опциональные бизнес-правила.

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

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

А без этого база без констрейнтов превращается, как говорили ранее, в "немножко ежика, немножко черепаху" - немножко базу данных, немножко мусорку, в которой некоторые запросы иногда могут дать немножко неправильные результаты.

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

Насколько я понимаю, на скорость выполнения запроса наличие констрейнтов никак не влияет (разве что наличие неявно созданных индексов - но предполагается, что необходимые индексы проектировщик и так создаст). Констрейнты дадут ощутимые тормоза при закачке данных, вплоть до суток вместо десятков минут. Поэтому я бы склонился к компромиссному варианту - пусть данные предварительно проверяются системой импорта-экспорта, переливаются по промежуточным таблицам и т.д., но на базе аналитики все равно пусть стоят констрейнты. Перед закачкой в аналитическую базу констрейнты снять, после заливки - установить. В 99,9% случаев они установятся успешно. В 0,1 % случаев они крупно спасут чью-то задницу.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35742708
expla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cane Cat FisherВ 0,1 % случаев они крупно спасут чью-то задницу.

Не гоже разработчику спасать свою задницу таким путём.

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

Тут говорили про outer join и прочие уловки. Но это лишь плод вашей фантазии. Вы придумали такой отчёт и теперь говорите, что его будет сложно сделать на БД с нарушеним правил ссылочной целостности. Но придумайте другие отчёты, которые будут ловко обходить или игнорировать эти нарушения и вы получите душевный покой.
Типа.

31.12.2008.
- Шеф, это отчёт, в котором отображаются целостные данные.
- (шеф себе под нос) ухууу. Цел, цел, цел...
- А вот тут отчёт с кривыми данными.
- Что за кривые данные!? Вы ибу!
- Мы работаем над их исправлением.
- Быстранах!
- Но ведь завтра Новый год! И ошибка маленькая.
- Да!? (смотрит один отчёт, другой отчёт, хмурится) Ну тогда с Новым годом, господа!
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35742895
Фотография NextMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А я работал в Метрострое, там запуск одной системы (фокспрошной) начинался с проверки целостности.
Индексы пересоздавались, и т.п.
Чистка мусора, типа...
А еще эта же процедура запускалась перед формированием отчетов. Снапшот, типа.
...
Работало годами. И сейчас работает. И что хорошего?
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35742969
KOT MATPOCKuH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat FisherНасколько я понимаю, на скорость выполнения запроса наличие констрейнтов никак не влияет (разве что наличие неявно созданных индексов - но предполагается, что необходимые индексы проектировщик и так создаст). Констрейнты дадут ощутимые тормоза при закачке данных, вплоть до суток вместо десятков минут. Поэтому я бы склонился к компромиссному варианту - пусть данные предварительно проверяются системой импорта-экспорта, переливаются по промежуточным таблицам и т.д., но на базе аналитики все равно пусть стоят констрейнты.
1) В общем-то я об этом и хотел сказать. А именно: в базе аналитики пусть стоит только то, что ей необходимо для ее работы.
2) Некоторые констрейнты в некоторых случаях все-таки влияют на план выполнения запросов. В таких случаях они реально нужны.
3) (То же самое, но другими словами): БД+СУБД это компонент системы, а значит у него должен быть описанный стандартизованный интерфейс, типа такого: DML возможны только к интерфейсным таблицам (система импорта-экспорта), а запросы - к внутренним таблицам (всем?).
Говорить о том, что некто когда-нибудь может воспользоваться каким-то инструментарием и мимо интерфейса осуществлять DML не считаю корректным. Это хакерство. Не пишите же Вы в коде:
Код: plaintext
1.
2.
a := 'ABC';
IF a is null Then ...
Провера в надежде отсечь попытки влезания в код и модификации данных между указанных строк.
Это дурь. Зачем же такие подходы плодить в БД?
Описывайте интерфейсы, работайте только через них, если СУБД позволяет, то запретите использование неразрешенных входов.

4) В базе аналитики часто используют хранение денормализованных данных (например подсчитанные промежуточные итоги и др.) с целью ускорения выборок. Расчет таких данных - тоже одна из функций подсистемы импорта-эспорта

5) По поводу отключения-включения констрейнтов: строго не рекомендую такой подход. Если не хотите Новый год справлять в офисе с попыткой определить почему не включился констрент и процесс перекачки данных "встал"/"завершился с ошибкой".
И еще: во многих системах некая единица информации складывается из нескольких строк в разных таблицах. Если из-за одной строки не включается констрейнт, то что это значит? Вся логическая единица не верна? А вообще вся закачка верна? Еще один важный вопрос: а как перезакачать ошибочные данные (например, подправили справочники)?
Этот вариант (отключения-включения констрейнтов), скорее всего, приведет к еще большему порождению мусора, либо такие констрейнты с некоторого момента вообще включаться никогда не будут. Разгребание проблем в самой БД-аналитики задача гораздо сложнее (и опаснее - с ней же работают аналитики и могут сделать неправильные выводы), чем работа с интерфейсными данными.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35742975
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Goffmanэто могут быть просто тонкости работы в двух разных компаниях.
Когда мне говорять "есть разные тонкости", я всегда отвечаю:
- Эти "тонкости" в том, что вы используете не все возможные варианты, а только некоторые из них
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35744373
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
explaCane Cat FisherВ 0,1 % случаев они крупно спасут чью-то задницу.

Не гоже разработчику спасать свою задницу таким путём.

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

Ведь бывают же отчёты, которые выводят именно ошибки в данных.


Из процитированного я понял, что Вы якобы утверждаете следующее:

1. Констрейнтов в БД ставить не нужно.
2. Каждый отчет (и прочие приложения) должны сами выполнить все проверки целостности, достаточные для их корректной работы, и обнаружить "критичные для них косяки".
3. Для этого нужно сделать ряд отчетов, которые показывали бы ошибки в данных.

Подписываетесь?
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35744386
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KOT MATPOCKuH
Говорить о том, что некто когда-нибудь может воспользоваться каким-то инструментарием и мимо интерфейса осуществлять DML не считаю корректным. Это хакерство. Не пишите же Вы в коде:
Код: plaintext
1.
2.
a := 'ABC';
IF a is null Then ...
Провера в надежде отсечь попытки влезания в код и модификации данных между указанных строк.
Это дурь. Зачем же такие подходы плодить в БД?


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

Но этот же подход при фанатичном подходе может превратиться в дурь, никак не оправдывающую себя, а лишь отвлекающую ресурсы. Когда именно - зависит конкретно от "величины" и "сложности" системы.

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

KOT MATPOCKuH5) По поводу отключения-включения констрейнтов: строго не рекомендую такой подход. Если не хотите Новый год справлять в офисе с попыткой определить почему не включился констрент и процесс перекачки данных "встал"/"завершился с ошибкой".


Вот этой логики я не понимаю. Получается, что констрейнты не нужны, поскольку все проверки заведомо выполнены другими модулями, и в то же время опасны, поскольку обязательно сработают под Новый год.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35748254
KOT MATPOCKuH
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тема плавно переросла в такую:
при получении данных в систему из внешних источников необходима проверка корректности данных (в т.ч. целостности БД). Обсуждаются два крайних варианта:
1) Проверять данные констрейнтами
2) Проверять специально написанными программами
Я правильно изрек?

Cane Cat FisherKOT MATPOCKuH5) По поводу отключения-включения констрейнтов: строго не рекомендую такой подход. Если не хотите Новый год справлять в офисе с попыткой определить почему не включился констрент и процесс перекачки данных "встал"/"завершился с ошибкой".


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

Как указано выше, 1 и 2 - крайние варианты, в конкретной реализации возможны смешанные варианты.

Кроме того, некоторые констрейнты нужны самой системе-импортеру данных, для собственной работы.

Резюмирую:
а) на вопрос "нужны ли вообще в БД констрейнты?" - отвечаю НУЖНЫ, но с умом!
б) Реализацию проверки корректности данных реализовать проще и качественнее кодом (ИМХО)
в) Проверять данные в отчетах - не производительно и трудоемко для реализации (иногда приходится)

ЗЫ Описанная мною выше технология консолидации данных кроме проверки корректности данных проверяет и разделяет сам процесс перекачки данных, ведь проблемы (теоретически) могут быть на разных участках, с сетью, например... Кроме того, когда делается снимок для перекачки в системе-экспортере нужно бывает максимально быстро его совершить и "отпустить" базу для работы пользователей. Аналогично в системе-импортере - нужно максимально быстро закачать уже проверенные, корректные данные. Отсюда и родилось такое разделение этапов процесса.
...
Рейтинг: 0 / 0
Отсутствие PK, FK....
    #35748287
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KOT MATPOCKuH
Как указано выше, 1 и 2 - крайние варианты, в конкретной реализации возможны смешанные варианты.


Я бы сказал - не только возможны, но и весьма желательны. Вообще, когда речь заходит о крайних вариантах "А давайте все-все сделаем только на {триггерах | процедурах | констрейнтах | XML}" - то обычно замышляют что-то недоброе.

KOT MATPOCKuH
Резюмирую:
а) на вопрос "нужны ли вообще в БД констрейнты?" - отвечаю НУЖНЫ, но с умом!
б) Реализацию проверки корректности данных реализовать проще и качественнее кодом (ИМХО)
в) Проверять данные в отчетах - не производительно и трудоемко для реализации (иногда приходится)


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


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