12 правил Кодда (Codd’s 12 rules) — 12 правил (на самом деле их 13), которым должна удовлетворять каждая система управления реляционными базами данных.
Правило информации. Вся информация в базе данных должна быть представлена исключительно на логическом уровне и только одним способом – в виде значений, содержащихся в таблицах.
Правило гарантированного доступа. Логический доступ ко всем и каждому элементу данных (атомарному значению) в реляционной базе данных должна обеспечиваться путем использования комбинации имени таблицы, первичного ключа и имени столбца. Правило 2 указывает на роль первичного ключа при поиске информации в базе данных.Имя таблицы позволяет найти требуемую таблицу, имя столбца позволяет найти требуемый столбец, а первичный ключ позволяет найти строку, содержащую искомый элемент данных.
Правило поддержки недействительных значений. В настоящей реляционной базе данных должна быть реализована поддержка недействительных(отсутствующих) значений (NULL), которые отличаются от строки символов нулевой длины, строки пробельных символов и от нуля или любого другого числа т.е. для числовых данных неизвестные значения не должны рассматриваться как нули, а для символьных данных — как пустые строки.
Правило динамического каталога. Правило 4 гласит, что реляционная база данных должна сама себя описывать. Другими словами, база данных должна содержать набор системных таблиц(словарь данных), описывающих структуру самой базы данных.
Правило исчерпывающего подъязыка данных. СУБД должна поддерживать хотя бы один реляционный язык, который имеет линейный синтаксис,может использоваться как интерактивно, так и в прикладных программах, поддерживает операции определения данных, определения представлений, манипулирования данными (интерактивные и программные), ограничители целостности, управления доступом и операции управления транзакциями (begin, commit и rollback).
Возможность модификации представлений (View Updating Rule). Правило 6 касается представлений, которые являются виртуальными таблицами, позволяюцими показывать различным пользователям различные фрагменты структуры базы данных.
Правило добавления, обновления и удаления. Возможность работать с отношением как с одним операндом должна существовать не только при чтении данных, но и при добавлении, обновлении и удалении данных. Правило 7 акцентирует внимание на том, что базы данных по своей природе ориентированы на множества. Оно требует, чтобы операции вставки, модификации и удаления данных поддерживались не только по отношению к одной строке реляционной таблицы, но по отношению к любому множеству строк.
Физическая независимость данных (Physical Data Independence). Приложения не должны зависеть от используемых способов хранения данных на носителях, от аппаратного обеспечения компьютеров, на которых находится реляционная база данных.
Логическая независимость данных (Logical Data Independence). Прикладные программы и утилиты для работы с данными должны на логическом уровне оставаться нетронутыми при внесении в базовые таблицы любых изменений, которые теоретически позволяют сохранить нетронутыми содержащиеся в этих таблицах данные. <note>Правила 8 и 9 означают отделение пользователя и прикладной программы от низкоуровневой реализации базы данных.</note>
Независимость контроля целостности (Integrity Independence). Вся информация, необходимая для поддержания целостности, должна находиться в словаре данных т.е. храниться в каталоге, а не в прикладной программе. Язык для работы с данными должен выполнять проверку входных данных и автоматически поддерживать целостность данных.
Дистрибутивная независимость (Distribution Independence). Реляционная СУБД не должна зависеть от потребностей конкретного клиента. Правило 11 гласит, что язык базы данных должен обеспечивать возможность работы с распределенными данными, расположенными на других компьютерных системах. Перенос базы данных на другой компьютер не должен оказывать влияния на приложения.
Согласование языковых уровней (The Nonsubversion Rule). Если в реляционной системе есть низкоуровневой язык (обрабатывающий одну запись за один раз), то должна отсутствовать возможность использования его для того, чтобы обойти правила и условия целостности, выраженные на реляционном языке высокого уровня (обрабатывающем несколько записей за один раз). Правило 12 предотвращает использование других возможностей для работы с базой данных помимо языка базы данных, поскольку это может нарушить ее целостность.