Database design question: True or False?

oMoses
Уже с Приветом
Posts: 1255
Joined: 01 Jun 1999 09:01
Location: Irkutsk.RU -> Hamden, CT-> Princeton, NJ, USA

Database design question: True or False?

Post by oMoses »

Constraints in the physical database are not to be used. The main reason for this is that in a 24/7 environment, they can complicate upgrades and alterations to the database. Any data validations should be handled programmatically instead of leaving the responsibility of data validation on the database.

Referential Integrity should not be implemented in the database. There are a number of advantages to this. Firstly, in a development environment, not having RI implemented means that tables can be dropped and recreated and data loaded and deleted without the overhead of having to get the order of operations correct. In the longer term RI has the effect of slowing up inserts and updates, although the overhead on performance has not yet been quantified.

Primary keys should not have any business meaning and they should only be used to identify each row uniquely in the table.

Ну и как Вам?
[b]"Счастье для всех, даром, и пусть никто не уйдет обиженный!"[/b]
[i]А. и Б. Стругацкие, "Пикник на обочине"[/i]
User avatar
katit
Уже с Приветом
Posts: 23804
Joined: 05 Jul 2003 22:34
Location: Брест -> St. Louis, MO

Re: Database design question: True or False?

Post by katit »

oMoses wrote:Ну и как Вам?


MySQL MUST be used as database. All database access should be limited to plain SELECT, INSERT, UPDATE statements.

No more then 2 tables should be used in a query string. :mrgreen:
vc
Уже с Приветом
Posts: 664
Joined: 05 Jun 2002 01:11

Re: Database design question: True or False?

Post by vc »

oMoses wrote:...........................
Primary keys should not have any business meaning and they should only be used to identify each row uniquely in the table.

Ну и как Вам?


I think this is someone trying to be funny, right ?

The last paragraph is not so clear-cut though: you can use surrogates but only when there are no natural identifiers, or there are composite keys which substantially degrade performance and complicate referential integrity.
User avatar
JustMax
Уже с Приветом
Posts: 1476
Joined: 05 Dec 2000 10:01
Location: Vilnius -> Bonn

Post by JustMax »

Бред сивой кобылы (даже не IMHO)! :pain1:
Lazy44
Уже с Приветом
Posts: 525
Joined: 01 May 2002 20:29
Location: CT->MA->TX->UT

Post by Lazy44 »

Я бы согласился, если мы говорим про Data Warehouse и боремся за время. Был опыт, когда 5 часов (разница по времени между Восточным побережьем и Гавайями) не хватало, чтобы залить данные и обработать их (ну очень много их было). Тогда пошли именно по этому пути - дропнули FK constraints, check constraints, чтобы ETL тулза работала побыстрее.

Для всего остального - OLTP, batch processing - это не подходит.

Если рассматривать причины неиспользования FK, check constraints, указанные в цитате,то бред полнейший.

ИМХО
User avatar
katit
Уже с Приветом
Posts: 23804
Joined: 05 Jul 2003 22:34
Location: Брест -> St. Louis, MO

Post by katit »

Lazy44 wrote:Я бы согласился, если мы говорим про Data Warehouse и боремся за время. Был опыт, когда 5 часов (разница по времени между Восточным побережьем и Гавайями) не хватало, чтобы залить данные и обработать их (ну очень много их было). Тогда пошли именно по этому пути - дропнули FK constraints, check constraints, чтобы ETL тулза работала побыстрее.


Ну необязательно так. Если боремся за скорость в инсертах то обычно это пару таблиц. Достаточно временно деактивировать ФК. Или я не прав?
testuser
Уже с Приветом
Posts: 1071
Joined: 18 Nov 2003 22:53
Location: MA

Post by testuser »

А почему бы и нет. Главное все не отдавать на клиентскую сторону.
Т.е. чтобы клиент чистый SQL мог выполнять только в виде SELECT, а INSERT, UPDATE и DELETE делался с помощью stored procedures.

Мне всегда нравилась простота :D
User avatar
Kotkov
Уже с Приветом
Posts: 342
Joined: 13 Mar 2002 10:01
Location: California

Post by Kotkov »

С 3-им пунктом 100% согласен, т.к. всегда есть вероятность, что бизнес-логика изменится и начальная уникальность перестанет быть уникальностью.
Кто ищет, тот всегда найдет.
Живи своим умом, Пчёла! ©
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

Ну если логика энфорсится в stored procedure То дублировать проверки в FK избыточно
Я меня был опыт очень большого проекта с порядка 500 тали и около 14000 stored proc, гденет ни одного FK
Вся логика в процедурах
Однако вообще от утверждения веет такой категоричностью что работать под этим менеджером я бы не хотел
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
katit
Уже с Приветом
Posts: 23804
Joined: 05 Jul 2003 22:34
Location: Брест -> St. Louis, MO

Post by katit »

Я работаю с базой (1500 таблиц и 2500 процедур) на SQL Server Там все RI сделано через триггеры.
Довольно удобно работать если честно.
User avatar
IA72
Уже с Приветом
Posts: 956
Joined: 04 Mar 2002 10:01

Post by IA72 »

JustMax wrote:Бред сивой кобылы (даже не IMHO)! :pain1:


Первые два бред, хотя допускаю случаи, когда приходится жертвовать FK & RI во имя быстродействия (у нас было раз подобное, когда приходилось заливать много данных, но вышли из положения удаляя и восстанавливая индксы и FK после процесса).
Третий же пункт я обеими руками "за". PK только artificial, со временем жизни равным времени жизни записи. Распространенное исключение - many-2-many таблица, в которой PK - пара ключей из связки.
User avatar
JustMax
Уже с Приветом
Posts: 1476
Joined: 05 Dec 2000 10:01
Location: Vilnius -> Bonn

Post by JustMax »

katit wrote:Я работаю с базой (1500 таблиц и 2500 процедур) на SQL Server Там все RI сделано через триггеры.
Довольно удобно работать если честно.


А чем собственно отличается проверка RI триггером от проверки constraint - ом? Тот же самый внутренний триггер :mrgreen:
User avatar
JustMax
Уже с Приветом
Posts: 1476
Joined: 05 Dec 2000 10:01
Location: Vilnius -> Bonn

Post by JustMax »

IA72 wrote: Первые два бред, хотя допускаю случаи, когда приходится жертвовать FK & RI во имя быстродействия (у нас было раз подобное, когда приходилось заливать много данных, но вышли из положения удаляя и восстанавливая индксы и FK после процесса).


Это абсолютно нормальная ситуация - когда точно знаешь, что делаешь. Но как минимум при такой операции TABLE EXCLUSIVE LOCK!

IA72 wrote: Третий же пункт я обеими руками "за". PK только artificial, со временем жизни равным времени жизни записи. Распространенное исключение - many-2-many таблица, в которой PK - пара ключей из связки.


Спорный вопрос - тут дело вкуса. :)
User avatar
katit
Уже с Приветом
Posts: 23804
Joined: 05 Jul 2003 22:34
Location: Брест -> St. Louis, MO

Post by katit »

JustMax wrote:А чем собственно отличается проверка RI триггером от проверки constraint - ом? Тот же самый внутренний триггер :mrgreen:


Помедленне работает.
Болше возможностей обработки.
Проще Deployment
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

JustMax wrote:
IA72 wrote: Первые два бред, хотя допускаю случаи, когда приходится жертвовать FK & RI во имя быстродействия (у нас было раз подобное, когда приходилось заливать много данных, но вышли из положения удаляя и восстанавливая индксы и FK после процесса).


Это абсолютно нормальная ситуация - когда точно знаешь, что делаешь. Но как минимум при такой операции TABLE EXCLUSIVE LOCK!


Вы наверное про FK без индекса ?
Но тут же по то что времено убирается то и то
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014

Return to “Вопросы и новости IT”