|
Рекурсивное отношение и 4 НФ
|
|||
---|---|---|---|
#18+
Помогите новичку разобраться с нормализацией след. примера. Есть сущность рабочий. У некоторых рабочих есть менеджер, кот. ими руководит, а у некоторых его нет. При этом менеджер тоже является рабочим. Т.е. таблица будет след. : WORKER (WOKER_ID , NAME, SURNAME, FK(MANAGER_ID)) В этом случае MANAGER_ID рекурсивный внешний ключ. Т.к. у кого то из рабочих нет менеджера, при заполнение таблицы в некоторых строчках поле MANAGER_ID будет пустым. Вот эта пустота меня и смущает. Это нормально? Таблица соотв. 3НФ. А соответствует ли она 4НФ? Ведь, если расматривать отношение рабочий - рабочий с позиции, что рабочий управляется другим рабочим - все нормально, вроде как таблица нормализована. Но если с позиции - рабочий управляет рабочим , то мы получаем, что один робочий управляет несколькими рабочими и следовательно возникает многозначный атрибут. Т.е. нет соответсвия 4НФ. В этом случае надо две таблицы, например: WORKER (WOKER_ID , NAME, SURNAME и MANAGER(FK(WORKER_ID ), WORKER_ID ) Вот такая вот фигня. Помоготи врубиться как все таки правильно? Так же непонятно, если например, к атрибутам рабочего-менеджера я добавлю какой то дополнительный атрибут, которого нет у обычного рабочего, напр, e-mail - стоит ли выделять его(рабочего-менеджера) в отдельную таблицу, т.к. все остальные атрибуты у него совпадают с обычным рабочим? Может ли поле e-mail быть пустым у обычного рабочего? Не будет ли это нарушение целостности данных? Я склоняюсь к тому чтобы сделать дополнительную таблицу для хранения ID менеджера и его e-mail: MANAGER_MAIL(WORKER_ID ,E_MAIL) Если все суммировать, то у меня два варианта между которыми надо выбрать: 1). В этом варианте все хранится в одной таблице. По-моему она нормализована.. как вы думаете? Может ли нормализованная таблица имет пыстые атрибуты? WORKER (WOKER_ID , NAME, SURNAME, E_MAIL, FK(MANAGER_ID)) 2). НЕсколько таблиц. В этом случае нет пустых атрибутов. WORKER (WOKER_ID , NAME, SURNAME MANAGER(FK(WORKER_ID ), WORKER_ID ) MANAGER_MAIL(WORKER_ID ,E_MAIL) Заранее благодарю за ваше терпение все это прочитать и помощь! ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2003, 18:54 |
|
Рекурсивное отношение и 4 НФ
|
|||
---|---|---|---|
#18+
Совершенно достаточно будет двух таблиц 1) рабочий и его аттрибуты 2) менеджер и его аттрибуты Наличие или отсутствие null-ключей не влияет на нормализацию, а определяется конкретной задачей Основной задачей при нормализации является задача спланировать оптимальную структуру БД c точки зрения запросов, которые будут к ней обращаться, а отнюдь не самоцель создание нормализации как в теории Теория нормализации лишь помогает этому ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2003, 20:54 |
|
Рекурсивное отношение и 4 НФ
|
|||
---|---|---|---|
#18+
А если у рабочего и менеджера одни и те же атрибуты и нужно просто определить кто кем управляет, то достаточно одной таблицы? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2003, 21:22 |
|
Рекурсивное отношение и 4 НФ
|
|||
---|---|---|---|
#18+
persons ========= person_id <pk> first_name last_name ...... managers ======= manager_id <pk, fk> to persons.person_id ... employees ======== employee_id <pk, fk> to persons.person_id manager_id <fk> to managers.manager_id вот это тебе надо? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2003, 00:07 |
|
Рекурсивное отношение и 4 НФ
|
|||
---|---|---|---|
#18+
как всегда поспешил.... обед у меня..... для избавления от наллов в том что я написал можно еще в одну таблицу вывести отношение между рабочим и манагером. т.е. 4 таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2003, 00:09 |
|
Рекурсивное отношение и 4 НФ
|
|||
---|---|---|---|
#18+
2 папа Карло Зачем? Зачем при требовании задачи в связи 1..* делать *..* но зато без null'ов! Если уж они так не нравяться - то введите какое-нибудть зарезервированное значение ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2003, 14:14 |
|
Рекурсивное отношение и 4 НФ
|
|||
---|---|---|---|
#18+
funikovyuri, а как бы ты сделал? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2003, 15:52 |
|
Рекурсивное отношение и 4 НФ
|
|||
---|---|---|---|
#18+
могу объяснить зачем. :) иногда это требуется. например если у тебя миллион человек в системе, из них всего 100 сотрудников.... неужели будешь делать один ко многим? забыл спросить.... уж не здесь ли ты увидел много ко многим? employees ======== employee_id <pk, fk> to persons.person_id manager_id <fk> to managers.manager_id и в каком месте извините? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2003, 21:00 |
|
Рекурсивное отношение и 4 НФ
|
|||
---|---|---|---|
#18+
2 папа Карло Что то я не понял.. зачем 4-я таблица? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2003, 21:01 |
|
Рекурсивное отношение и 4 НФ
|
|||
---|---|---|---|
#18+
блин..... теперь у меня завтрак..... разумеется будешь один ко многим делать.... имелось ввиду в тойже таблице опциональный аттрибут.... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2003, 21:02 |
|
Рекурсивное отношение и 4 НФ
|
|||
---|---|---|---|
#18+
Фризер..... persons ========= person_id <pk> first_name last_name ...... managers ======= manager_id <pk, fk> to persons.person_id ... employees ======== employee_id <pk, fk> to persons.person_id ... т.е. таблицы манагеров и эмплоев содержат только аттрибуты соответствующие либо манагерам либо имплоям.... четвертая таблица служит всего навсего для указания связи между эмплоями и манагерами если она существует.... manager_employees =============== manager_id <fk> not null to managers.manager_id employee_id <pk,fk> not null to employees.employee_id PK здесь служит для того, чтобы показать что у каждого сотрудника есть всего один манагер. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2003, 21:07 |
|
Рекурсивное отношение и 4 НФ
|
|||
---|---|---|---|
#18+
2папа Карло могу объяснить зачем. :) иногда это требуется. например если у тебя миллион человек в системе, из них всего 100 сотрудников.... неужели будешь делать один ко многим? Здесь ключевое слово - иногда - т.е. это уже сродни оптимизации под конкретную задачу - в вопросе же спрашивалось можно ли оставить null - или они противоречат нормализации - так вот - они ей не противоречат забыл спросить.... уж не здесь ли ты увидел много ко многим? Дурацкий какой-то сарказм - я ее увидел в предлогаемой 4-й таблице ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2003, 10:15 |
|
Рекурсивное отношение и 4 НФ
|
|||
---|---|---|---|
#18+
2FreeZer У тебя с самого начала правильная струтура БД - зачем на пустом месте лес городить? Проблем мало - так не волнуйся - они еще появятся - и незаче их создавать искуственно. Каждая сущность в БД должна быть оправдана требованиями к это БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2003, 10:18 |
|
Рекурсивное отношение и 4 НФ
|
|||
---|---|---|---|
#18+
2funikovyuri Я полный нуль(надеюсь пока :)) в проектировании бд... я просто изучал пример и задался некоторыми вопросами, которывае вы мне с папой Карло в принципе прояснили. Спасибо вам :) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2003, 13:34 |
|
Рекурсивное отношение и 4 НФ
|
|||
---|---|---|---|
#18+
Кстате Lelikk говорил об оптимальности структуры БД с точки зрения запросов... на что ме надо обращать внимание в этом случае? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2003, 13:39 |
|
Рекурсивное отношение и 4 НФ
|
|||
---|---|---|---|
#18+
... в этом случае при проектирование БД? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2003, 13:40 |
|
Рекурсивное отношение и 4 НФ
|
|||
---|---|---|---|
#18+
2 FreeZer Кстате Lelikk говорил об оптимальности структуры БД с точки зрения запросов... на что ме надо обращать внимание в этом случае? Чтобы ответить - надо знать что это за запросы :) А так надо просто понить что SQL (DML) - это язык манипулирования сущностями в виде таблиц и атрибутов в виде столбцов - если по какой-то причине вы забиваете на это (та же метамодель) - то тут SQL оказывается малоэффективным ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2003, 13:45 |
|
Рекурсивное отношение и 4 НФ
|
|||
---|---|---|---|
#18+
Я бы сделал так. Первая таблица "Рабочий" ID_Worker - автогенерация идентификатора атрибуты рабочего ... ID_Manager Вторая таблица "Менеджер" ID_Manager - автогенерация идентификатора ID_Worker - ссылка на атрибуты этого менеджера как рабочего атрибуты менеджера Всё! Для решения поставленной задачи большего не требуется, даже если у менеджера в последствии будут добавляться ещё атрибуты. Можно даже не использовать во второй таблице поле ID_Manager, но тогде не везде можно будет использовать встроенные механизмы поддержки целостности данных и индексации. Хотя. для небольшой базы это не критично. И ещё, правина номрализации знать, конечно, нужно. Но применять их на практике нужно очень аккуратно и разумно. Часто бывают случаи, когда некотороый отход от классических нормализованных форм существенно упрощает и структуру данных, и решение практических задач. То есть, это скорее базовые рекомнедации, чем строгое руководство к обязательному исполнению. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2003, 01:13 |
|
Рекурсивное отношение и 4 НФ
|
|||
---|---|---|---|
#18+
авторЧасто бывают случаи, когда некотороый отход от классических нормализованных форм существенно упрощает и структуру данных, и решение практических задач Дмитрий, можно пример? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2003, 14:12 |
|
Рекурсивное отношение и 4 НФ
|
|||
---|---|---|---|
#18+
2funikovyuri авторЧтобы ответить - надо знать что это за запросы :) Как за ранее можно узнать какие будут запросы, что то для меня это пока неочевидно. Например, если я просто создаю структуру данных, которая затем может быть использованны двумя разными программами. Мугу ли я знать какие запросы могут понадобиться авторам программ? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2003, 14:16 |
|
Рекурсивное отношение и 4 НФ
|
|||
---|---|---|---|
#18+
2FreeZer У вас должны быть требования к модулю (т.е. ТЗ) и вы соотвествии с ним и с вашим опытом вы должны построить предположения и принят те или иные решения - но это конечно же идиальный случай - поэтому универсальных решений не бывает :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2003, 14:57 |
|
Рекурсивное отношение и 4 НФ
|
|||
---|---|---|---|
#18+
Если возвратиться к теме, то мне кажется, что она не столько касается 4 нф сколько решения задачи о супертипах и подтипах. У нас есть группа работников, которая условно делится на 2 подгруппы: "простые" работники и менеджеры. Какая должна быть структура? Чтобы с ней определиться надо ответить на следующие вопросы: 1. Могут ли подтипы мигрировать, т.е. не-менеджер стать менеджером? 2. Насколько одинаковы у подтипов атрибуты, по- возможности выделить их в супертип. 3.Насколько одинаковы у подтипов связи с другими сущностями, одинаковые привязать к супертипу. 4. Чаще подтипы объединяются в выборках из бд или, наоборот, выбираются по отдельности? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2003, 16:17 |
|
Рекурсивное отношение и 4 НФ
|
|||
---|---|---|---|
#18+
2 fe male Как раз наоборот - к задаче о наследовании ее свел Папа Карло - а с самого начала это была задача о том обязательна ли для жизни 4НФ :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2003, 16:31 |
|
Рекурсивное отношение и 4 НФ
|
|||
---|---|---|---|
#18+
to funikovyuri Я исхожу из начальной постановки задачи. Проблемы с 4нф возникают когда есть попытка соотнести нерелевантные атрибуты. Например, предикат "Профессор пишет книгу и обучает студента" нормализуется как два незавимых предиката "Профессор пишет книгу" и "Профессор обучает студента". Здесь нет таких отношений ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2003, 17:58 |
|
Рекурсивное отношение и 4 НФ
|
|||
---|---|---|---|
#18+
Как раз наоборот - к задаче о наследовании ее свел Папа Карло - а с самого начала это была задача о том обязательна ли для жизни 4НФ :) наследование говоришь..... :) это у тебя наследование товарищб ОО разработчик, а у меня это называется подмножеством. ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.12.2003, 01:47 |
|
|
start [/forum/topic.php?fid=32&fpage=174&tid=1546701]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
70ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 188ms |
0 / 0 |