Используете ли вы зависимости и нормальные формы для разработки схемы реляционной базы данных?

У меня многолетний опыт работы инженером-программистом, и я много работал с базами данных, в основном с Oracle и Postgres. Я использую то, что можно снисходительно назвать неформальной методологией проектирования схем баз данных. Я набрасываю что-то вроде диаграммы E/R, а затем генерирую на ее основе DDL. Со временем я изменяю схему оттуда по мере поступления новых требований. У меня была тщательная академическая подготовка в области компьютерных наук, и я написал магистерские и докторские диссертации по темам, связанным с базами данных. Я понимаю зависимости, нормальные формы и подход декомпозиции. И я считаю этот подход к дизайну схемы совершенно бесполезным в реальном мире.

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

Обсуждения этих теоретических тем в учебниках начинаются с очень плохо разработанных схем и функциональных зависимостей, которые происходят из... ну, я не знаю. Они просто есть, и затем они ведут вас к лучшей схеме. Но, начав с хорошей модели Entity/Relationship, вы, вероятно, начнете с довольно хорошей схемы. И если вы понимаете, что представляют собой ваши сущности и каковы их атрибуты, разве вы не начинаете с таблиц, уже находящихся в BCNF?

Для тех из вас, кто разрабатывает и поддерживает схемы, вы действительно используете теорию зависимостей и нормальные формы? Или ты просто качаешься, как я?


comment
Я думаю с точки зрения функциональных зависимостей, когда разрабатываю таблицы или запросы. Когда я присоединяюсь к таблицам, мне нужно знать, какие столбцы определяют/идентифицируют вывод, чтобы знать, нужно ли мне выполнять GROUP BY. Это требует понимания ФД и ментальной алгебры с использованием аксиом Армстронга. Я знаю, что люди добиваются успеха, но я бы не хотел снова так работать.   -  person reaanb    schedule 23.02.2018
comment
Меня особенно интересует проектирование таблиц. Как получить ФД? Как вы получаете исходное определение таблицы, которое затем выигрывает от декомпозиции?   -  person Jack Orenstein    schedule 23.02.2018
comment
Когда я планирую функцию, я часто думаю, что для этого нам нужен FD от X до Y. Например. при разработке экранов или отчетов пользовательского интерфейса, если требуется отображать один Y для каждого X, потребуется соответствующий FD (который может быть транзитивным). Если FD не существует и его невозможно добавить, экран или отчет необходимо настроить для обработки нескольких Y для каждого X. Что касается декомпозиции, существует бесконечное количество устаревших таблиц, которые были созданы или адаптированы в рекламе. мода. Я также часто использую эти методы при исправлении противоречивых данных.   -  person reaanb    schedule 23.02.2018
comment
Итак, в случае с наследием: откуда вы получаете FD? Если у вас есть устаревшая схема, которая плохо разработана, я предполагаю, что у вас нет FD ни в одной документации, которую вы наследуете. Вы можете получить возможные FD из данных, но это имеет очевидные проблемы. (Даже исключение FD на основе данных имеет проблемы.)   -  person Jack Orenstein    schedule 23.02.2018
comment
Прежде чем рассматривать нормализацию таблицы, я знакомлюсь с содержимым таблицы и проверяю любые связанные ограничения FK и представления. Затем я буду искать в исходном коде приложения любые ссылки на таблицу и ее поля, просматривая запросы и окружающий код. Если бы у меня были сомнения, я бы также обсудил схему с другими разработчиками и владельцем продукта. Я также являюсь экспертом в предметной области, проработав более 20 лет в своей текущей отрасли, поэтому у меня достаточно ресурсов, чтобы помочь мне понять требования и прояснить или решить, какими должны быть FD.   -  person reaanb    schedule 23.02.2018
comment
И я считаю этот подход к проектированию схемы совершенно бесполезным в реальном мире. Почему? Это неточно? Это неопределенно? Вы не понимаете, откуда берутся функциональные зависимости?   -  person Mike Sherrill 'Cat Recall'    schedule 27.02.2018
comment
Если я понимаю модель, то я знаю сущности и атрибуты, а также знаю FD. Но, зная сущности и атрибуты, я могу создать схему, которая почти наверняка будет иметь таблицы BCNF. Академические дискуссии о зависимостях и декомпозиции начинаются с плохих схем, FD, казалось бы, ниоткуда, и крайне нереалистичных примеров (ИМХО). Отсюда мой вопрос.   -  person Jack Orenstein    schedule 27.02.2018
comment
Вероятно, вам лучше обратиться к администраторам баз данных. (Или Информатика.) Хотя я нахожу это XYish - ваш реальный интерес, похоже, заключается в том, "есть ли реальная ценность этого подхода?" . Нормализация плохо представлена ​​в учебниках и отвратительно представлена ​​вне учебников, поэтому практически всегда плохо изучена или неправильно понята, или просто не изучена, так что бы вы использовали, чтобы получить вас? (Я все еще намереваюсь опубликовать ответ - о том, что даже самые лучшие презентации - беспорядок, но что нормализация имеет решающее значение, а моделирование ER неадекватно - но обоснование делает это чем-то вроде эссе.)   -  person philipxy    schedule 27.04.2018


Ответы (5)


Учебники и курсы часто объясняют нормализацию примерами прогрессивной декомпозиции — начиная со схем, где зависимости не обеспечиваются должным образом с помощью ключей, а затем переходят к более совершенным проектам, которые удовлетворяют BCNF, 5NF и т. д. Это учебное упражнение используется для объяснения некоторых концепций и методов; это не план того, как должен быть выполнен реальный дизайн базы данных. Это похоже на практику длинного деления на уроках математики не потому, что этот метод широко используется, а потому, что важно знание фундаментальной арифметики.

Я использовал анализ функциональных зависимостей для решения некоторых сложных случаев, проверки проектов и нормализации путем синтеза. Есть несколько инструментов CASE, которые поддерживают нормализацию путем синтеза, и, возможно, жаль, что большинство основных программных инструментов этого не делают.

person nvogel    schedule 11.05.2018

Когда я создавал базы данных, я обычно начинал с хорошей модели ER. Мне нужно было это, чтобы проверить мое понимание предмета. После преобразования модели ER в реляционную модель результат обычно был в 3NF, часто в BCNF. Обычно достаточно хорош для работы OLTP. Для работы с OLAP я использовал звездообразную схему. Это было полно аномалий обновления, с которыми я справился, осторожно используя ETL. Просто мой взгляд.

person Walter Mitty    schedule 11.05.2018

Обычно сочетания глубокого понимания бизнеса (часто приобретаемого в результате тщательно разработанного концептуального моделирования) и не слишком большого опыта в практике проектирования будет достаточно, чтобы в большинстве случаев получить проекты 5NF «с самого начала». Таким образом, «процедура нормализации», обычно иллюстрируемая/предлагаемая в учебниках, на самом деле почти никогда не практикуется. Применение этой процедуры является своего рода подходом «снизу вверх», который кажется совершенно неестественным большинству практикующих дизайнеров, которые в значительной степени предпочитают «сверху вниз», начиная с концептуальных моделей, которые часто уже «разложены» точно так, как вы в конечном итоге получите. применение процедуры нормализации как метода.

Это не означает, что теория нормализации сама по себе может исчезнуть. Он по-прежнему представляет собой формальное обоснование того, почему некоторые дизайны "лучше", чем другие альтернативные дизайны, решающие ту же проблему.

Теория FD также является важным материалом, который должны знать разработчики СУБД. Например, реляционные СУБД должны иметь возможность делать то, что называется «ключевым выводом» для реляционных выражений (т. е. вычислять, каким ключам гарантируется результат, скажем, JOIN, учитывая, каковы ключи входных данных. Такой вывод был бы невозможен без теории ФД.)

Что касается «если вы понимаете, что такое ваши объекты и каковы их атрибуты, разве вы не начинаете с таблиц, уже находящихся в BCNF?» , это немного зависит от ваших сущностей концептуального уровня, которые были идентифицированы «правильно» (по некоторому значению этого последнего слова — то, что я имею в виду, так это то, что так же, как люди могут придумать плохой дизайн базы данных, они также могут прийти с плохими концептуальными моделями, и если вы используете такую ​​​​плохую модель в качестве основы для дизайна базы данных, вы можете догадаться, что получится).

person Erwin Smout    schedule 06.06.2018

reannb рассказывает о различных артефактах, которые могут предоставить информацию о FD: опыт предметной области, дизайн пользовательского интерфейса, ограничения FK, исходный код, запросы, общение с другими разработчиками. Другими словами, вы либо просто каким-то образом знаете FD (экспертов в предметной области, других разработчиков), либо вы смотрите на дистилляцию знаний от этих людей (пользовательский интерфейс, FK, код). Но откуда эксперты в предметной области получают FD? Если это не модель E/R — явная или внутренняя, интуитивная — тогда каков источник FD?

Эрвин Смаут говорит, в основном, GIGO, что, очевидно, верно. Но это все еще не говорит, откуда берутся FD, если не модель E/R.

Так что я до сих пор не понимаю: откуда берутся FD, если не модель E/R? Поясню: я не говорю, что теория нормализации бесполезна, я согласен с точкой зрения Эрвина Смаута по этому вопросу. Кроме того, я не спрашиваю, потому что я новичок (см. мой оригинальный пост). Мой вопрос связан с преподаванием дизайна схемы. Обсуждения теории нормализации кажутся весьма надуманными. Они начинают с очень плохо разработанной схемы и функциональных зависимостей, которые берутся... ну, они никогда не говорят, откуда берутся FD. Примените правила и вуаля, у нас есть схема BCNF. Мне кажется, что более правдоподобным, реалистичным и полезным подходом будет сказать:

  • Разработка схемы начинается с модели E/R.

  • Вот процедуры для создания набора таблиц и определений FK из модели E/R.

  • Теперь обратите внимание, что ваша модель E/R фактически подразумевает эти функциональные зависимости.

  • Затем перейдите к теории нормализации и покажите, как разложение BCNF (например) дает ту же схему из довольно плохих начальных точек.

  • Если вы унаследовали плохую схему, разработка четкой модели E/R и функциональных зависимостей может помочь вам определить хорошую схему.

person Jack Orenstein    schedule 06.06.2018
comment
Вы также можете спросить, откуда взялась модель E/R. Ответ: дизайнеры берут интервью у экспертов в предметной области. И в основном это все. Все исходит оттуда. Другое дело, будут ли результаты этих интервью записаны в форме схем отношений и наборов FD. На практике я такого никогда не видел. Таким образом, вы правильно заметили, что на практике при выполнении любых действий, таких как разложение НФБК, всегда не хватает входных данных, которые формально требуются для завершения процесса. ... - person Erwin Smout; 07.06.2018
comment
Но я не верю, что проектировщики БД могут позволить себе не знать о различных НФ и их свойствах с точки зрения аномалий обновления, которые возникают при любом дизайне в любой конкретной xNF. ... - person Erwin Smout; 07.06.2018
comment
Тем не менее, я также считаю, что следует учить тому, в чем и где заключаются недостатки теории ФД. Например, как он не справляется с требованиями неперекрытия между диапазонами времени/дат во временных базах данных. Например, как SQL NULL размывает или даже сводит на нет многие свойства, которые, как можно предположить, имеют дизайн, основанные на его схемах плюс FD. (Если у вас есть схема XY с FD X->Y, можете ли вы иметь два кортежа (null, A) и (null, B) ???) и т. д. и т. д. (Обратите внимание, я не говорю это последнее вещь, чтобы защищать NULL в любом случае!) - person Erwin Smout; 07.06.2018
comment
Деловые ситуации, которые могут возникнуть, и значения таблиц вместе определяют ограничения. Ограничения описывают инвариантные свойства состояния базы данных и одновременно через смыслы бизнес-ситуацию. FD выполняется, когда его детерминантный подкортеж имеет ровно 1 значение для своего детерминированного подкортежа в своей таблице. Это одновременно говорит о том, что в деловой ситуации имеет место определенный смысл. (Например, ровно 1 сотрудник управляет отделом.) Мы объявляем FK, потому что видим, что ограничение и/или импликация выполняются. Для этого нам не нужен дизайн ER, только реляционный. - person philipxy; 07.06.2018
comment
Это не ответ на вопрос. Он повторяет/уточняет/расширяет вопрос. Часть должна быть включена в вопрос посредством редактирования, а не опубликована как ответ. Кроме того, в основном задается новый (связанный) вопрос: откуда берутся FD? Так что это следует тщательно интегрировать (возможно, в качестве примера), если оно не опубликовано как отдельный вопрос. (См. также мой комментарий XY к этому вопросу.) PS Нормализация и значения. - person philipxy; 07.06.2018
comment
Эрвин Смаут: Это отличное замечание — модель ER и FD исходят из одного источника. Итак, если мы говорим в терминах ER, что сущность E обладает свойствами A, B, C, D; и что E однозначно идентифицируется (A, B), то мы имеем FD AB -> CD. Кроме того, декомпозиция имеет тенденцию помещать каждый ключ в свою собственную таблицу. Таким образом, оба подхода действительно указывают в одном направлении. Некоторые части теории нормализации касаются ситуаций с перекрывающимися ключами сущностей. Однако мне не ясно, действительно ли дизайн ER создаст схему, в которой вам нужно будет распутывать вещи с помощью FD. - person Jack Orenstein; 07.06.2018
comment
Нет, потому что если все, что у вас есть, это схема ER, определяющая ключи, то по определению вы можете разумно предположить, что применимы только те FD, которые получены из ключей. И тогда по определению должно быть так, что соответствующие схемы логических отношений находятся в НФБК. Кстати, у меня есть предложение для вас. Попробуйте найти книгу FCO-IM в Интернете. Речь идет об альтернативной технике концептуального моделирования, и в ней есть очень подробные сведения о том, как должен проходить этот процесс собеседования. Не все его разговоры одинаково удачны/похвально, но я думаю, вам понравится. - person Erwin Smout; 08.06.2018

"Вы на самом деле используете теорию зависимостей и нормальные формы? Или просто флиртуете, как я?"

Я разрабатываю схемы баз данных более пятнадцати лет.

Тем не менее, я никогда не использовал теорию зависимостей (анализ функциональной зависимости - FDA). И при этом я не "крыл это".
И тем не менее, все мои проекты схем находятся в пятой нормальной форме. (5НФ)

Мой секрет в том, что я использую формальный метод, называемый «объектно-ролевое моделирование». Я использую бесплатный инструмент под названием NORMA для разработки формальной модели, из которой инструмент NORMA может автоматически генерировать логическую модель 5NF.

В процессе моделирования у меня открыто окно «реляционного представления», которое автоматически и мгновенно создает логическое представление 5NF моей модели объектной роли в ее «текущем состоянии».

Когда я доволен своим дизайном, я выбираю целевую СУБД (например, SQL Server), и через несколько щелчков мыши у меня есть SQL DDL, который я затем вырезаю и вставляю в панель «Новый запрос» в SQL Server Management Studio. Этот метод гораздо более эффективен, чем FDA или его использование.

Вы можете загрузить бесплатный инструмент NORMA отсюда. руководства находятся здесь.

Между прочим, недавно я услышал об университете, который отказался от моделирования отношений объектов в пользу обучения моделированию объектов и ролей.

Признание: я использовал FDA, будучи студентом, на нескольких университетских курсах, но этого было достаточно, чтобы отказаться от него на всю жизнь!

person Ken Evans    schedule 28.04.2019