Хочу представить вам цитату из книги Гроффа Джеймса Р. — SQL. Полное руководство — 2015г. Мне она показалась интересной, поэтому я решил её выделить в отдельную запись.
Когда в средине 1980-х годов реляционная модель стала очень популярной, почти все производители СУБД стали добавлять слово «реляционный» в описание своих продуктов. Но ряд из них был не более чем тонким слоем SQL-подобного языка на поверхности сетевой или иерархической базы данных. Некоторые реализовывали только рудиментарную табличную структуру, даже не пытаясь реализовать язык запросов. Вскоре вопрос так что же такое настоящая реляционная база данных стал подниматься все чаще и чаще, а производители СУБД стали утверждать, что их продукты «реляционнее», чем продукты их конкурентов. В 1985 году Тед Ком (чья статья 15-летней давности определила реляционную модель данных) задался этим вопросом и ответил на него в журнале Computerworld (ls Your DBMS Really Relational? (Действительно ли ваша СУБД реляционная?, 14.10.1985) и Does Your DBMS Run Вy the Rules ? (Работает ли ваша СУБД по правилам?, 21 .10.1985)). Здесь он изложил двенадцать правил, которым должна соответствовать настоящая реляционная база данных.
- Правило представления информации. Вся информация в реляционной базе данных должна быть представлена исключительно на логическом уровне и только одним способом — в виде значений, содержащихся в таблицах.
- Правило гарантированного доступа. Логический доступ ко всем и каждому элементу данных (атомарному значению) в реляционной базе данных должен обеспечиваться путем использования комбинации имени таблицы, значения первичного ключа и имени столбца.
- Систематическая трактовка значения NULL. В настоящей реляционной базе данных должна быть реализована полная поддержка значений NULL (которые отличаются от строки символов нулевой длины, строки пробельных символов, а также от нуля или любого другого числа), которые используются для представления отсутствующей и неприменимой информации систематическим образом независимо от типа этих данных.
- Правило динамического каталога, основанного на реляционной модели. Описание базы данных на логическом уровне должно быть представлено в том же виде, что и обычные данные, чтобы пользователи, обладающие соответствующими правами, могли работать с ним с помощью того же реляционного языка, который они применяют для работы с основными данными.
- Правило исчерпывающего подъязыка данных. Реляционная система может поддерживать несколько языков и режимов взаимодействия с пользователем. Однако должен существовать по крайней мере один язык, инструкции которого можно представить в виде строк символов в соответствии с некоторым точно определенным синтаксисом и который в полной мере поддерживает все следующие элементы:
• определение данных;
• определение представлений;
• обработку данных (интерактивную и программную);
• ограничения целостности данных;
• авторизацию;
• границы транзакций (начало, фиксацию и откат). - Правило обновления представлений. Все представления, которые теоретически можно обновить, должны быть доступны для обновления системой.
- Правило высокоуровневого добавления, обновления и удаления. Операции вставки, обновления и удаления должны применяться к отношению в целом.
- Правило физической независимости данных. Прикладные программы и утилиты для работы с данными на логическом уровне должны оставаться неизменными при любых изменениях способов хранения данных или методов доступа к ним.
- Правило логической независимости данных. Прикладные программы и утилиты для работы с данными должны на логическом уровне оставаться нетронутыми при внесении в базовые таблицы любых изменений, которые теоретически позволяют сохранить нетронутыми содержащиеся в этих таблицах данные.
- Правило независимости контроля целостности. Должна существовать возможность определять условия целостности, специфичные для конкретной реляционной базы данных, на подъязыке этой базы данных и хранить их в каталоге, а не в прикладной программе.
- Правило независимости распространения. Реляционная база данных должна быть переносима не только в пределах системы, но и по сети.
- Правило согласования языковых уровней. Если в реляционной системе есть низкоуровневый язык (обрабатывающий одну запись за один раз), то он не должен иметь возможность обходить правила и условия целостности данных, выраженные на реляционном языке высокого уровня (обрабатывающем несколько записей за один раз).