|
|
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
Всем привет! На новой работе выяснилось что база данных (отнюдь не маленькая как по кол-ву объектов, так и по объемам) построена без PK, FK, все поля NULL. Т.е. перв. ключи есть, но не у всех таблиц и они не заданы декларативно. Есть уникальные индексы на эти поля. ФК тоже присутствуют по факту, но также декларативно не заданы. Все поля нуловские. Ограничений на конкретные столбцы нет. Часто денормализация. Я всегда приводил к 3НФ (без фанатизма), создавал суррогатные ПК (даже у тех таблиц, которым они сейчас казалось бы и не нужны), всегда использовал ссылочную целостность. Всегда старался создавать NOT NULL поля, чтобы избегать постоянных IS NOT NULL/ISNUL()... Кратко - я опирался на эти ограничения и на их основе строил ПО. Здесь ничего этого нет, правда, и задачи здесь сильно отличаются от моих прежних. И самое главное -- все работает уже не один год. И это аргумент неопровержимый. Вот и сталкивается мой успешный опыт с местным успешным опытом :-) Собственно в этой теме я не хочу устраивать спор -- как правильно. Очевидно, что можно построить надежную систему и без единого constraint'а. Мне интересно на сколько часто встречаются системы построенные на таких принципах? Отказались ли от них в силу неудобств или разработка так и продолжается? Какого типа задачи решались (у нас в основном массированная закачка из других систем и аналитика)? Были эти системы централизованные или распределенные (имеются в виду серверная часть)? И дает ли это ощутимый выигрыш в производительности (за счет отсутствия проверок ссылочной целостности)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2008, 11:49 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
в исторической БД сложно иметь PK и FK. а для аналитических приложений ограничения скорее вредны, ведь данные на входе могут быть некачественные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2008, 11:59 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
explaв исторической БД сложно иметь PK и FK. а для аналитических приложений ограничения скорее вредны, ведь данные на входе могут быть некачественные.о-о ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2008, 12:12 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
mysql с движком MyISAM просто не поддерживает ссылочную целостность, а эта БД достаточно распространена авторНа новой работе выяснилось что база данных (отнюдь не маленькая как по кол-ву объектов, так и по объемам) построена без PK, FK, все поля NULL.может быть они её портировали с mysql без изменений ? :) -- „Истина — это вовсе не то, что можно убедительно доказать, это то, что делает всё проще и понятнее“ — Антуан де Сент-Экзюпери ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2008, 12:13 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
Серж пишет: > Мне интересно на сколько часто встречаются системы построенные на таких > принципах? т.е. насколько часто встречаются безграмотно разработанные системы ? Ну, на столько же, насколько часто встречаются безграмотные люди. Бывает. > Отказались ли от них в силу неудобств или разработка так и продолжается? вы можете постепенно добавлять первичные ключи и FK, они ничему не помешают, если данные реально в порядке. PK можно делать из одного из UK, собственно разницы между ними особенно и нет. > Какого типа задачи решались (у нас в основном массированная закачка из > других систем и аналитика)? Это абсолютно неважно, какие задачи решаются. > Были эти системы централизованные или распределенные (имеются в виду > серверная часть)? Тоже неважно. > И дает ли это ощутимый выигрыш в производительности (за счет отсутствия > проверок ссылочной целостности)? Иногда FK не применяют именно из-за невозможности их применения в силу низкой производительности. Но если на FK в дочерней таблице строить индекс, то всё в общем-то в порядке. Ощутимого выигрыша в производительности там в этом случае не будет. А вот если индекса нет, будет серьёзный провал в производительности, в случае наличия FK. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2008, 12:23 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
так ключи все-таки есть? и если без фанатизма и все работает, то ...? паря, строй новые системы как умеешь и не лезь туда, где все отлажено. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2008, 12:26 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
> база данных (отнюдь не маленькая как по кол-ву объектов, так и по объемам) построена без PK, FK Дебилов в этом мире вообще сильно больше, чем нормальных людей. > И самое главное -- все работает уже не один год. И это аргумент неопровержимый. Конечно. И будет работать до первой серьезной проблемы. А потом аргументы уже не понадобятся. Понадобится мыло и веревка. > Очевидно, что можно построить надежную систему и без единого constraint'а. Принципиально невозможно спроектировать ничего сложнее записной книжки без ограничений целостности. Рассматривайте это как факт, без обсуждения. Плохо спроектированные базы данных - это мертвые базы данных. Ноль дополнительного функционала, ноль расширения. Потому как дебила, который это изначально написал, уже не найти. А если и найти, то он наверняка уже поумнел и ему самому будет страшно заниматься редизайном. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2008, 12:55 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
guest_20040621, ты как считаешь, успешный опыт обуреваем жаждой столкнуться с проблемами? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2008, 14:23 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
guest_20040621 пишет: > Принципиально невозможно спроектировать ничего сложнее записной книжки > без ограничений целостности. Рассматривайте это как факт, без обсуждения. > Да нет, к сожалению возможно. > Плохо спроектированные базы данных - это мертвые базы данных. Ноль > дополнительного функционала, ноль расширения. Потому как дебила, который > это изначально написал, уже не найти. А если и найти, то он наверняка Я бы сравнивал их с "зомби": шевелятся, делают вид, что работают ... но дохлые. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2008, 14:44 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
Серж1. Мне интересно на сколько часто встречаются системы построенные на таких принципах? 2. Отказались ли от них в силу неудобств или разработка так и продолжается? 3. Какого типа задачи решались (у нас в основном массированная закачка из других систем и аналитика)? 4. Были эти системы централизованные или распределенные (имеются в виду серверная часть)? 5. И дает ли это ощутимый выигрыш в производительности (за счет отсутствия проверок ссылочной целостности)? Говоря за свою... 1. Несколько сотен инсталляций. 2. Нет конечно. Ведь всё работает. 3. OLTP. 4. БД централизованная. Но система взаимодействует с кучей внешних систем (дилеры, приём платежей). 5. Скорее нет, всё равно какие то проверки приходится делать, но менее эффективными способами. Другое дело, когда исходные данные уже проверены. NOT NULL мы конечно используем. Для реальных данных сложно вводить какие либо ограничения. Рано или поздно в силу изменений в бизнесе или от бардака находятся такие сведения, которые не проходят проверку. В лучшем случае производится разбирательство и исправление, в худшем, в систему вводятся фальсифицированные сведения (лишь бы съела). В такой ситуации хуже всего удалять ограничения целостности, поскольку разработчики (чтобы упростить себе жизнь) уже могли завязать на них свой код. В общем, я постепено прихожу к мнению, что использовать системные механизмы СУБД (такие как декларативные ограничения целостности, транзакции) нужно для реализации системных механизмов приложения (например для реализации элементарных изменений объекта, или для поддержки пользовательских типов данных), где правила диктует не бизнес а разработчик. Бизнес транзакции, проверки бизнес правил должны стать заботой приложений, которые изменять гораздо легче, чем БД с большой историей. Программировать приложения для таких БД сложнее, однако и возможностей для конфигурирования и модификации системы становится значительно больше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2008, 14:50 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
Valentin Kotelnitski guest_20040621, ты как считаешь, успешный опыт обуреваем жаждой столкнуться с проблемами? Голословные утверждения. Лично я не слышал, чтобы какой нибудь программист повесился из-за своей ошибки. Ограничения целостности это палка о двух концах. С одной стороны они повышают качество данных, с другой, они могут мешать приложениям выполнять свои функции. В частности ошибочно введённые ограничения, это такая же проблема, как кривые данные. Отличаются только подходы к исправлению ситуации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2008, 15:04 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
mcureenabЛично я не слышал, чтобы какой нибудь программист повесился из-за своей ошибки. я вот тоже не стреляюсь о топикстартере: я так понял, что парень рвется в бой, но ему, чем самому что-то сваять, видимо проще раскритиковать чью-то систему Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2008, 15:15 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
Valentin Kotelnitski, да не он первый. Я поначалу тоже думал, что ограничения целостности это сплошное благо. Но когда создал такое ограничение, которое по ходу ещё и не позволяло удалять записи усомнился. :) Много гемора было с тестированием, потому как приходилось генерить только исключительно правильные данные и применять их правильными транзакциями. Потом, так же как автор, столкнулся с системой, где тоже на мой взгляд было много неправильного, но система работала и работает и работать будет. Постепенно вник в тему и всё встало на свои места. Все эти штучки, как болты и заклёпки. Сборка на болтах ремонтопригодна, но ненадёжна, на заклёпках надёжнее, но разбирать сложно, а монокок это вообще верх функционального совершенства, но если он ломается, то ремонту не подлежит и модернизировать его нельзя. Коммерческий успех системы зависит не от количества ограничений целостности в БД, а от того, насколько грамотно они применяются или не применяются в тех или иных ситуациях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2008, 15:36 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
Помню, как был озадачен мой ПМ,когда не обнаружил FK в БД MS Projects.Долго приставал с вопросами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2008, 18:19 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
MasterZivбезграмотно разработанные системы... зачислить в разряд "безграмотных" это легко. Мне интересно понять, вдруг там сокрыт какой-то глубокий смысл, а я его не замечаю :) MasterZivвы можете постепенно добавлять первичные ключи и FKСейчас это уже невозможно. Кода столько, что никто не сможет поручиться, что произойдет при добавлении ФК. guest_20040621Принципиально невозможно спроектировать ничего сложнее записной книжки без ограничений целостностиИменно так всегда и считал. Но используют же люди MySQL, а там (как подсказывает Ёш) этого механизма может и не быть. Valentin Kotelnitskiстрой новые системы как умеешь и не лезь туда, где все отлажено. ... я так понял, что парень рвется в бой, но ему, чем самому что-то сваять, видимо проще раскритиковать чью-то систему Валентин, в твоих поучениях и домыслах я не нуждаюсь. Это первое. Второе, вопросы я задал конкретные к тем, у кого опыт есть. Если есть что сказать по существу - велкам. Если нет, лучше научите своих подчиненных чему-нибудь полезному. Ёш, нет, на сколько я знаю, MySQL там не водился :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.12.2008, 18:50 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
Серж пишет: > ... зачислить в разряд "безграмотных" это легко. Мне интересно понять, > вдруг там сокрыт какой-то глубокий смысл, а я его не замечаю :) Вы же сами сказали, что во многих таблицах есть UNIQUE. почему бы один из них не сделать PK ? Какая разница-то ? Но вот не сделали. Почему ? Либо не знали, что PK обязательно должен быть, либо > Сейчас это уже невозможно. Кода столько, что никто не сможет поручиться, > что произойдет при добавлении ФК. Ну так не добавляйте FK пока, добавляйте PK. Да и FK можно в любой момент дропнуть ежели что. > Именно так всегда и считал. Но используют же люди MySQL, а там (как > подсказывает Ёш) этого механизма может и не быть. Он там есть в InnoDB. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2008, 01:02 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
Сергвопросы я задал конкретные вопросы ты задал собирательно-обобщающие Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2008, 08:11 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
guest_20040621> Очевидно, что можно построить надежную систему и без единого constraint'а. Принципиально невозможно спроектировать ничего сложнее записной книжки без ограничений целостности. Рассматривайте это как факт, без обсуждения. А кто сказал, что проектировали без PK, FK и др.? Вполне возможно, что проектировали - "по уму", а потом занялись тюнингом производительности и пожалуйста, снесли констрейнты. Особенно, если констрейнты по факту реализованы на клиенте или в процедурах модификации данных, то зачем их дублировать штатными средствами БД? Только для тормозов, потому что фактически они проверяют всегда корректные данные. Многие, прочитав мною написанное, сразу начнут говорить про развитие системы, подключение внешних клиентов и т.д. и т.п.... Да, знаю! А может разработчик не хочет облегчать жизнь других разработчиков/админов?! Нужно развитие - "велком снова ко мне" :) Такая ситуация на самом деле не редка. Оракл апликешн, например, содержит крайне мало констрейнтов. Почти нет FK. Считаете, что оракл не умеет проектировать системы? Или Oracle E-Buissines Suite не сложнее записной книжки??? Я не призываю ни к чему, просто некая констатация некоторых фактов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2008, 09:33 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
guest_20040621, ну да, ну да... А если посмотреть на FoxPro + Btrieve разработчиков банковских информационных систем середины 90х прошлого века, то все сплошь дебилы... Короче, не надо ля-ля на счёт записных книжек. Плохому танцору FK не поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2008, 14:08 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
Серж Здесь ничего этого нет, правда, и задачи здесь сильно отличаются от моих прежних. И самое главное -- все работает уже не один год. И это аргумент неопровержимый. Раньше в провинции всякие там ораклы стали диковинкой с приходом всяких там роботронов и атишек. Но были такие ынтересные вещи как борланд дельфи с локалскл, которые работали с табличками, которые были созданы на всяких там клипперах. Щоб не отставать народ переписывал с клипперов на эти локалскли всякие там бухгалтерии и торговли не трогая таблички (параллельно раотали старые и новын машинки, досы с виндовсами и ос/2 вкупе с новелями). Пашут лет 20. Это точно. БАЛАНС ТОЧНО ТАКОЙ ЖЕ КАК И у других джав и нетов с их субдшками с их констрейнтами на СЕРВЕРНОЙ стороне. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2008, 16:52 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
> ну да, ну да... В середине девяностых была куча технологий, пригодных для промышленного применения. И ни одна из них не называлась FoxPro. > то все сплошь дебилы... Не обязательно. Есть люди, так и оставшиеся в середине девяностых. Если им там нравится - отлично. Только при этом делиться мыслями из середины девяностых нужно очень аккуратно и тщательно выбирая аудиторию из подобных себе. Чтобы нормальные люди это не видели и не слышали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2008, 17:03 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
guest_20040621> ну да, ну да... В середине девяностых была куча технологий, пригодных для промышленного применения. И ни одна из них не называлась FoxPro. Была. Где то там... А где то здесь народ покупал или тырил FoxPro, NetWare, ещё хрен знает что, и за скромное вознаграждение решал промышленные задачи подручными средствами. Конечно, в XXI веке задачи стали значительно сложнее тех, что решались в XXм, однако и в XX народ не куличики лепил и вполне успешно. И проблема 2000 года оказалась не смертельной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2008, 17:55 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
Коллеги, чего мучаетесь? :И самое главное -- все работает уже не один год. И это аргумент неопровержимый. Кругом ещё полно систем ждущих Вашего "мудрого" решения. Прелесть то в том и заключается что всё что однажды сделано "неправильно" - потенциально хороший кусок работы для Вас и Ваших детей. Вдумайтесь - почему Американцы НИЧЕГО не строят НАВЕКА - фундаментально? Да всё очень просто - мы думаем о наших ПОТОМКАХ - мы знаем что надо и им оставить нечто чтоб построить (или отремонтировать). Так ЗАЧЕМ отсраивать фундаментальные вещи если максимум через 10-15 лет (по айтишным меркам) камня на камне не останется от сегодняшних технологии, бизнеса, заклёпок, болтов и так далее. IBM на сегодня почти Мумия. Оракл и Мелкомягкий с CA в купе - седовласые реликты, а всего то им по 25 лет отроду. Вот помню DEC был с Алфой процессором и технологиями так и не пробравшимися в ХХ век... вот дети наши покапаются в исторических справках и разбомбенят всю теорию реляционной базы. Сведут всё в формат объектно-ориентированных баз и кому тогда вообще все ключи нужны будут... так что как сказал бы мой любимый герой Остап Ибрагимович - расслабьтесь и получайте удовольствие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2008, 18:19 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
авторВдумайтесь - почему Американцы НИЧЕГО не строят НАВЕКА - фундаментально? Да, ладно уж.Вы американцы-просто жадины,ваши дети с Кобола переписывать будут,если мы не все к тому времени успеем ;-) Из этой серии понравилась история.В Англии был сильный ураган и повалило все столбы электропередач, кроме одной компании, где проектировщик был из России.Англичане посчитали, что такие страсти бывают раз в 115 лет и экономически невыгодно делать такие опоры на случай ядерной войны.Парня уволили, а нас медальку дали бы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2008, 20:17 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
SeVaВы американцы-просто жадины не так всё просто, Коллега. как ни странно на островах где по многу раз в год бушуют ураганы выживают в основном лёгкие и разборные домишки. А вот "фундаментальные" постройки никогда не бывают доведены до разумной кондиции. В Америку в начале XX века тогдашние "Новые Американские" понавозили зАмков из Вечного города Рима. на разборку и перевозку таких домов выделялись миллионы долларов и годы работы. Эти зАмки не выдержали конкуренции с природой. А вот разборные домишки разрушаются за часы и выстраиваются за дни - и пожалуйста живи опять... А вы говорите "Жадность". Разумная осторожность будет более подходящим термином на мой взгляд. Или вот - Лучшее Враг Хорошего.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2008, 20:51 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
Быстрее-целесообразность и умение считать деньги.Какая разница на чем написана и на каком железе крутится,если устраивает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2008, 23:37 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
Mr Marmelad А вот разборные домишки разрушаются за часы и выстраиваются за дни - и пожалуйста живи опять... А вы говорите "Жадность". Хм. ИМХО, всё дело в страховке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2008, 23:45 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
SeVaБыстрее-целесообразность и умение считать деньги.Какая разница на чем написана и на каком железе крутится,если устраивает Есть тонкий момент - имидж. Технологии и продукты, которые у всех на слуху, такие как Linux, WEB, XML, Java, .NET делают продукт более привлекательным даже при отсутствии технической целесообразности их использования. Акции компании могут возрасти уже только потому, что она использует или разрабатывает продукты на какой нибудь популярной платформе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2008, 00:12 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
Имидж-из нашей бочки:навороченный cмартфон на последние шиши в кредит для только позвонить,галстук у простого клерка дороже, чем вся экипировка у забугорного CIO etc. Если Linux повышал бы стоимость,давно бы все на нем сидели. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2008, 01:30 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
SeVaЕсли Linux повышал бы стоимость,давно бы все на нем сидели. Linux, это для энтузиастов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2008, 14:53 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
explaSeVaЕсли Linux повышал бы стоимость,давно бы все на нем сидели.Linux, это для энтузиастов.А винда - для мазохистов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2008, 00:57 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
BelyexplaSeVaЕсли Linux повышал бы стоимость,давно бы все на нем сидели.Linux, это для энтузиастов.А винда - для мазохистов. Windows для профессионалов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2008, 04:04 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
expla, н узря ты это для профи все по фиг ос 3.0 или ос/2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2008, 04:12 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
Серж Я всегда приводил к 3НФ (без фанатизма), создавал суррогатные ПК (даже у тех таблиц, которым они сейчас казалось бы и не нужны), всегда использовал ссылочную целостность. Всегда старался создавать NOT NULL поля, чтобы избегать постоянных IS NOT NULL/ISNUL()... Кратко - я опирался на эти ограничения и на их основе строил ПО. Здесь ничего этого нет, правда, и задачи здесь сильно отличаются от моих прежних. И самое главное -- все работает уже не один год. И это аргумент неопровержимый. Вот и сталкивается мой успешный опыт с местным успешным опытом :-) Собственно в этой теме я не хочу устраивать спор -- как правильно. Очевидно, что можно построить надежную систему и без единого constraint'а. .... у нас в основном массированная закачка из других систем и аналитика Вы преподносите эту систему как нечто необычное. Но вы сами подумайте, зачем этой системе иметь констрейнты. Все данные уже сформированы в других системах, осталось только закачать их и построить аналитические запросы. О констрейнтах нужно было заботится в системе, где вводится информация, а в данном случае мне думается разработчики поступили совершенно адекватно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2008, 06:45 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
Goffman +1 Добавлю, констрейнты в такой системе существуют только чтобы она тормозила, другой цели - нет. Если нада показать начальству, что железо надо бы улучшить, то - вперед, создавайте все мыслимые и не мыслимые констрейнты (только не перестарайтесь, система должна работать) тормоза обязательно будут!!! ЗЫ Вообще-то мне очень стыдно писать такие рекомендации, но, надеюсь меня поймут правильно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2008, 10:27 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
Констрейны нужны. вот почему. 1. В БД данные могут попасть любым способом, через Сервер Приложений, Федерацию, Через запросы в этой же базе, Импорт из csv фала и т.д. И во всех этих случаях не возможно учесть ограничения на данные, лучше чем констрейны здесь ни кто не справиться. 2. При использовании связи в БД, а не декларативно в коде, всегда понятно что с чем связанно. Легче запросы писать (Есть у вас есть ПК в таблице? вы уже знаете что запрос дубляж не вернет). 3. Ну и они еще на некоторых СУБД помогают при оптимизации. Ну и на последок представте что БД это тоже своего рода сервер. А Серевера приложений клиенты. Вы же на сервере (т.е. БД) должны проверять то что вам прислал клиент (приложение на сервере приложении, прямое соединение через JDBC и т.д. и т.п.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2008, 12:52 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
olzhas, 1. в настоящее время декларативные ограничения целостности поддерживаемые СУБД далеко не всегда позволяют описать все инварианты модели данных. Так что на долю прикладного кода остаётся достаточно работы по проверке данных. 2. для описания БД служит проектная и эксплуатационная документация. Опять таки в силу ограниченности возможностей СУБД вы не сможете описать все свойства данных на только уровне ограничений целостности. 3. иногда помогают, иногда мешают. если помогают, то от чего ж их не использовать... речь то о том, что тут они скорее мешают. 4. БД в силу своей пасивной природы не может быть сервером. Сервер, это СУБД. А проверять данные нужно лишь в той мере, в какой это необходимо для корректной работы системы. Для БД существенно лишь соответствие данных структуре хранилища и типам полей записей, чтобы СУБД могла корректно извлечь эти данные из файлов БД и предоставить эти данные пользователю. Остальное, это подпорки для логики приложений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2008, 14:09 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
olzhasКонстрейны нужны. вот почему. .... Я не сказал что констрейнты не нужны в принципе. И не зря выделил жирным шрифтом назначение системы массированная закачка из других систем и аналитика . Представьте придет из какой-нибудь дочерней компании к вам 5-мег файл данных. вы начинаете его импортировать и вдруг бац, "UNIQUE CONSTRAINT". Что будете делать? Искать выпавшую запись и наводить разборки? а если этих записей десяток-другой по разным причинам? Если в дочерней компании поменялась бизнес-логика и ваши констрейнты в головном офисе ей уже не отвечают? Если набор констрейнтов в одной системе противоречит набору констрейнтов другой системы? Нужен этот гемор? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2008, 14:54 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
explaolzhas, 1. в настоящее время декларативные ограничения целостности поддерживаемые СУБД далеко не всегда позволяют описать все инварианты модели данных. Так что на долю прикладного кода остаётся достаточно работы по проверке данных. Согласен не все, однако можно задейсвовать хранимые процедуры, UDF. (Я к этому не призываю, это как контр аргумент) expla 2. для описания БД служит проектная и эксплуатационная документация. Опять таки в силу ограниченности возможностей СУБД вы не сможете описать все свойства данных на только уровне ограничений целостности. А всегда ли эта документация есть? Актуально ли она? И еще очень много проблем с документации, да и вообще кто ее читает? Да возможности Костреинов ограничены, но они и не признаны решать все проблемы. Мы же говорим о простых вещах, как целостность БД(первичные и вторичные ключи, ключи уникальности). expla 3. иногда помогают, иногда мешают. если помогают, то от чего ж их не использовать... речь то о том, что тут они скорее мешают. Мешают в чем, в производительности? Да, вставка(или другая операция) будет дольше, но все равно вы это время же потратите на сервере приложении и еще где нибудь. expla 4. БД в силу своей пасивной природы не может быть сервером. Сервер, это СУБД. А проверять данные нужно лишь в той мере, в какой это необходимо для корректной работы системы. Для БД существенно лишь соответствие данных структуре хранилища и типам полей записей, чтобы СУБД могла корректно извлечь эти данные из файлов БД и предоставить эти данные пользователю. Остальное, это подпорки для логики приложений. А что вы подразумеваете под словом сервер? Давайте выкиним и связки сервер приложений и построим обычную двух звенку, И что по вашему в этом случае будет сервером? СУБД расшифровывается как Система Управления Базами Данных, она должна управлять данными, а не быть просто хранилищем. Да и вообще считаю, что спорить бессмыслено. Все постигается в Практике, вот у меня задача, как раз такая. Такое ощущение, что проектировщик при проектировании вообще не понимал значения ключей. Теперь вот разбираюсь с этим бардаком. Не спорю можно и в Сервере приложении все так разработать, что будут работать как часики, а БД использовать просто что бы быстро достать данные. Но я же все таки склоняюсь к возможностям БД, на мой взгляд это правильнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2008, 14:57 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
лучше гемор, чем превращение БД в хранилище мусора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2008, 14:57 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
Goffman, Вы мене напомнили один случай, у нас тоже заливка из других систем при чем миллионами записей. Начали заливать, опа ключ мешает. Что делать?! Снесли ключ залили данные. Все задачу выполнили. А потом через пол годика выходит а от куда тут эти данные, а почему данные по 2 раза залились и т.д. и т.п. На счет противоречий контстрейнов, с начало нужно констрейны в порядок привести, а потом уж и данные перегонять. Вы когда поле в таблице из null -> not null переводите вам база что говорит (при условии что есть нулевые записи)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2008, 15:02 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
egorychлучше гемор, чем превращение БД в хранилище мусора. +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2008, 15:03 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
egorychлучше гемор, чем превращение БД в хранилище мусора. Громко сказано. С чего вы взяли что непременно будет хранилище мусора? Если можете, прокоментируйте проблемы , которые я озвучил, можно будет более предметно тему обсудить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2008, 15:11 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
olzhas Вы когда поле в таблице из null -> not null переводите вам база что говорит (при условии что есть нулевые записи)? Не забывайте, что вы не можете контролировать данные, они к вам поступают из внешних систем в виде дампа. Следовательно следить за чистотой данных обязана внешняя система, а не система закачки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2008, 15:15 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
GoffmanПредставьте придет из какой-нибудь дочерней компании к вам 5-мег файл данных. вы начинаете его импортировать и вдруг бац, "UNIQUE CONSTRAINT". Что будете делать? Искать выпавшую запись и наводить разборки? а если этих записей десяток-другой по разным причинам? С декларативными ограничениями или без оных приложение должно быть заточено на обработку таких ситуаций (в первом случае нужно обрабатывать исключение, во втором проверять и отбрасывать записи самостоятельно). Определённо ошибки в данных проще искать и исправлять когда они уже лежат в БД, а не в сыром файле. Практически есть ошибки которые удобно и эффективно отлавливать на уровне СУБД. Тот же самый UNIQUE удобно ловить на этапе добавления записей, тогда как после добавления записи для проверки нам может потребоваться перелопатить очень большой объём данных. С другой стороны гарантировать выполнение ограничений можно и другими, иногда очень простыми и эффективными средствами. Goffman Если в дочерней компании поменялась бизнес-логика и ваши констрейнты в головном офисе ей уже не отвечают? Если набор констрейнтов в одной системе противоречит набору констрейнтов другой системы? Тут имеет место ошибка проектирования взаимодействующих систем. Даже если удасться впихнуть данные в БД целевой ситемы, не факт, что её приложения смогут их обработать. Если уж делать декларативные ограничения целостности, то для того, чтобы их реально использовать в runtime, а не на всякий случай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2008, 15:19 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
Goffmanolzhas Вы когда поле в таблице из null -> not null переводите вам база что говорит (при условии что есть нулевые записи)? Не забывайте, что вы не можете контролировать данные, они к вам поступают из внешних систем в виде дампа. Следовательно следить за чистотой данных обязана внешняя система, а не система закачки. Ну это ты загнул... Всё зависит от контракта между системами. Как контракт составлен так и должно быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2008, 15:22 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
если при GoffmanЕсли в дочерней компании поменялась бизнес-логика и ваши констрейнты в головном офисе ей уже не отвечают? Если набор констрейнтов в одной системе противоречит набору констрейнтов другой системы? вы всё равно закачиваете данные в свою базу, то она становится хранилищем мусора по-определению. Потому что вы загружаете в свою базу данные, противоречащие вашим бизнес-требованиям. второй момент: GoffmanСледовательно следить за чистотой данных обязана внешняя система, а не система закачки. внешняя система в общем случае ничего не знает о системе ограничений в вашей базе данных. Более того, она и не должна этого знать и даже более того, ей это должно быть вообще по-барабану. Правильность и непротиворечивость данных в вашей базе данных должны обеспечить вы, как DBA, именно за это вам и платят, если вы, конечно, DBA кстати говоря, первая цитата противоречит второй, вы не находите? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2008, 15:29 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
в целом, склонен согласиться с expla ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2008, 15:33 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
egorychесли при GoffmanЕсли в дочерней компании поменялась бизнес-логика и ваши констрейнты в головном офисе ей уже не отвечают? Если набор констрейнтов в одной системе противоречит набору констрейнтов другой системы? вы всё равно закачиваете данные в свою базу, то она становится хранилищем мусора по-определению. Потому что вы загружаете в свою базу данные, противоречащие вашим бизнес-требованиям. Извините, но бред... Вы представляете себе хотя бы примерно, для каких целей создаются аналитические системы? И чем аналитическая ИС принципиально отличается например от системы учета? (без обид) egorych второй момент: внешняя система в общем случае ничего не знает о системе ограничений в вашей базе данных. Правильно, поэтому разработчики системы (описанной в первом посте), и не стали вводить никаких ограничений. egorych Более того, она и не должна этого знать и даже более того, ей это должно быть вообще по-барабану. Ну это вы уж загнули, а выгрузку она для кого делает? На деревню к дедушке? egorych Правильность и непротиворечивость данных в вашей базе данных должны обеспечить вы, как DBA, именно за это вам и платят, если вы, конечно, DBA Ошибаетесь я занимаюсь разработкой, а не администрированием. egorych кстати говоря, первая цитата противоречит второй, вы не находите? Ничуть, вдумайтесь что сказал автор. Данные собираются из разных ИС. Например в первой системе номер документа обязан быть уникальным в пределах всей БД. А во второй системе номер может быть начинаться заново каждый год. А вам нужно закачать данные из таблиц разных ИС, в одну таблицу аналитической системы. Какое ограничение в данном случае Вы наложите на номер документ? а? egorych в целом, склонен согласиться с expla Вы можете соглашаться друг с другом сколько хотите, но то что описанная автором топика система долгие годы работает без всяких проблем, подтверждает мою правоту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2008, 20:22 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
expla Определённо ошибки в данных проще искать и исправлять когда они уже лежат в БД, а не в сыром файле. Практически есть ошибки которые удобно и эффективно отлавливать на уровне СУБД. Тот же самый UNIQUE удобно ловить на этапе добавления записей, тогда как после добавления записи для проверки нам может потребоваться перелопатить очень большой объём данных. Для проверки чего? Какие основания сомневаться в чистоте переданных данных? Все ограничения и прочие бизнес-правила УЖЕ заложены во внешнюю систему. Данные во внешней системе хранятся в соответствии с этими БП. Если мы выгружаем данные из системы, то мы можем быть уверены, что данные уже содержат все необходимые ограничения, так для чего эти правила еще дублировать в аналитике. Аналитика - это совершенно другой класс задач. expla С другой стороны гарантировать выполнение ограничений можно и другими, иногда очень простыми и эффективными средствами. Согласен :) expla Goffman Если в дочерней компании поменялась бизнес-логика и ваши констрейнты в головном офисе ей уже не отвечают? Если набор констрейнтов в одной системе противоречит набору констрейнтов другой системы? Тут имеет место ошибка проектирования взаимодействующих систем. Даже если удасться впихнуть данные в БД целевой ситемы, не факт, что её приложения смогут их обработать. Если уж делать декларативные ограничения целостности, то для того, чтобы их реально использовать в runtime, а не на всякий случай. Мне думается, если системы выполняют свои задачи, то никакой ошибки проектирования нет. Конечно не факт, для того чтобы приложения смогли работать, нужно грамотно все спроектировать и разработать. Но отсутвие PK и FK совсем не говорит о безграмотности разработчика. Он вероятно предвидел все возможные проблемы связанные с констрейнтами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2008, 20:56 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
Goffman Он вероятно предвидел все возможные проблемы связанные с констрейнтами. Скорее он предвидел проблемы связанные с их отсутствием. Просто дискуссия немного оторвалась от контекста аналитики и ушла в область ограничений целостности вообще. Высказывание на счёт "массированная закачка из других систем" не верно. Суть не в количестве данных, а в их качестве, т.е. опять же в соблюдении контракта программирования. Если данные по сути не требуют проверки, то и не надо тратить на это время. Если данные могут содержать критичные ошибки, то их надо проверять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2008, 21:19 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
Goffman expla Goffman Если в дочерней компании поменялась бизнес-логика и ваши констрейнты в головном офисе ей уже не отвечают? Если набор констрейнтов в одной системе противоречит набору констрейнтов другой системы? Тут имеет место ошибка проектирования взаимодействующих систем. Даже если удасться впихнуть данные в БД целевой ситемы, не факт, что её приложения смогут их обработать. Если уж делать декларативные ограничения целостности, то для того, чтобы их реально использовать в runtime, а не на всякий случай. Мне думается, если системы выполняют свои задачи, то никакой ошибки проектирования нет. Конечно не факт, для того чтобы приложения смогли работать, нужно грамотно все спроектировать и разработать. Так ты определись, выполняют или нет. Если БД не принимает информацию, это проблема, но удаление ограничений целостности скорее всего её не решит (ведь создавались они не для того чтобы продемонстрировать грамотность разработчика). Если приложения не умеют работать с новыми данными, придётся и их дорабатывать. Другое дело, что аналитические приложения должны быть по возможности толерантны к такого рода изменениям в бизнесе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2008, 21:26 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
expla, Я же привел пример противоречия, в одном из предыдущих постов, когда системы по своему хорошие, но данные в одну таблицу с ограничением на уникальность запихнуть невозможно. Тут нет никакой ошибки проектирования, это могут быть просто тонкости работы в двух разных компаниях. А от аналитики я не отрывался, с вашего позволения, я в каждом своем посте подчеркивал что отстутсвие ограничений в таблицах вполне возможно именно для этого класса задач. Вы представьте что данные стекаются из 50 филиалов (или цехов) и в каждом свои тонкости. При этом внешняя система развивается, и любое изменение какого нибудь важного констрейнта в каком нибудь филиале может легко сломать всю систему констрейнтов выстроенную в аналитике. Получается что, что филиал после изменения каких то своих бизнес-правил должен немедленно сообщать в центр, чтобы там успели перед загрузкой привести констрейнт в новое актуальное состояние. Потому что если они забудут это сделать, а руководство будет долбить "цигель цигель конец месяца", вам придется все ограничения отключать и закачивать как есть. Конечно при желании можно работать и так, но мне думается что на практике это очень неудобно. Дублирование функционала неадекватно увеличивает стоимость сопровождения системы. Гораздо проще организационными мерами заставить филиалы выдавать чистую информацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.12.2008, 22:08 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
Goffmanexpla, Я же привел пример противоречия, в одном из предыдущих постов, когда системы по своему хорошие, но данные в одну таблицу с ограничением на уникальность запихнуть невозможно. Тут нет никакой ошибки проектирования, это могут быть просто тонкости работы в двух разных компаниях. Ну что ты всё вокруг да около. Если системы криво взаимодействуют (не важно в целом или в тонкостях), значит их криво спроектировали, в данном случае с точки зрения интеграции. Вообще, применительно ко всем системам, система долна иметь как можно более слабые предусловия и как можно более сильные постусловия. Это залог успеха построения систем без ошибок, в том числе и в плане интеграции. Навешивание ограничений целостности на БД противоречит первой части правила, но одновременно способствует выполнению второй части правила. Хорошая БД как обчно находтся гдето между двумя крайностями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2008, 04:35 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
Ладно по третьему кругу пошли, с Наступающим! :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2008, 06:00 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
Goffman Дублирование функционала неадекватно увеличивает стоимость сопровождения системы. Гораздо проще организационными мерами заставить филиалы выдавать чистую информацию. Отсутствие констрейнтов может увеличить стоимость сопровождения системы в другом месте. Например, есть большая таблица - какая-то ведомость продаж, и к ней куча справочников-классификаторов - товары, контрагенты, всякие опции и т.д. По идее филиал должен согласовывать справочники с центром, и все должно быть хорошо. Но предположим, что произошла организационная ошибка - рассогласование справочников. Если в центральной БД есть соответствующие констрейнты (FK) - то имеем: ошибка обнаруживается администратором загрузки немедленно, сотрудники принимают осмысленные организационный меры к исправлению - либо временно отбрасывают плохие записи, с уведомлением заинтересованных лиц, что в отчете по продажам временно отсутствуют данные по рассогласованным позициям, и в налоговую везти их нельзя - либо временно снимают констрейнт, и получают дополнительные отчеты, четко понимая, какие из них верны срочно согласовывают справочники барышня на справочниках получает трындюлей программисты - ничего администратор загрузки - премию за своевременное обнаружение ошибки. Если в центральной БД нет соответствующих констрейнтов - то имеем: загрузка присходит успешно заинтересованные лица получают красивые отчеты по продажам, сдают в налоговую случайно обнаруживается расхождение итогов между отчетами в разрезе товаров, и в разрезе контрагентов зовут программистов, ейными отчетами им в харю тычут. после кучи суматошных проверок под бодрящие окрики начальства они находят в ведомости коды товаров, отстутствующих в справочнике, озвучивают проблему. сотрудники принимают осмысленные организационный меры к исправлению срочно согласовывают справочники начальство едет в налоговую проситься пересдавать отчеты после срока, привозит штрафы и мешок трындюлей. барышня на справочниках получае трындюлей, программисты - трындюлей, администратор загрузки - по идее ничего, на практике - трындюлей за компанию. Предвидя повторение ситуации, программисты во всех случаях, когда "По идее филиал должен согласовывать справочники с центром, и все должно быть хорошо", предвидят худшую ситуацию, и сотнями переписывают все связи во всех SQL-запросах на OUTER JOIN'ы, что усложняет систему и... (недостатки укажите сами). Именно это я подразумевал в первом предложении - отсутствие констрейнтов может увеличить стоимость сопровождения системы в другом месте. Ведь если доводить ситуацию до абсурда, то и в филиале констрейнты необязательны - они усложняют сопровождение системы в меняющихся бизнес-правилах, и гораздо проще организационными мерами заставить операторов вводить верные данные. Поставить немца с указкой, чтоб бил по рукам за "дер неправилен адресс". Но констрейнты для того и нужны, чтобы обнаруживать ошибки одних людей, и давать возможность другим людям строить запросы в убеждении, что данные подчинены определенным правилам. Вместо рассогласования справочников предположите, что филиал в своем справочнике снял констрейнт уникальности с кода товара и набил дублей - результаты запросов в центре будут еще веселее. Поэтому все-таки нужно выделить некий минимальный набор ограничений, в расчете на который строятся запросы, и поддерживать его как в филиалах, так и в центре. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2008, 12:11 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
Cane Cat Fisher, хороший пример нехорошей системы! Нехорошесть заключается в основном в том, что заливка занных из филиалов идет в рабочие таблицы. Как сказал непомню кто - за это расстрел на месте. Долгими мытарствами пришел к следующей архитектуре по интеграции систем: 1) Система экспортер готовит пакет выгрузки данных. 2) Данные переливаются в интеграционные таблицы, записи которой преобретают (как минимум) два дополнительных поля: экземпляр пакета/перекачки, статус записи 3) Идентификация данных: для данных перелитых из гетерогенных источников определяются значения полей в системе-импортере, доопределяюся другие параметры, определяется корректность данных. Для этого шага иногда создаются достаточно сложные экспертные системы по определению корректных данных (если такова воля заказчика). Был даже случай, когда из 420 ошибок ввода система пропустила только 7 4) в систему-импортер, точнее в рабочие таблицы заливаются только корректные данные из экспортных таблиц. На каждом шаге, начиная со второго статусами записей определяется прохождение шагов для записей, а также корректность данных записи. Кроме этого, не перелитые данные всегда можно позже проанализировать. Данная архитектура не лишена недостатков, но большенство часто-случающихся проблем в ней нет. Возвращаясь к теме: система-импортер предназначена для аналитики, а значит функциональность системы перекачки и контроля данных ей особо не нужна, а когда начинает серьезно влиять на производительность, то ее (функциональность по контролю качества данных) нужно гнать из основной системы поганой метлой - в отдельную функциональность. Тем более, что не факт, что требования к закачиваемым данным полностью одинаковы с требованиями к данным в системе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2008, 13:15 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
KOT MATPOCKuH, я полностью согласен, что если в систему консолидации данных входит мощная подсистема экспорта-импорта, с экспертной системой по проверке даных, то подсистема аналитики может не заморачиваться проверкой данных. Но скажите мне честно, как кот коту - неужели Вы думаете, что автор вопроса имел в виду именно такую ситуацию? Я как-то не вижу намеков на это, а потому больше склоняюсь к мысли о бездумном переносе с MySQL или DBF, что достойно сожаления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2008, 14:34 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
Cane Cat Fisherнеужели Вы думаете, что автор вопроса имел в виду именно такую ситуацию?Интересно, а что автор подразумевал под этой фразой? авторИ самое главное -- все работает уже не один год. И это аргумент неопровержимый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.12.2008, 15:58 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
Cane Cat FisherKOT MATPOCKuH, я полностью согласен, что если в систему консолидации данных входит мощная подсистема экспорта-импорта, с экспертной системой по проверке даных, то подсистема аналитики может не заморачиваться проверкой данных. Но скажите мне честно, как кот коту - неужели Вы думаете, что автор вопроса имел в виду именно такую ситуацию? Я как-то не вижу намеков на это, а потому больше склоняюсь к мысли о бездумном переносе с MySQL или DBF, что достойно сожаления. А подсистема экспорта-импорта вовсе не обязана быть супер-мега крутой. Эламентарная проверка корректности данных, например, даты или заполненность ключевых полей - проверить весьма не сложно. Простой пример: в перекачке (так ее назовем) основное - некая таблица с рабочими данными, но имеет FK (логический) на небольшой справочник. Проще в перекачку кинуть весь этот справочник (из системы-экспортера). Тогда в подсистеме экспорта-импорта нужно проверить для всех ли получаемых данных в этом справочнике в системе-импортере есть аналогичные записи. Если нет - добавить их туда с требованиями системы-импортера (например там больше полей) и для основной рабочей таблицы подправить (если нужно) идентификаторы-ссылки на обновленный справочник. А если в тупую заливать таблицы по-порядку в систему с констрейнтами, то далеко не всегда угадаешь с правильным порядком заливки таблиц и порядком заливки в них строк (вспомним свинное ухо). И особо это касается переливки данных из других систем, с другими типами полей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2008, 09:31 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
KOT MATPOCKuH А подсистема экспорта-импорта вовсе не обязана быть супер-мега крутой. Эламентарная проверка корректности данных... Крутой не крутой, но тогда она ОБЯЗАТЕЛЬНО должна реализовывать В ПОЛНОМ ОБЪЕМЕ: 1. Проверки на заполненность (NOT NULL) всех полей, для которых это необходимо. Иначе, во все запросы в сравнения придется добавлять [NOT] IS NULL, и продумать, что это будет означать. Например, если пользователь привычно нажал галочку "..и сумма не меньше 0" - то включать сюда "OR summa IS NULL" ? В общем случае не скажешь. 2. Проверки на ссылочную целостность по всем ключам. Иначе все JOIN'ы придется переделать на OUTER, и продумать, что это будет означать в отчетах. 3. Все проверки на уникальность. Иначе запросы молча начнут возвращать мусор. 4. Опциональные бизнес-правила. 5. Поддержку актуальности всех этих правил в соответствии с изменяющейся бизнес-логикой, в том числе и в удаленных филиалах. Кстати, замечаете, что пресловутая сложность сопровождения никуда не девается, просто переезжает в более подобающее для нее место? Если это есть, и если мы должны протелепатировать наличие этого между строк исходного сообщения, - то это нормальное решение. А без этого база без констрейнтов превращается, как говорили ранее, в "немножко ежика, немножко черепаху" - немножко базу данных, немножко мусорку, в которой некоторые запросы иногда могут дать немножко неправильные результаты. И дает ли это ощутимый выигрыш в производительности (за счет отсутствия проверок ссылочной целостности)? Насколько я понимаю, на скорость выполнения запроса наличие констрейнтов никак не влияет (разве что наличие неявно созданных индексов - но предполагается, что необходимые индексы проектировщик и так создаст). Констрейнты дадут ощутимые тормоза при закачке данных, вплоть до суток вместо десятков минут. Поэтому я бы склонился к компромиссному варианту - пусть данные предварительно проверяются системой импорта-экспорта, переливаются по промежуточным таблицам и т.д., но на базе аналитики все равно пусть стоят констрейнты. Перед закачкой в аналитическую базу констрейнты снять, после заливки - установить. В 99,9% случаев они установятся успешно. В 0,1 % случаев они крупно спасут чью-то задницу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2008, 11:07 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
Cane Cat FisherВ 0,1 % случаев они крупно спасут чью-то задницу. Не гоже разработчику спасать свою задницу таким путём. Нужно понимать, что проверки должны обеспечивать уровень целостности данных достаточный для корректной работы отчётов и прочих приложений. Но только эти отчёты и приложения, а не какие то там "бизнес-правила" определяют какие косяки в данных для них критичны. Ведь бывают же отчёты, которые выводят именно ошибки в данных. Тут говорили про outer join и прочие уловки. Но это лишь плод вашей фантазии. Вы придумали такой отчёт и теперь говорите, что его будет сложно сделать на БД с нарушеним правил ссылочной целостности. Но придумайте другие отчёты, которые будут ловко обходить или игнорировать эти нарушения и вы получите душевный покой. Типа. 31.12.2008. - Шеф, это отчёт, в котором отображаются целостные данные. - (шеф себе под нос) ухууу. Цел, цел, цел... - А вот тут отчёт с кривыми данными. - Что за кривые данные!? Вы ибу! - Мы работаем над их исправлением. - Быстранах! - Но ведь завтра Новый год! И ошибка маленькая. - Да!? (смотрит один отчёт, другой отчёт, хмурится) Ну тогда с Новым годом, господа! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2008, 14:32 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
А я работал в Метрострое, там запуск одной системы (фокспрошной) начинался с проверки целостности. Индексы пересоздавались, и т.п. Чистка мусора, типа... А еще эта же процедура запускалась перед формированием отчетов. Снапшот, типа. ... Работало годами. И сейчас работает. И что хорошего? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.12.2008, 22:55 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
Cane Cat FisherНасколько я понимаю, на скорость выполнения запроса наличие констрейнтов никак не влияет (разве что наличие неявно созданных индексов - но предполагается, что необходимые индексы проектировщик и так создаст). Констрейнты дадут ощутимые тормоза при закачке данных, вплоть до суток вместо десятков минут. Поэтому я бы склонился к компромиссному варианту - пусть данные предварительно проверяются системой импорта-экспорта, переливаются по промежуточным таблицам и т.д., но на базе аналитики все равно пусть стоят констрейнты. 1) В общем-то я об этом и хотел сказать. А именно: в базе аналитики пусть стоит только то, что ей необходимо для ее работы. 2) Некоторые констрейнты в некоторых случаях все-таки влияют на план выполнения запросов. В таких случаях они реально нужны. 3) (То же самое, но другими словами): БД+СУБД это компонент системы, а значит у него должен быть описанный стандартизованный интерфейс, типа такого: DML возможны только к интерфейсным таблицам (система импорта-экспорта), а запросы - к внутренним таблицам (всем?). Говорить о том, что некто когда-нибудь может воспользоваться каким-то инструментарием и мимо интерфейса осуществлять DML не считаю корректным. Это хакерство. Не пишите же Вы в коде: Код: plaintext 1. 2. Это дурь. Зачем же такие подходы плодить в БД? Описывайте интерфейсы, работайте только через них, если СУБД позволяет, то запретите использование неразрешенных входов. 4) В базе аналитики часто используют хранение денормализованных данных (например подсчитанные промежуточные итоги и др.) с целью ускорения выборок. Расчет таких данных - тоже одна из функций подсистемы импорта-эспорта 5) По поводу отключения-включения констрейнтов: строго не рекомендую такой подход. Если не хотите Новый год справлять в офисе с попыткой определить почему не включился констрент и процесс перекачки данных "встал"/"завершился с ошибкой". И еще: во многих системах некая единица информации складывается из нескольких строк в разных таблицах. Если из-за одной строки не включается констрейнт, то что это значит? Вся логическая единица не верна? А вообще вся закачка верна? Еще один важный вопрос: а как перезакачать ошибочные данные (например, подправили справочники)? Этот вариант (отключения-включения констрейнтов), скорее всего, приведет к еще большему порождению мусора, либо такие констрейнты с некоторого момента вообще включаться никогда не будут. Разгребание проблем в самой БД-аналитики задача гораздо сложнее (и опаснее - с ней же работают аналитики и могут сделать неправильные выводы), чем работа с интерфейсными данными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2009, 07:57 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
Goffmanэто могут быть просто тонкости работы в двух разных компаниях. Когда мне говорять "есть разные тонкости", я всегда отвечаю: - Эти "тонкости" в том, что вы используете не все возможные варианты, а только некоторые из них ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.01.2009, 10:39 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
explaCane Cat FisherВ 0,1 % случаев они крупно спасут чью-то задницу. Не гоже разработчику спасать свою задницу таким путём. Нужно понимать, что проверки должны обеспечивать уровень целостности данных достаточный для корректной работы отчётов и прочих приложений. Но только эти отчёты и приложения, а не какие то там "бизнес-правила" определяют какие косяки в данных для них критичны. Ведь бывают же отчёты, которые выводят именно ошибки в данных. Из процитированного я понял, что Вы якобы утверждаете следующее: 1. Констрейнтов в БД ставить не нужно. 2. Каждый отчет (и прочие приложения) должны сами выполнить все проверки целостности, достаточные для их корректной работы, и обнаружить "критичные для них косяки". 3. Для этого нужно сделать ряд отчетов, которые показывали бы ошибки в данных. Подписываетесь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2009, 21:17 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
KOT MATPOCKuH Говорить о том, что некто когда-нибудь может воспользоваться каким-то инструментарием и мимо интерфейса осуществлять DML не считаю корректным. Это хакерство. Не пишите же Вы в коде: Код: plaintext 1. 2. Это дурь. Зачем же такие подходы плодить в БД? Хм. Как ни странно, такие подходы встречаются достаточно часто, если эти строки относятся к разным модулям большой сложной системы. Если некий модуль объявил правила обращения с собой, то проверить полученные извне параметры - святое дело. Особенно если система развивается, и возможны накладки. Но этот же подход при фанатичном подходе может превратиться в дурь, никак не оправдывающую себя, а лишь отвлекающую ресурсы. Когда именно - зависит конкретно от "величины" и "сложности" системы. Так вот, мне кажется, что большие системы консолидации данных - достаточно велики, сложны и изменчивы в своем развитии, чтобы не пожалеть лишнего слоя проверки, наряду со всеми другими, о которых здесь говорилось. KOT MATPOCKuH5) По поводу отключения-включения констрейнтов: строго не рекомендую такой подход. Если не хотите Новый год справлять в офисе с попыткой определить почему не включился констрент и процесс перекачки данных "встал"/"завершился с ошибкой". Вот этой логики я не понимаю. Получается, что констрейнты не нужны, поскольку все проверки заведомо выполнены другими модулями, и в то же время опасны, поскольку обязательно сработают под Новый год. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2009, 21:42 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
Тема плавно переросла в такую: при получении данных в систему из внешних источников необходима проверка корректности данных (в т.ч. целостности БД). Обсуждаются два крайних варианта: 1) Проверять данные констрейнтами 2) Проверять специально написанными программами Я правильно изрек? Cane Cat FisherKOT MATPOCKuH5) По поводу отключения-включения констрейнтов: строго не рекомендую такой подход. Если не хотите Новый год справлять в офисе с попыткой определить почему не включился констрент и процесс перекачки данных "встал"/"завершился с ошибкой". Вот этой логики я не понимаю. Получается, что констрейнты не нужны, поскольку все проверки заведомо выполнены другими модулями, и в то же время опасны, поскольку обязательно сработают под Новый год. Имелся ввиду первый вариант, при котором данные заливаются с отключенной проверкой корректности, а уже после заливки проводится анализ корректности - я не рекомендовал этот подход в решении 1 варианта. Как указано выше, 1 и 2 - крайние варианты, в конкретной реализации возможны смешанные варианты. Кроме того, некоторые констрейнты нужны самой системе-импортеру данных, для собственной работы. Резюмирую: а) на вопрос "нужны ли вообще в БД констрейнты?" - отвечаю НУЖНЫ, но с умом! б) Реализацию проверки корректности данных реализовать проще и качественнее кодом (ИМХО) в) Проверять данные в отчетах - не производительно и трудоемко для реализации (иногда приходится) ЗЫ Описанная мною выше технология консолидации данных кроме проверки корректности данных проверяет и разделяет сам процесс перекачки данных, ведь проблемы (теоретически) могут быть на разных участках, с сетью, например... Кроме того, когда делается снимок для перекачки в системе-экспортере нужно бывает максимально быстро его совершить и "отпустить" базу для работы пользователей. Аналогично в системе-импортере - нужно максимально быстро закачать уже проверенные, корректные данные. Отсюда и родилось такое разделение этапов процесса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2009, 07:34 |
|
||
|
Отсутствие PK, FK....
|
|||
|---|---|---|---|
|
#18+
KOT MATPOCKuH Как указано выше, 1 и 2 - крайние варианты, в конкретной реализации возможны смешанные варианты. Я бы сказал - не только возможны, но и весьма желательны. Вообще, когда речь заходит о крайних вариантах "А давайте все-все сделаем только на {триггерах | процедурах | констрейнтах | XML}" - то обычно замышляют что-то недоброе. KOT MATPOCKuH Резюмирую: а) на вопрос "нужны ли вообще в БД констрейнты?" - отвечаю НУЖНЫ, но с умом! б) Реализацию проверки корректности данных реализовать проще и качественнее кодом (ИМХО) в) Проверять данные в отчетах - не производительно и трудоемко для реализации (иногда приходится) Подписываюсь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.01.2009, 09:44 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1543491]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
173ms |
get topic data: |
6ms |
get forum data: |
7ms |
get page messages: |
78ms |
get tp. blocked users: |
1ms |
| others: | 279ms |
| total: | 569ms |

| 0 / 0 |
