Что хранится в ответе теста файлов реляционной базы данных

Обновлено: 30.06.2024

С незапамятных времен поставщики баз данных призывали разработчиков: «Храните все в базе данных. Ты знаешь чего хочешь. Здесь мы упростим вам задачу, добавив такие типы данных, как двоичные файлы, и такие функции, как файловый поток».

Ах, но эта песня сирены ведет вас к вашей окончательной гибели.

Пользователи хотят хранить исторические версии файлов. Вначале в требованиях к дизайну может быть указано сохранение только самой последней версии файла, но это изменится. Пользователи со временем захотят сохранить каждую версию — и даже если они этого не сделают, они будут создавать «новые» файлы, сохраняя их под немного другим именем. Вы знаете этот файл 2022_Budget_Final_v2_with_Changes.xlsx и все его прародители? Да, они все живут в базе данных навсегда.

Пользователи часто создают новые версии. Вы знаете, как вы все время нажимаете «Файл», «Сохранить», потому что вы привыкли к дрянным приложениям, которые вылетают и теряют ваш прогресс? Теперь подумайте о том, что каждый раз приходится обращаться к серверу реляционной базы данных, умноженному на всех пользователей, работающих в этой системе.


Поверь мне, у меня есть шрамы

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

Файлы большие. Реляционные базы данных прекрасно работают с таблицами, разбитыми на строки и столбцы. Когда мы вставляем строки или обновляем столбцы, мы каждый раз затрагиваем только относительно небольшой объем данных, что упрощает отслеживание в журналах транзакций и быструю запись в хранилище. Иначе обстоит дело с файлами, которые обычно содержат несжимаемые объекты, например изображения.

Большая база данных означает более медленное резервное копирование. Мы говорим не только о ваших полных резервных копиях, но и о более медленных резервных копиях журналов транзакций. Поскольку ваши пользователи постоянно сохраняют новые версии файлов, эти версии записываются в журнал транзакций, и их необходимо создавать резервные копии. (Пользователям файлового потока: прежде чем вы будете в восторге от того, что ваша функция «отлична», перепроверьте размеры резервной копии вашего журнала, потому что файловый поток не работает так, как вы думаете.)

Большая база данных означает более высокую доступность и аварийное восстановление. Нам нужно не только создать резервную копию журнала транзакций, но и перенести эти транзакционные изменения на другие наши реплики. Этот огромный объем журнала означает, что очень сложно выполнять синхронные реплики в других центрах обработки данных, и другим центрам обработки данных очень легко отставать в транзакциях. Когда пользователь добавляет файл размером 100 МБ, а затем другой пользователь пытается вставить одну строку, эта строка должна ждать, пока файл размером 100 МБ не будет синхронизирован первым. Хранилище файлов с низкой ценностью может привести к гораздо худшим показателям времени восстановления для наших более ценных данных.

Серверы баз данных плохо справляются с повторной синхронизацией данных. Когда репликация прерывается или вам нужно повторно добавить реплику группы доступности (или доставку журналов, репликацию или что-то еще), SQL Server недостаточно умен, чтобы синхронизировать только разные данные или синхронизировать данные из ближайшей реплики. Это не имеет большого значения для небольших транзакционных таблиц, но добавляет терабайты файловых данных, и повторная синхронизация превращается в кошмар.

Наконец, серверы баз данных являются дорогостоящим и сложным узким местом. Если вы составите список всех серверов в вашей компании и ранжируете их по вещам, которые заставят вас рвать на себе волосы, серверы реляционных баз данных, вероятно, окажутся наверху каждого списка. Их лицензирование и поддержка стоят дорого, их сложно настроить, и у вас просто не так много людей в штате, которые действительно разбираются в них.

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

Есть лучший способ:
хранить файлы в файловой системе.

Файловые системы существуют очень давно, и в них есть инструменты, помогающие решить эти проблемы. Лучше всего то, что они безумно, безумно дешевы, особенно по сравнению с реляционными базами данных.

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

Потому что, если вы не выполняете с ней реляционное соединение,
она не принадлежит реляционной базе данных.

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

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

Метаданные придают данным контекст, а во время таких кризисов, как война на Украине, когда трудно понять, каким новостям доверять, контекст.

Считаете, что готовы к сертификационному экзамену AWS Certified Solutions Architect? Проверьте свои знания, ответив на эти 12 вопросов и.

Amazon заявила, что ее система мониторинга микроавтобусов предназначена исключительно для обеспечения безопасности водителей. Но многие отраслевые эксперты обеспокоены этим.

Amazon хотела бы укрепить свое глобальное присутствие, но гигант электронной коммерции сегодня сталкивается с препятствиями и проблемами, которых у него не было.

Генеральный директор Sitecore Стив Цикакис вступил во владение во время пандемии — на фоне стремительного роста — и переосмыслил компанию как цифровую.

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

Успешное развертывание ECM требует планирования. Менеджеры контента должны учитывать жизненный цикл контента своей организации, безопасность .

Oracle планирует приобрести Cerner в рамках сделки на сумму около 30 млрд долларов. Второй по величине поставщик электронных медицинских карт в США может вдохнуть новую жизнь .

Верховный суд постановил 6-2, что API-интерфейсы Java, используемые в телефонах Android, не подпадают под действие американского закона об авторском праве.

В этом руководстве рассматриваются возможности Oracle Autonomous Database для пользователей Oracle и вопросы, которые следует учитывать организациям.

Поскольку настройки имеют долгосрочные последствия, организации, использующие SAP ECC в качестве основной ERP-системы, должны предоставить .

Многие компании могут извлечь выгоду из возможностей аналитики, а организации, использующие SAP ECC, по-прежнему могут создавать эффективные .

Внедрение S/4HANA сопряжено со значительным риском, но также предлагает реальную возможность цифровой трансформации. Вот .

Хороший дизайн базы данных необходим для удовлетворения потребностей обработки в системах SQL Server. На вебинаре консультант Коэн Вербек предложил .

Базы данных SQL Server можно переместить в облако Azure несколькими способами. Вот что вы получите от каждого из вариантов .

В отрывке из этой книги вы познакомитесь с методами LEFT OUTER JOIN и RIGHT OUTER JOIN и найдете различные примеры создания SQL.

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

Пример реляционной базы данных

Вот простой пример двух таблиц, которые малый бизнес может использовать для обработки заказов на свои продукты. Первая таблица — это таблица информации о клиенте, поэтому каждая запись включает имя клиента, адрес, информацию о доставке и выставлении счетов, номер телефона и другую контактную информацию. Каждый бит информации (каждый атрибут) находится в своем собственном столбце, и база данных присваивает каждой строке уникальный идентификатор (ключ). Во второй таблице — таблице заказов клиентов — каждая запись включает идентификатор клиента, разместившего заказ, заказанный продукт, количество, выбранный размер и цвет и т. д., но не имя клиента или контактную информацию.< /p>

У этих двух таблиц есть только одна общая черта: столбец ID (ключ). Но благодаря этому общему столбцу реляционная база данных может создать связь между двумя таблицами. Затем, когда приложение обработки заказов компании отправляет заказ в базу данных, база данных может перейти к таблице заказов клиентов, получить правильную информацию о заказе продукта и использовать идентификатор клиента из этой таблицы для поиска счетов и доставки клиента. информация в информационной таблице клиента. Затем склад может забрать правильный продукт, клиент может получить своевременную доставку заказа, а компания может получить оплату.

Как устроены реляционные базы данных

Реляционная модель означает, что логические структуры данных — таблицы данных, представления и индексы — отделены от физических структур хранения. Это разделение означает, что администраторы баз данных могут управлять физическим хранилищем данных, не затрагивая доступ к этим данным как к логической структуре. Например, переименование файла базы данных не приводит к переименованию хранящихся в нем таблиц.

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

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

Реляционная модель

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

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

Со временем появилась еще одна сильная сторона реляционной модели, поскольку разработчики начали использовать язык структурированных запросов (SQL) для записи и запроса данных в базе данных. В течение многих лет SQL широко использовался в качестве языка запросов к базе данных. Основанный на реляционной алгебре, SQL предоставляет внутренне согласованный математический язык, который упрощает повышение производительности всех запросов к базе данных. Для сравнения, другие подходы должны определять отдельные запросы.

Преимущества системы управления реляционными базами данных

Простая, но мощная реляционная модель используется организациями всех типов и размеров для самых разных информационных потребностей. Реляционные базы данных используются для отслеживания запасов, обработки транзакций электронной торговли, управления огромными объемами критически важной информации о клиентах и ​​многого другого. Реляционная база данных может использоваться для любых потребностей в информации, в которых точки данных связаны друг с другом и должны управляться безопасным, основанным на правилах и согласованным способом.

Реляционные базы данных существуют с 1970-х годов. Сегодня преимущества реляционной модели по-прежнему делают ее наиболее распространенной моделью для баз данных.

Реляционная модель и согласованность данных

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

Для других типов баз данных сложно поддерживать такой уровень своевременной согласованности с большими объемами данных. Некоторые современные базы данных, такие как NoSQL, могут обеспечивать только «согласованность в конечном итоге». В соответствии с этим принципом, когда база данных масштабируется или когда несколько пользователей одновременно обращаются к одним и тем же данным, данным требуется некоторое время, чтобы «наверстать упущенное». Конечная согласованность приемлема для некоторых целей, например для ведения списков в каталоге продуктов, но для важных бизнес-операций, таких как операции с корзиной покупок, реляционная база данных по-прежнему является золотым стандартом.

Приверженность и атомарность

Реляционные базы данных обрабатывают бизнес-правила и политики на очень детальном уровне, со строгими политиками в отношении обязательств (то есть, делая изменения в базе данных постоянными). Например, рассмотрим базу данных инвентаризации, которая отслеживает три детали, которые всегда используются вместе. Когда одна часть вытягивается из инвентаря, две другие тоже должны вытягиваться. Если одна из трех частей недоступна, ни одна из частей не должна быть извлечена — все три части должны быть доступны до того, как база данных примет какое-либо обязательство. Реляционная база данных не будет фиксировать одну часть, пока не узнает, что может фиксировать все три. Эта многогранная возможность обязательства называется атомарностью. Атомарность — это ключ к обеспечению точности данных в базе данных и обеспечению их соответствия правилам, положениям и политикам бизнеса.

Свойства ACID и РСУБД

Четыре важнейших свойства определяют транзакции реляционных баз данных: атомарность, непротиворечивость, изоляция и надежность, обычно называемые ACID.

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

Хранимые процедуры и реляционные базы данных

Доступ к данным включает множество повторяющихся действий. Например, простой запрос на получение информации из таблицы данных может потребоваться повторить сотни или тысячи раз, чтобы получить желаемый результат. Эти функции доступа к данным требуют некоторого типа кода для доступа к базе данных. Разработчики приложений не хотят писать новый код для этих функций в каждом новом приложении. К счастью, реляционные базы данных допускают хранимые процедуры, представляющие собой блоки кода, доступ к которым можно получить с помощью простого вызова приложения. Например, одна хранимая процедура может обеспечить согласованную маркировку записей для пользователей нескольких приложений. Хранимые процедуры также могут помочь разработчикам убедиться, что определенные функции данных в приложении реализованы определенным образом.

Блокировка базы данных и параллелизм

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

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

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

На что обратить внимание при выборе реляционной базы данных

Программное обеспечение, используемое для хранения, управления, запроса и извлечения данных, хранящихся в реляционной базе данных, называется системой управления реляционной базой данных (RDBMS). СУБД обеспечивает интерфейс между пользователями, приложениями и базой данных, а также административные функции для управления хранением данных, доступом и производительностью.

Несколько факторов могут повлиять на ваше решение при выборе между типами баз данных и продуктами реляционных баз данных. Выбранная вами СУБД будет зависеть от потребностей вашего бизнеса. Задайте себе следующие вопросы:

  • Каковы наши требования к точности данных? Будут ли хранение и точность данных зависеть от бизнес-логики? Есть ли у наших данных строгие требования к точности (например, финансовые данные и правительственные отчеты)?
  • Нужна ли нам масштабируемость? Каков масштаб данных, которыми нужно управлять, и каков их ожидаемый рост? Должна ли модель базы данных поддерживать зеркальные копии базы данных (как отдельные экземпляры) для масштабируемости? Если да, то может ли он поддерживать согласованность данных в этих экземплярах?
  • Насколько важен параллелизм? Потребуется ли нескольким пользователям и приложениям одновременный доступ к данным? Поддерживает ли программное обеспечение базы данных параллелизм при защите данных?
  • Каковы наши потребности в производительности и надежности? Нужен ли нам высокопроизводительный и надежный продукт? Каковы требования к производительности запроса-ответа? Каковы обязательства поставщика в отношении соглашений об уровне обслуживания (SLA) или незапланированных простоев?

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

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

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

Реляционная база данных была предложена Эдгаром Коддом (из IBM Research) примерно в 1969 году.С тех пор она стала доминирующей моделью базы данных для коммерческих приложений (по сравнению с другими моделями баз данных, такими как иерархические, сетевые и объектные модели). Сегодня существует множество коммерческих систем управления реляционными базами данных (RDBMS), таких как Oracle, IBM DB2 и Microsoft SQL Server. Существует также множество бесплатных РСУБД с открытым исходным кодом, таких как MySQL, mSQL (мини-SQL) и встроенная база данных JavaDB (Apache Derby).

Реляционная база данных организует данные в виде таблиц (или отношений). Таблица состоит из строк и столбцов. Строка также называется записью (или кортежем). Столбец также называется полем (или атрибутом). Таблица базы данных похожа на электронную таблицу. Однако связи, которые можно создать между таблицами, позволяют реляционной базе данных эффективно хранить огромные объемы данных и эффективно извлекать выбранные данные.

Для работы с реляционными базами данных был разработан язык SQL (язык структурированных запросов).

Цель разработки базы данных

Хорошо спроектированная база данных должна:

  • Устранение избыточности данных: одни и те же данные не должны храниться более чем в одном месте. Это связано с тем, что дублирование данных не только занимает место в хранилище, но и легко приводит к несоответствиям.
  • Обеспечение целостности и точности данных:
  • [TODO] еще

Процесс проектирования реляционной базы данных

Дизайн базы данных – это больше искусство, чем наука, поскольку вам приходится принимать множество решений. Базы данных обычно настраиваются в соответствии с конкретным приложением. Нет двух одинаковых специализированных приложений, а значит, нет двух одинаковых баз данных. Руководящие принципы (обычно с точки зрения того, что не делать, а что делать) предоставляются при принятии этих проектных решений, но выбор в конечном итоге зависит от вас - дизайнера.

Шаг 1. Определите назначение базы данных (анализ требований)

Соберите требования и определите цель вашей базы данных, например. .

Часто помогает составление образцов форм ввода, запросов и отчетов.

Шаг 2. Соберите данные, систематизируйте их в таблицы и укажите первичные ключи

После того как вы определились с назначением базы данных, соберите данные, которые необходимо хранить в базе данных. Разделите данные на предметные таблицы.

Выберите один столбец (или несколько столбцов) в качестве так называемого первичного ключа, который однозначно идентифицирует каждую из строк.

Первичный ключ

В реляционной модели таблица не может содержать повторяющиеся строки, так как это может привести к неоднозначности при поиске. Чтобы обеспечить уникальность, в каждой таблице должен быть столбец (или набор столбцов), называемый первичным ключом, который однозначно идентифицирует каждую запись в таблице. Например, уникальный номер customerID можно использовать в качестве первичного ключа для таблицы Customers; productCode для таблицы "Продукты"; isbn для таблицы Books. Первичный ключ называется простым ключом, если он представляет собой один столбец; он называется составным ключом, если он состоит из нескольких столбцов.

Большинство СУБД строят индекс на основе первичного ключа для облегчения быстрого поиска и поиска.

Первичный ключ также используется для ссылки на другие таблицы (которые будут уточнены позже).

Вы должны решить, какие столбцы будут использоваться для первичного ключа. Решение может быть непростым, но первичный ключ должен иметь следующие свойства:

  • Значения первичного ключа должны быть уникальными (т. е. не должны повторяться). Например, customerName может не подходить для использования в качестве первичного ключа для таблицы "Клиенты", так как могут быть два клиента с одинаковым именем.
  • Первичный ключ всегда должен иметь значение. Другими словами, он не должен содержать NULL.

При выборе первичного ключа учитывайте следующее:

  • Первичный ключ должен быть простым и знакомым, например, employeeID для таблицы сотрудников и isbn для таблицы книг.
  • Значение первичного ключа не должно изменяться. Первичный ключ используется для ссылки на другие таблицы. Если вы измените его значение, вам придется изменить все его ссылки; в противном случае ссылки будут потеряны. Например, phoneNumber может не подходить для использования в качестве первичного ключа для таблицы Customers , так как он может измениться.
  • Первичный ключ часто использует целочисленный (или числовой) тип. Но это могут быть и другие типы, например, тексты. Однако для эффективности лучше использовать числовой столбец в качестве первичного ключа.
  • Первичный ключ может принимать произвольное число. Большинство СУБД поддерживают так называемый автоинкремент (или тип AutoNumber) для целочисленного первичного ключа, где (текущее максимальное значение + 1) присваивается новой записи. Это произвольное число беспочвенно, поскольку не содержит фактической информации. В отличие от фактической информации, такой как номер телефона, номер без фактов идеально подходит для первичного ключа, поскольку он не меняется.
  • Первичный ключ обычно представляет собой один столбец (например, customerID или productCode ). Но он также может состоять из нескольких столбцов.Вы должны использовать как можно меньше столбцов.

Поясним на примере: таблица customers содержит столбцы lastName , firstName , phoneNumber , address , city , state , zipCode . Кандидаты на первичный ключ: name=(lastName, firstName) , phoneNumber , Address1=(address, city, state) , Address1=(address, zipCode) . Имя может быть не уникальным. Телефон и адрес могут измениться. Следовательно, в качестве первичного ключа лучше создать число с автоинкрементом без фактов, скажем, customerID .

Шаг 3. Создайте связи между таблицами

База данных, состоящая из независимых и несвязанных таблиц, бесполезна (вместо нее вы можете использовать электронную таблицу). Сила реляционной базы данных заключается в отношениях, которые можно определить между таблицами. Наиболее важным аспектом проектирования реляционной базы данных является определение отношений между таблицами. Типы отношений включают:

  1. один ко многим
  2. многие ко многим
  3. один к одному
Один ко многим

В базе данных "список классов" учитель может вести ноль или более классов, в то время как класс ведет один (и только один) учитель. В базе данных «компании» менеджер управляет нулем или более сотрудников, а сотрудником управляет один (и только один) менеджер. В базе данных «продажи продуктов» клиент может размещать много заказов; при размещении заказа одним конкретным покупателем. Этот вид связи известен как один ко многим.

Связь "один ко многим" не может быть представлена ​​в одной таблице. Например, в базе данных «список классов» мы можем начать с таблицы «Учителя», в которой хранится информация об учителях (например, имя, должность, телефон и адрес электронной почты). Чтобы хранить классы, преподаваемые каждым учителем, мы могли бы создать столбцы class1, class2, class3, но сразу столкнулись с проблемой, сколько столбцов нужно создать. С другой стороны, если мы начнем с таблицы Classes, в которой хранится информация о классе (courseCode, dayOfWeek, timeStart и timeEnd); мы могли бы создать дополнительные столбцы для хранения информации об (одном) учителе (например, имя, офис, телефон и адрес электронной почты). Однако, поскольку учитель может вести несколько занятий, его данные будут дублироваться во многих строках таблицы Classes .

Для поддержки связи "один ко многим" нам необходимо разработать две таблицы: таблицу "Классы" для хранения информации о классах с classID в качестве первичного ключа; и таблица «Учителя» для хранения информации об учителях с идентификатором учителя в качестве первичного ключа. Затем мы можем создать отношение «один ко многим», сохранив первичный ключ таблицы Teacher (т. е. TeacherID ) («один» конец или родительская таблица) в классах таблиц ( "many"-end или дочерняя таблица), как показано ниже.


Столбец TeacherID в дочерней таблице Classes называется внешним ключом. Внешний ключ дочерней таблицы — это первичный ключ родительской таблицы, используемый для ссылки на родительскую таблицу.

Обратите внимание, что для каждого значения в родительской таблице может быть ноль, одна или несколько строк в дочерней таблице. Каждому значению в дочерней таблице соответствует одна и только одна строка в родительской таблице.

Многие ко многим

В базе данных "продажи продуктов" заказ клиента может содержать один или несколько продуктов; и продукт может появиться во многих заказах. В базе данных «книжный магазин» книга написана одним или несколькими авторами; в то время как автор может написать ноль или более книг. Этот вид связи известен как многие ко многим.

Давайте проиллюстрируем это базой данных "Продажи товаров". Начнем с двух таблиц: Products и Orders. Таблица products содержит информацию о товарах (например, название, описание и количествоInStock) с productID в качестве первичного ключа. Таблица заказов содержит заказы клиентов (customerID, dateOrdered, dateRequired и status). Опять же, мы не можем хранить заказанные товары в таблице Orders, так как не знаем, сколько столбцов зарезервировать для товаров. Мы также не можем хранить информацию о заказе в таблице «Продукты».

Для поддержки связи "многие ко многим" нам нужно создать третью таблицу (известную как соединяющая таблица), скажем, OrderDetails (или OrderLines ), где каждая строка представляет элемент определенного заказ. Для таблицы OrderDetails первичный ключ состоит из двух столбцов: orderID и productID, которые однозначно определяют каждую строку. Столбцы orderID и productID в таблице OrderDetails используются для ссылок на таблицы Orders и Products, следовательно, они также являются внешними ключами в таблице OrderDetails.


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

  1. Заказ содержит много позиций в OrderDetails. Элемент OrderDetails принадлежит одному конкретному заказу.
  2. Товар может отображаться во многих элементах OrderDetails. В каждом элементе OrderDetails указан один продукт.
Один на один

В базе данных "Продажи товаров" товар может иметь необязательную дополнительную информацию, такую ​​как изображение , moreDescription и комментарий . Хранение их в таблице «Продукты» приводит к появлению множества пустых мест (в тех записях, где нет этих необязательных данных). Кроме того, эти большие данные могут снизить производительность базы данных.

Вместо этого мы можем создать другую таблицу (скажем, ProductDetails , ProductLines или ProductExtras ) для хранения дополнительных данных. Запись будет создана только для тех продуктов с дополнительными данными. Две таблицы, Products и ProductDetails, имеют отношение один к одному. То есть на каждую строку в родительской таблице приходится не более одной строки (возможно, ноль) в дочерней таблице. В качестве первичного ключа для обеих таблиц следует использовать один и тот же столбец productID.

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


Типы данных столбцов

Необходимо выбрать соответствующий тип данных для каждого столбца. Обычно к типам данных относятся: целые числа, числа с плавающей запятой, строка (или текст), дата/время, двоичные данные, коллекция (например, перечисление и набор).

Шаг 4. Уточните и нормализуйте дизайн

  • добавление дополнительных столбцов,
  • создайте новую таблицу для дополнительных данных, используя отношение "один к одному",
  • разбить большую таблицу на две меньшие,
  • другие.
Нормализация

Примените так называемые правила нормализации, чтобы проверить, является ли ваша база данных структурно правильной и оптимальной.

Первая нормальная форма (1NF): таблица является 1NF, если каждая ячейка содержит одно значение, а не список значений. Это свойство известно как atomic. 1NF также запрещает повторяющиеся группы столбцов, такие как item1, item2. пункт N . Вместо этого вы должны создать другую таблицу, используя отношение "один ко многим".

Вторая нормальная форма (2NF): таблица является 2NF, если она 1NF и каждый неключевой столбец полностью зависит от первичного ключа. Кроме того, если первичный ключ состоит из нескольких столбцов, каждый неключевой столбец должен зависеть от всего набора, а не от его части.

Например, первичный ключ таблицы OrderDetails, содержащий идентификатор заказа и идентификатор продукта . Если unitPrice зависит только от productID, он не должен храниться в таблице OrderDetails (но в таблице Products). С другой стороны, если unitPrice зависит как от продукта, так и от конкретного заказа, то она должна храниться в таблице OrderDetails.

Третья нормальная форма (3NF): таблица является 3NF, если она 2NF и неключевые столбцы не зависят друг от друга. Другими словами, неключевые столбцы зависят от первичного ключа, только от первичного ключа и ни от чего больше. Например, предположим, что у нас есть таблица Products со столбцами productID (первичный ключ), name и unitPrice. Столбец DiscountRate не должен принадлежать таблице Products, если он также зависит от unitPrice , который не является частью первичного ключа.

Высшая нормальная форма: 3NF имеет свои недостатки, которые приводят к более высоким нормальным формам, таким как нормальная форма Бойса/Кодда, четвертая нормальная форма (4NF) и пятая нормальная форма (5NF), которые выходят за рамки этого руководства.

Иногда вы можете решить нарушить некоторые правила нормализации по соображениям производительности (например, создать столбец с именем totalPrice в таблице Orders, который может быть получен из записей orderDetails); или потому, что конечный пользователь запросил его. Убедитесь, что вы полностью осведомлены об этом, разработайте программную логику для обработки и должным образом задокументируйте решение.

Правила честности

Вы также должны применять правила целостности для проверки целостности вашего дизайна:

Правило целостности объекта: первичный ключ не может содержать NULL. В противном случае он не может однозначно идентифицировать строку. Для составного ключа, состоящего из нескольких столбцов, ни один из столбцов не может содержать NULL. Большинство СУБД проверяют и применяют это правило.

Правило ссылочной целостности: каждое значение внешнего ключа должно соответствовать значению первичного ключа в таблице, на которую делается ссылка (или в родительской таблице).

  • Вы можете вставить строку с внешним ключом в дочернюю таблицу, только если значение существует в родительской таблице.
  • Если значение ключа изменяется в родительской таблице (например, обновляется или удаляется строка), все строки с этим внешним ключом в дочерних таблицах должны обрабатываться соответствующим образом.Вы можете либо (а) запретить изменения; (b) каскадировать изменения (или удалять записи) в дочерних таблицах соответствующим образом; (c) установить значение ключа в дочерних таблицах на NULL.

Большинство СУБД можно настроить для выполнения проверки и обеспечения ссылочной целостности указанным образом.

Читайте также: