12 правил Кодда для реляционных баз данных

Хочу представить вам цитату из книги Гроффа Джеймса Р. — SQL. Полное руководство — 2015г. Мне она показалась интересной, поэтому я решил её выделить в отдельную запись.

Когда в средине 1980-х годов реляционная модель стала очень популярной, почти все производители СУБД стали добавлять слово «реляционный» в описание своих продуктов. Но ряд из них был не более чем тонким слоем SQL-подобного языка на поверхности сетевой или иерархической базы данных. Некоторые реализовывали только рудиментарную табличную структуру, даже не пытаясь реализо­вать язык запросов. Вскоре вопрос так что же такое настоящая реляционная ба­за данных стал подниматься все чаще и чаще, а производители СУБД стали ут­верждать, что их продукты «реляционнее», чем продукты их конкурентов. В 1985 году Тед Ком (чья статья 15-летней давности определила реляционную модель данных) задался этим вопросом и ответил на него в журнале Compu­terworld (ls Your DBMS Really Relational? (Действительно ли ваша СУБД реляци­онная?, 14.10.1985) и Does Your DBMS Run Вy the Rules ? (Работает ли ваша СУБД по правилам?, 21 .10.1985)). Здесь он изложил двенадцать правил, которым должна соответствовать настоящая реляционная база данных.

  1. Правило представления информации. Вся информация в реляционной базе данных должна быть представлена исключительно на логическом уровне и только одним способом — в виде значений, содержащихся в таблицах.
  2. Правило гарантированного доступа. Логический доступ ко всем и каждому элементу данных (атомарному значению) в реляционной базе данных дол­жен обеспечиваться путем использования комбинации имени таблицы, значения первичного ключа и имени столбца.
  3. Систематическая трактовка значения NULL. В настоящей реляционной базе данных должна быть реализована полная поддержка значений NULL (которые отличаются от строки символов нулевой длины, строки пробель­ных символов, а также от нуля или любого другого числа), которые ис­пользуются для представления отсутствующей и неприменимой информа­ции систематическим образом независимо от типа этих данных.
  4. Правило динамического каталога, основанного на реляционной модели. Опи­сание базы данных на логическом уровне должно быть представлено в том же виде, что и обычные данные, чтобы пользователи, обладающие соответ­ствующими правами, могли работать с ним с помощью того же реляцион­ного языка, который они применяют для работы с основными данными.
  5. Правило исчерпывающего подъязыка данных. Реляционная система может поддерживать несколько языков и режимов взаимодействия с пользовате­лем. Однако должен существовать по крайней мере один язык, инструкции которого можно представить в виде строк символов в соответствии с неко­торым точно определенным синтаксисом и который в полной мере под­держивает все следующие элементы:
    • определение данных;
    • определение представлений;
    • обработку данных (интерактивную и программную);
    • ограничения целостности данных;
    • авторизацию;
    • границы транзакций (начало, фиксацию и откат).
  6. Правило обновления представлений. Все представления, которые теоретиче­ски можно обновить, должны быть доступны для обновления системой.
  7. Правило высокоуровневого добавления, обновления и удаления. Операции вставки, обновления и удаления должны применяться к отношению в целом.
  8. Правило физической независимости данных. Прикладные программы и ути­литы для работы с данными на логическом уровне должны оставаться не­изменными при любых изменениях способов хранения данных или мето­дов доступа к ним.
  9. Правило логической независимости данных. Прикладные программы и ути­литы для работы с данными должны на логическом уровне оставаться не­тронутыми при внесении в базовые таблицы любых изменений, которые теоретически позволяют сохранить нетронутыми содержащиеся в этих таблицах данные.
  10. Правило независимости контроля целостности. Должна существовать воз­можность определять условия целостности, специфичные для конкретной реляционной базы данных, на подъязыке этой базы данных и хранить их в каталоге, а не в прикладной программе.
  11. Правило независимости распространения. Реляционная база данных должна быть переносима не только в пределах системы, но и по сети.
  12. Правило согласования языковых уровней. Если в реляционной системе есть низкоуровневый язык (обрабатывающий одну запись за один раз), то он не должен иметь возможность обходить правила и условия целостности дан­ных, выраженные на реляционном языке высокого уровня (обрабатываю­щем несколько записей за один раз).