Codd Rules
Codd Rules
Codd, a pioneer of the relational model for databases, designed to define what is required from a
database management system in order for it to be considered relational, i.e., an RDBMS.
Codd produced these rules as part of a personal campaign to prevent his vision of the relational
database being diluted, as database vendors scrambled in the early 1980s to repackage existing
products with a relational veneer. Rule 12 was particularly designed to counter such a
positioning. In fact, the rules are so strict that all popular so-called "relational" DBMSs fail on
many of the criteria.
The rules
Rule 0: The system must qualify as relational, as a database, and as a management system.
All information in the database is to be represented in one and only one way, namely by
values in column positions within rows of tables.
All data must be accessible. This rule is essentially a restatement of the fundamental
requirement for primary keys. It says that every individual scalar value in the database
must be logically addressable by specifying the name of the containing table, the name of
the containing column and the primary key value of the containing row.
The DBMS must allow each field to remain null (or empty). Specifically, it must support
a representation of "missing information and inapplicable information" that is systematic,
distinct from all regular values (for example, "distinct from zero or any other number", in
the case of numeric values), and independent of data type. It is also implied that such
representations must be manipulated by the DBMS in a systematic way.
The system must support an online, inline, relational catalog that is accessible to
authorized users by means of their regular query language. That is, users must be able to
access the database's structure (catalog) using the same query language that they use to
access the database's data.
All views that are theoretically updatable must be updatable by the system.
The system must support set-at-a-time insert, update, and delete operators. This means
that data can be retrieved from a relational database in sets constructed of data from
multiple rows and/or multiple tables. This rule states that insert, update, and delete
operations should be supported for any retrievable set rather than just for a single row in a
single table.
Changes to the physical level (how the data is stored, whether in arrays or linked lists
etc.) must not require a change to an application based on the structure.
Changes to the logical level (tables, columns, rows, and so on) must not require a change
to an application based on the structure. Logical data independence is more difficult to
achieve than physical data independence.
Integrity constraints must be specified separately from application programs and stored in
the catalog. It must be possible to change such constraints as and when appropriate
without unnecessarily affecting existing applications.
If the system provides a low-level (record-at-a-time) interface, then that interface cannot
be used to subvert the system, for example, bypassing a relational security or integrity
constraint.