powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Рекурсивное отношение и 4 НФ
25 сообщений из 26, страница 1 из 2
Рекурсивное отношение и 4 НФ
    #32354459
FreeZer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите новичку разобраться с нормализацией след. примера.

Есть сущность рабочий. У некоторых рабочих есть менеджер, кот. ими руководит, а у некоторых его нет. При этом менеджер тоже является рабочим. Т.е. таблица будет след. :

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)

Заранее благодарю за ваше терпение все это прочитать и помощь!
...
Рейтинг: 0 / 0
Рекурсивное отношение и 4 НФ
    #32354557
Фотография Lelikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Совершенно достаточно будет двух таблиц
1) рабочий и его аттрибуты
2) менеджер и его аттрибуты

Наличие или отсутствие null-ключей не влияет на нормализацию, а определяется конкретной задачей

Основной задачей при нормализации является задача спланировать оптимальную структуру БД c точки зрения запросов, которые будут к ней обращаться, а отнюдь не самоцель создание нормализации как в теории

Теория нормализации лишь помогает этому
...
Рейтинг: 0 / 0
Рекурсивное отношение и 4 НФ
    #32354566
FreeZer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если у рабочего и менеджера одни и те же атрибуты и нужно просто определить кто кем управляет, то достаточно одной таблицы?
...
Рейтинг: 0 / 0
Рекурсивное отношение и 4 НФ
    #32354600
папа Карло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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

вот это тебе надо?
...
Рейтинг: 0 / 0
Рекурсивное отношение и 4 НФ
    #32354601
папа Карло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как всегда поспешил.... обед у меня..... для избавления от наллов в том что я написал можно еще в одну таблицу вывести отношение между рабочим и манагером. т.е. 4 таблицы.
...
Рейтинг: 0 / 0
Рекурсивное отношение и 4 НФ
    #32355330
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 папа Карло

Зачем? Зачем при требовании задачи в связи 1..* делать *..* но зато без null'ов! Если уж они так не нравяться - то введите какое-нибудть зарезервированное значение
...
Рейтинг: 0 / 0
Рекурсивное отношение и 4 НФ
    #32355586
FreeZer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri, а как бы ты сделал?
...
Рейтинг: 0 / 0
Рекурсивное отношение и 4 НФ
    #32356058
папа Карло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
могу объяснить зачем. :) иногда это требуется. например если у тебя миллион человек в системе, из них всего 100 сотрудников.... неужели будешь делать один ко многим?

забыл спросить.... уж не здесь ли ты увидел много ко многим?

employees
========
employee_id <pk, fk> to persons.person_id
manager_id <fk> to managers.manager_id

и в каком месте извините? :)
...
Рейтинг: 0 / 0
Рекурсивное отношение и 4 НФ
    #32356059
FreeZer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 папа Карло
Что то я не понял.. зачем 4-я таблица?
...
Рейтинг: 0 / 0
Рекурсивное отношение и 4 НФ
    #32356060
папа Карло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блин..... теперь у меня завтрак..... разумеется будешь один ко многим делать.... имелось ввиду в тойже таблице опциональный аттрибут....
...
Рейтинг: 0 / 0
Рекурсивное отношение и 4 НФ
    #32356063
папа Карло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фризер.....

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 здесь служит для того, чтобы показать что у каждого сотрудника есть всего один манагер.
...
Рейтинг: 0 / 0
Рекурсивное отношение и 4 НФ
    #32356318
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2папа Карло

могу объяснить зачем. :) иногда это требуется. например если у тебя миллион человек в системе, из них всего 100 сотрудников.... неужели будешь делать один ко многим?

Здесь ключевое слово - иногда - т.е. это уже сродни оптимизации под конкретную задачу - в вопросе же спрашивалось можно ли оставить null - или они противоречат нормализации - так вот - они ей не противоречат

забыл спросить.... уж не здесь ли ты увидел много ко многим?
Дурацкий какой-то сарказм - я ее увидел в предлогаемой 4-й таблице
...
Рейтинг: 0 / 0
Рекурсивное отношение и 4 НФ
    #32356328
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2FreeZer

У тебя с самого начала правильная струтура БД - зачем на пустом месте лес городить? Проблем мало - так не волнуйся - они еще появятся - и незаче их создавать искуственно. Каждая сущность в БД должна быть оправдана требованиями к это БД.
...
Рейтинг: 0 / 0
Рекурсивное отношение и 4 НФ
    #32356667
FreeZer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2funikovyuri

Я полный нуль(надеюсь пока :)) в проектировании бд... я просто изучал пример и задался некоторыми вопросами, которывае вы мне с папой Карло в принципе прояснили. Спасибо вам :)
...
Рейтинг: 0 / 0
Рекурсивное отношение и 4 НФ
    #32356678
FreeZer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстате Lelikk говорил об оптимальности структуры БД с точки зрения запросов... на что ме надо обращать внимание в этом случае?
...
Рейтинг: 0 / 0
Рекурсивное отношение и 4 НФ
    #32356682
FreeZer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... в этом случае при проектирование БД?
...
Рейтинг: 0 / 0
Рекурсивное отношение и 4 НФ
    #32356699
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 FreeZer

Кстате Lelikk говорил об оптимальности структуры БД с точки зрения запросов... на что ме надо обращать внимание в этом случае?

Чтобы ответить - надо знать что это за запросы :) А так надо просто понить что SQL (DML) - это язык манипулирования сущностями в виде таблиц и атрибутов в виде столбцов - если по какой-то причине вы забиваете на это (та же метамодель) - то тут SQL оказывается малоэффективным
...
Рейтинг: 0 / 0
Рекурсивное отношение и 4 НФ
    #32357422
Дмитрий Мыльников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы сделал так.
Первая таблица "Рабочий"
ID_Worker - автогенерация идентификатора
атрибуты рабочего
...
ID_Manager

Вторая таблица "Менеджер"
ID_Manager - автогенерация идентификатора
ID_Worker - ссылка на атрибуты этого менеджера как рабочего
атрибуты менеджера

Всё! Для решения поставленной задачи большего не требуется, даже если у менеджера в последствии будут добавляться ещё атрибуты.
Можно даже не использовать во второй таблице поле ID_Manager, но тогде не везде можно будет использовать встроенные механизмы поддержки целостности данных и индексации. Хотя. для небольшой базы это не критично.

И ещё, правина номрализации знать, конечно, нужно. Но применять их на практике нужно очень аккуратно и разумно. Часто бывают случаи, когда некотороый отход от классических нормализованных форм существенно упрощает и структуру данных, и решение практических задач. То есть, это скорее базовые рекомнедации, чем строгое руководство к обязательному исполнению.
...
Рейтинг: 0 / 0
Рекурсивное отношение и 4 НФ
    #32358072
FreeZer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЧасто бывают случаи, когда некотороый отход от классических нормализованных форм существенно упрощает и структуру данных, и решение практических задач

Дмитрий, можно пример?
...
Рейтинг: 0 / 0
Рекурсивное отношение и 4 НФ
    #32358078
FreeZer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2funikovyuri

авторЧтобы ответить - надо знать что это за запросы :)

Как за ранее можно узнать какие будут запросы, что то для меня это пока неочевидно. Например, если я просто создаю структуру данных, которая затем может быть использованны двумя разными программами. Мугу ли я знать какие запросы могут понадобиться авторам программ?
...
Рейтинг: 0 / 0
Рекурсивное отношение и 4 НФ
    #32358164
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2FreeZer

У вас должны быть требования к модулю (т.е. ТЗ) и вы соотвествии с ним и с вашим опытом вы должны построить предположения и принят те или иные решения - но это конечно же идиальный случай - поэтому универсальных решений не бывает :)
...
Рейтинг: 0 / 0
Рекурсивное отношение и 4 НФ
    #32358385
Fe male
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если возвратиться к теме, то мне кажется, что она не столько касается 4 нф сколько решения задачи о супертипах и подтипах.
У нас есть группа работников, которая условно делится на 2 подгруппы: "простые" работники и менеджеры. Какая должна быть структура?
Чтобы с ней определиться надо ответить на следующие вопросы:
1. Могут ли подтипы мигрировать, т.е. не-менеджер стать менеджером?
2. Насколько одинаковы у подтипов атрибуты, по- возможности выделить их в супертип.
3.Насколько одинаковы у подтипов связи с другими сущностями, одинаковые привязать к супертипу.
4. Чаще подтипы объединяются в выборках из бд или, наоборот, выбираются по отдельности?
...
Рейтинг: 0 / 0
Рекурсивное отношение и 4 НФ
    #32358431
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 fe male

Как раз наоборот - к задаче о наследовании ее свел Папа Карло - а с самого начала это была задача о том обязательна ли для жизни 4НФ :)
...
Рейтинг: 0 / 0
Рекурсивное отношение и 4 НФ
    #32358575
Fe male
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
to funikovyuri

Я исхожу из начальной постановки задачи. Проблемы с 4нф возникают когда есть попытка соотнести нерелевантные атрибуты. Например, предикат "Профессор пишет книгу и обучает студента" нормализуется как два незавимых предиката "Профессор пишет книгу" и "Профессор обучает студента". Здесь нет таких отношений
...
Рейтинг: 0 / 0
Рекурсивное отношение и 4 НФ
    #32358737
папа Карло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как раз наоборот - к задаче о наследовании ее свел Папа Карло - а с самого начала это была задача о том обязательна ли для жизни 4НФ :)

наследование говоришь..... :) это у тебя наследование товарищб ОО разработчик, а у меня это называется подмножеством. ;)
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Рекурсивное отношение и 4 НФ
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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