powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Моя таблица в третьей нормальной форме? (нуб)
24 сообщений из 24, страница 1 из 1
Моя таблица в третьей нормальной форме? (нуб)
    #38147431
stannull45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

Есть таблица [Люди].
Столбцы - [ID], [Имя], [Пол], [Размер груди].
Размер груди релевантен только для строк, у которых [Пол] == Ж. Если [Пол] == М, то [Размер груди] == NULL.

Правильно ли я понимаю, то эта таблица не удовлетворяет 3NF? Т.к. тут нарушено "все неключевые атрибуты взаимно независимы" (зависимы [Размер груди] зависит от [Пол]).
Нужно эту таблицу разбить на две - убрать столбец [Размер груди] из таблицы [Люди], сделать отдельную табличку [Дамы], в которой будет [ID], [Размер груди].

Спасибо.
...
Рейтинг: 0 / 0
Моя таблица в третьей нормальной форме? (нуб)
    #38147489
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stannull45Добрый день,

Есть таблица [Люди].
Столбцы - [ID], [Имя], [Пол], [Размер груди].
Размер груди релевантен только для строк, у которых [Пол] == Ж. Если [Пол] == М, то [Размер груди] == NULL.

Правильно ли я понимаю, то эта таблица не удовлетворяет 3NF? Т.к. тут нарушено "все неключевые атрибуты взаимно независимы" (зависимы [Размер груди] зависит от [Пол]).
Нужно эту таблицу разбить на две - убрать столбец [Размер груди] из таблицы [Люди], сделать отдельную табличку [Дамы], в которой будет [ID], [Размер груди].

Спасибо.
С точки зрения ФЗ, наоброт, [Пол] зависим от [Размер груди]. Поскольку по зная ПОЛ вы не знаете значения Размер груди, а только то что оно должно быть не пустым. А вот зная размер груди Вы знаете, что значение пол является Ж. (возможно, что ПОЛ вообще полностью выводим).
Однако, чистоту всех рассуждений про ФЗ портит NULL: таковое как бы вносит неопределенность. Все таки это свойство заведомо отсутсвует у части Людей, т.е. как бы структурное искажение. Поэтому, возможно, две таблицы как бы устраняют именно это неопределенность, а не обеспечивают нормализацию.
...
Рейтинг: 0 / 0
Моя таблица в третьей нормальной форме? (нуб)
    #38147547
stannull45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vadiminfo,

спасибо за ответ.
А с точки зрения 3 нормальной формы, таблица ([Id], [Имя], [Пол], [Размер груди]) удовлетворяет 3 НФ?
...
Рейтинг: 0 / 0
Моя таблица в третьей нормальной форме? (нуб)
    #38147568
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stannull45Если [Пол] == М, то [Размер груди] == NULL. А по-моему, это утверждение расходится с объективной реальностью.
...
Рейтинг: 0 / 0
Моя таблица в третьей нормальной форме? (нуб)
    #38147577
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> эта таблица не удовлетворяет 3NF?

Сложно предположить, чему она вообще удовлетворяет. Начнем с того, что размер груди - такой, как вы его понимаете - шкала для нижнего белья.
...
Рейтинг: 0 / 0
Моя таблица в третьей нормальной форме? (нуб)
    #38147587
Netmould
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, можно не NULL использовать, а N/A какой-нибудь, и вести все в одной таблице.
х
...
Рейтинг: 0 / 0
Моя таблица в третьей нормальной форме? (нуб)
    #38147668
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stannull45vadiminfo,

спасибо за ответ.
А с точки зрения 3 нормальной формы, таблица ([Id], [Имя], [Пол], [Размер груди]) удовлетворяет 3 НФ?
Если бы не было NULL, а например, -1 для мужчин, то была бы, по видимому, ФЗ: [Размер груди] -> [Пол]. Ну судя по всему [Пол] ни в какой ключ не входит: стало быть могло быть типа нарушение и могла быть декомпозиция: Человек([Id], [Имя], [Размер груди]), Размо-Пол([Размер груди], [Пол] ). Это бы исклюсчило повторы (-1, М) для каждого чела мужского пола в недекомпозированной таблице. Хотя Пол вообще типа выводимое, т.е. оно как бы известно и так без ввода в БД. Т.е. вообще на выкидывание могло прендовать.

Однако, правда в том, что есть NULL. В этом случае говорить об ФЗ с участием NULL, возможно, не совсем корректно. А без ФЗ что-то уверенно сказать об 3НФ, скорее всего, нельзя. Поэтому я и сказал, что NULL может вносить неопределенность в вопросы о нормализации.
...
Рейтинг: 0 / 0
Моя таблица в третьей нормальной форме? (нуб)
    #38147678
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот "Нужно эту таблицу разбить на две - убрать столбец [Размер груди] из таблицы [Люди], сделать отдельную табличку [Дамы], в которой будет [ID], [Размер груди].
"
избавит именно от NULL в исходной таблице. Но к нормализации, возможно, отношения не имеет: никаких транзитвных зависмостей не устраняет
...
Рейтинг: 0 / 0
Моя таблица в третьей нормальной форме? (нуб)
    #38147858
stannull45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ennor Tiegaelstannull45Если [Пол] == М, то [Размер груди] == NULL. А по-моему, это утверждение расходится с объективной реальностью.

[Размер груди] выбран в примере, как признак не релевантный для мужчин.
Смысл в том, что в таблице есть столбцы (в моем примере это [Размер груди]), которые релевантны только для части строк .

Еще пример:
Пусть есть таблица с товарами - мониторы, мыши, процессоры.
Мы же не будем класть все в одну таблицу, создавать столбец-перечисление с типом товара, и пихать в одну таблицу такие атрибуты, как диагональ монитора, наличие провода у мыши, тактовую частоту процессора.
Я бы интуитивно тут разделил на разные таблицы. Но объяснить почему я так интуитивно делаю у меня не получается. "Так правильнее" и все. Не хватает видимо фундаментального образования в этой области. :(
...
Рейтинг: 0 / 0
Моя таблица в третьей нормальной форме? (нуб)
    #38147880
stannull45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vadiminfo Хотя Пол вообще типа выводимое, т.е. оно как бы известно и так без ввода в БД. Т.е. вообще на выкидывание могло прендовать.
Нет, обязательно есть признак м или ж, а заносить [Размер груди] для женщин не обязательно. Но просто для части женщин он будет неизвестен, а для мужчин он просто не релевантен, т.к. с точки зрения бизнес логики нам не важно какая грудь у мужчин, им например надо свой столбец с понятно какой характеристикой). Который опять таки будет не релевантен для женщин.

vadiminfo
Однако, правда в том, что есть NULL. В этом случае говорить об ФЗ с участием NULL, возможно, не совсем корректно.
Не могу понять почему говорить о функциональной зависимости не совсем корректно?
...
Рейтинг: 0 / 0
Моя таблица в третьей нормальной форме? (нуб)
    #38147885
stannull45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_20040621> эта таблица не удовлетворяет 3NF?

Сложно предположить, чему она вообще удовлетворяет. Начнем с того, что размер груди - такой, как вы его понимаете - шкала для нижнего белья.

Ну почему только для нижнего. Для маек тоже может быть важно. И потом может это не магазин, а каталог девушек легкого поведения.

Собственно, повторюсь - важно что часть столбцов имеет смысл только для части строк. Для женщин одно важно - длина волос, размер груди, а для мужчин другие столбцы - наличие квартиры, машины и тд.
...
Рейтинг: 0 / 0
Моя таблица в третьей нормальной форме? (нуб)
    #38147898
stannull45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я теперь рад переформулировать свой вопрос - что вообще не так с моей таблицей, в которой у меня есть столбцы, которые имеют смысл только для части строк. Она не удовлетворяет требованиям нормальных форм или может все с ней впорядке?
Я просто сделал так как сделал, а объяснить почему не могу. И стыдно, что не могу.
...
Рейтинг: 0 / 0
Моя таблица в третьей нормальной форме? (нуб)
    #38147972
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stannull45... Она не удовлетворяет требованиям нормальных форм или может все с ней впорядке?
...
Есть еще, возможный, варианты. Например, затруднения в применения теории для оптимизации схемы, в частности, постановка об удовлетворении "всем требованиям нормальных форм" может быть не совсем корректной. В результате теория может не совсем помоч в устанекнии избыточности, аномалий. Больше, наверное, придется полагаться на свой опыт.
...
Рейтинг: 0 / 0
Моя таблица в третьей нормальной форме? (нуб)
    #38148000
Netmould
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все зависит от того, где это будет применяться, и для чего проектируется. Вообще, можно делать как угодно.
Пример из жизни.
Есть серьезный такой софт, HP SM (см гугль), который обычно продается (за кучу денег) в комплекте с CMDB (см гугль, опять же).
Так вот, в этой CMDB все конфигурационные единицы (сервера\мобильные телефоны\сканеры, свитчи, и т.д.) хранятся в одной таблице, в которой столбцами являются все учитываемые параметры всех конфигурационных единиц.
Естественно, наборы параметров у факса и циски отличаются, но ничего, стоят NULL'ы в неиспользуемых, и все живы-здоровы.

Предлагаю подумать, что бы было, если б для каждого типа\подтипа\подподтипа КЕ создавалась бы своя таблица :).
...
Рейтинг: 0 / 0
Моя таблица в третьей нормальной форме? (нуб)
    #38148001
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stannull45,

Плохой пример. Неудачный. Объясняю, почему.

Когда у вас в базе всего 2 пола, и расширение этого справочника до, например, 4757904 в ближайшее время не планируется, вполне допустимо иметь поля, подходящие только для части записей. Опять-таки, это сегодня они подходят только для части, а завтра все поменяется, и вопрос как таковой вообще исчезнет. Кроме того, строго говоря, провести соотв. измерения можно на любом человеке, и далеко не всегда этот результат будет бессмысленным. Таким образом, даже если вам этот результат не нужен, это не значит, что он зависит от другого неключевого атрибута.

Однако когда справочник типов в общем случае неограниченно расширяем, как это имеет место быть с компьютерным железом, вы не напасетесь таких полей. В этом случае более эффективными могут оказаться решения типа EAV, где разными сущностями вообще не пахнет. Обсуждать же (де)нормализацию EAV - явно не ваш случай.
...
Рейтинг: 0 / 0
Моя таблица в третьей нормальной форме? (нуб)
    #38148011
Netmould
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чуть упростил конечно, про "все параметры". Не все - к примеру номера внутренних телефонов хранятся отдельно, потому что они активно используются в логике HPSM.
...
Рейтинг: 0 / 0
Моя таблица в третьей нормальной форме? (нуб)
    #38148052
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfo
Однако, правда в том, что есть NULL. В этом случае говорить об ФЗ с участием NULL, возможно, не совсем корректно.
Не могу понять почему говорить о функциональной зависимости не совсем корректно?[/quot]
ФЗ определяется на соотношения значений атрибутов, а NULL означет отсутвие значений.
...
Рейтинг: 0 / 0
Моя таблица в третьей нормальной форме? (нуб)
    #38148117
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stannull45тут нарушено "все неключевые атрибуты взаимно независимы"
У вас ничего не нарушено. Не путайте функциональные зависимости с зависимыми значениями типа Если А то д.б. Б, где А и Б любые предикаты.
...
Рейтинг: 0 / 0
Моя таблица в третьей нормальной форме? (нуб)
    #38148209
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stannull45,
разделение на Людей и Дам, может произойти на этапе концептуального проектирования в ER в ходе процессов обобщения (уточнения) с целью избежать хранить в одной типе сущности разные. Особенно если у Дам и Джентльменов много своих атрибутов. Люди - Супер класс, с общими свойствами для всех полов. Дамы и Джентльмены - подклассы, с характерными свойствами, только для них.
На этапе логического проектирования такое деление, может быть, связано с желанием избавиться от необязательных атрибутов или навязать декларативные ОЦ в некоторых случаях.
В процессе нормализации, скорее всего, предпочтительнее выглядят обязательные атрибуты.
...
Рейтинг: 0 / 0
Моя таблица в третьей нормальной форме? (нуб)
    #38148447
stannull45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за обсуждение!

Я кажется навел порядок в голове.
Оказывается в англоязычной литературе эта проблема называется Table-per-Hierarchy versus Table-per-Type Inheritance.
То есть одна таблица на иерархию, либо по таблице на каждый тип.
Как написал vadiminfo, по сути то, что я описывал на уровне таблиц, в коде выглядело бы как наследование классов.
На уровне базы это можно реализовывать и как TPT, так и TPH из соображений производительности. В частности для моей области - MS SQL Server + Entity Framework рекомендуется TPH :
http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-inheritance-with-the-entity-framework-in-an-asp-net-mvc-application TPH inheritance patterns generally deliver better performance in the Entity Framework than TPT inheritance patterns, because TPT patterns can result in complex join queries.

В тоже время есть возможность следовать и подходу TPT. Более того, вот тут человек аргументирует по поводу недостатков TPH:
http://weblogs.asp.net/manavi/archive/2010/12/24/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-1-table-per-hierarchy-tph.aspx TPH Violates the Third Normal Form

Another important issue is normalization. We’ve created functional dependencies between nonkey columns, violating the third normal form. Basically, the value of Discriminator column determines the corresponding values of the columns that belong to the subclasses (e.g. BankName) but Discriminator is not part of the primary key for the table. As always, denormalization for performance can be misleading, because it sacrifices long-term stability, maintainability, and the integrity of data for immediate gains that may be also achieved by proper optimization of the SQL execution plans (in other words, ask your DBA).
В частности он утверждает, что такая таблица TPH будет нарушать третью нормальную форму.
Применительно к моему примеру дискриминатором выступает этот самой столбец [Пол]. Этот столбец определяет какие колонки принадлежат к каким подклассам. При этом этот дискриминатор не является частью первичного ключа. Это и нарушает условие третьей нормальной формы "ни один неключевой атрибут R не находится в транзитивной функциональной зависимости от потенциального ключа R" http://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%B5%D1%82%D1%8C%D1%8F_%D0%BD%D0%BE%D1%80%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%84%D0%BE%D1%80%D0%BC%D0%B0] http://ru.wikipedia.org/wiki/Третья_нормальная_форма
Таким образом я сейчас считаю, что все же третьей нормальной форме моя таблица не удовлетворяет. Хотя я решил ее оставить как есть, оправдывая себя тем, что для Entity Framework это рекомендуется.
...
Рейтинг: 0 / 0
Моя таблица в третьей нормальной форме? (нуб)
    #38148564
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stannull45При этом этот дискриминатор не является частью первичного ключа. Это и нарушает условие третьей нормальной формы "ни один неключевой атрибут R не находится в транзитивной функциональной зависимости от потенциального ключа R"

Таким образом я сейчас считаю, что все же третьей нормальной форме моя таблица не удовлетворяет. Хотя я решил ее оставить как есть, оправдывая себя тем, что для Entity Framework это рекомендуется.
Если, как вы говорите, еще и "Нет, обязательно есть признак м или ж, а заносить [Размер груди] для женщин не обязательно.", то наличие самих транзитных зависимостей, скорей всего, еще менее очевидно. Теперь даже если [Размер груди] IS NULL, то ПОЛ может быть как М так и Ж. Т.е. о зависмости [Размер груди]-> [ПОЛ] еще сложнее говорить. Зависимость [ПОЛ]->[Размер груди] нарушает наличие хотя бы двух женщин с разным размером: т.е. такой Ф зависимости нет. Т.е. Ваши выводы о нарушении 3НФ, возможно, все еще преждевременны.

ПС. для вопросов о нормальных формах, скорее всего, никакие классы не нужны: одним из достоинств РМД является именно теоретическая обоснованность. ООП, ООМД не имеют таковой: там шаблоны основанные на удачном опыте, а не теория.
...
Рейтинг: 0 / 0
Моя таблица в третьей нормальной форме? (нуб)
    #38148568
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> То есть одна таблица на иерархию, либо по таблице на каждый тип.

Для вашего примера с полом это будет плохо работать. В разных государствах допустима разная идентификация пола + пол можно изменить + под полом для разных целей могут подразумеваться существенно разные понятия + существуют люди, носящие признаки обоих полов.

> для Entity Framework это рекомендуется

Не читайте то, что пишут на заборах.
...
Рейтинг: 0 / 0
Моя таблица в третьей нормальной форме? (нуб)
    #38182067
Фотография Евгений Фадеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stannull45Правильно ли я понимаю, то эта таблица не удовлетворяет 3NF? Т.к. тут нарушено "все неключевые атрибуты взаимно независимы" (зависимы [Размер груди] зависит от [Пол]).
Нужно эту таблицу разбить на две - убрать столбец [Размер груди] из таблицы [Люди], сделать отдельную табличку [Дамы], в которой будет [ID], [Размер груди].
Не совсем так. Потому что на уровне такой схемы вы можете приписать размер груди и джентльмену. Не думаю что его это обрадует :)
Поэтому нужно делать альтернативный ключ на таблице Люди(ID, Пол), а в таблице Параметры груди делать составной внешний ключ (ЧеловекID, Пол) и CHECK CONSTRAINT (Пол = Ж) (я называю такой прием "протяжкой"). Таким образом вы будете на уровне DRI контролировать что параметры груди можно задать только для дамы. Но по прежнему не сможете контролировать наличие у дамы груди... Жизнь несправедлива.
...
Рейтинг: 0 / 0
Моя таблица в третьей нормальной форме? (нуб)
    #38182154
Лагман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все норм, гинекомастию никто не отменял.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Моя таблица в третьей нормальной форме? (нуб)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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