|
|
|
Ограничение по DNKF
|
|||
|---|---|---|---|
|
#18+
Теоретическая задача: есть таблица "человек": ID* Имя Фамилия Отчество Дата рождения Пол Таблица "брак": ID мужа* ID жены* * ключ, в таблице "брак" каждая колонка - ключ, чтобы не было двоежёнства (страны с многожёнством не рассматриваем). Как можно, соблюдая какие нормальные формы (DKNF), ввести ограничения, чтобы в ID мужа был записан только мужчина, а в ID жены - только женщина? Мне пока приходят в голову только сделать 2 вьюшки: мужчины, женщины. Это подходит под определение DKNF? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2009, 10:30 |
|
||
|
Ограничение по DNKF
|
|||
|---|---|---|---|
|
#18+
Такую проверку можно либо в constraint оформить, либо просто в триггере проверять. P.S. В некоторых странах разрешены однополые браки, поэтому деление на мужей и жен может оказаться проблемным... Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2009, 10:49 |
|
||
|
Ограничение по DNKF
|
|||
|---|---|---|---|
|
#18+
detail wrote: > Как можно, соблюдая какие нормальные формы (DKNF), ввести ограничения, > чтобы в ID мужа был записан только мужчина, а в ID жены - только женщина? Никак, тебе придётся разбить таблицу людей на две, одну с мужчинами, другую с женщинами, и сделать два констрейнта FK на одну и другую таблицу. Но в свете последних веяний в деле брака (которые мне лично вовсе не нравятся) это будет в корне неправильный дизайн БД, потому что браки заключаются не только между М-Ж, но и в других вариациях. К тому же браки могут быть между более чем 2-мя людьми, даже в нашей стране, причём это -- наоборот, традиционные браки. Так что мой совет - плюнуть на ограничения декларативные, и реализовать их программно, в виде триггеров или процедур. > Мне пока приходят в голову только сделать 2 вьюшки: мужчины, женщины. > Это подходит под определение DKNF? Нормальные формы вьюхами не оперируют. И как бы ты проверку-то сделал бы ? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2009, 10:58 |
|
||
|
Ограничение по DNKF
|
|||
|---|---|---|---|
|
#18+
ОК, спасибо. Это не для реальной БД, просто упражнение, поэтому однополые браки исключаем. Когда написал, скоро понял, что на вьюхи не действуют ограничения внешних ключей :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2009, 11:26 |
|
||
|
Ограничение по DNKF
|
|||
|---|---|---|---|
|
#18+
detailКак можно, соблюдая какие нормальные формы (DKNF), ввести ограничения, чтобы в ID мужа был записан только мужчина, а в ID жены - только женщина? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2009, 17:11 |
|
||
|
Ограничение по DNKF
|
|||
|---|---|---|---|
|
#18+
ChA wrote: > , "Пол" char(*1*) CHECK("Пол" IN ('М', 'Ж')) Вспомнил старую байку ещё из фидошной конфы по проектированию БД. Обсуждали тему, как нужно делать поля в разных случаях: через домены (т.е. ограничения возможных значений списками значений) или через словари (справочники). Когда что лучше и когда что допустимо. Понятно, что если список значений может расширяться, то необходимо вводить справочник. Но когда список значений строго фиксирован, то можно делать домен, а можно -- справочник, хотя казалось бы это не нужно вовсе -- значения --то фиксированы. Стали приводить примеры таких значений. Очевидный пример -- пол человека. Но тут же пришёл один товарищь, который разрабатывал системы для медучереждений, и рассказал свою историю, как они сделали пол через домен (т.е. так же, как и здесь, CHECK("Пол" IN ('М', 'Ж')) ). Но поимели кучу проблем, когда стали внедрять своё ПО в кожно-венерологическом диспансере: "Там этих полов -- штук 10 !" -- говорит. "Мужской гетеросексуальный, мужской гомосексуальный, мужской бисексуальный, женский гетеросексуальный и т.д." С тех пор они в комманде не используют домены вообще. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2009, 11:18 |
|
||
|
Ограничение по DNKF
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Они (диспансер) просто нарушили 1НФ: смешали в один два атрибута - пол и сексуальную ориентацию. А домены тут не при чем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2009, 15:08 |
|
||
|
Ограничение по DNKF
|
|||
|---|---|---|---|
|
#18+
Cane Cat Fisher пишет: > Они (диспансер) просто нарушили 1НФ: смешали в один два атрибута - пол и > сексуальную ориентацию. А домены тут не при чем. Вообще говоря, утверждать это можно с уверенностью только зная досконально предметную область. Мы её не знаем. Но даже если убрать оттуда ориентацию, полов можно придумать больше, чем 2. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2009, 17:23 |
|
||
|
Ограничение по DNKF
|
|||
|---|---|---|---|
|
#18+
MasterZivНо даже если убрать оттуда ориентацию, полов можно придумать больше, чем 2. Участвовал я в разработке системы, где было три пола: мужчина, женщина и ребёнок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2009, 19:14 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=86&tid=1543164]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
62ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 232ms |
| total: | 396ms |

| 0 / 0 |
