Codd's 12 rules
Codd's 12 rules are
a set of thirteen rules (numbered zero to twelve) proposed by Edgar F.
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.
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.
Rule 0: The system must qualify as relational, as a database, and as a management system.
For a system to qualify as a relational database management system (RDBMS), that system must use its relational facilities (exclusively) to manage the database.
Rule 1: The information rule:
information in the database is to be represented in one and only one
way, namely by values in column positions within rows of tables.
Rule 2: The guaranteed access rule:
data must be accessible with no ambiguity. 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.
Rule 3: Systematic treatment of null values:
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
Rule 4: Active online catalog based on the relational model:
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.
Rule 5: The comprehensive data sublanguage rule:
The system must support at least one relational language that
- Has a linear syntax
- Can be used both interactively and within application programs,
data definition operations (including view definitions), data
manipulation operations (update as well as retrieval), security and
integrity constraints, and transaction management operations (begin,
commit, and rollback).
Rule 6: The view updating rule:
All views that are theoretically updatable must be updatable by the system.
Rule 7: High-level insert, update, and delete:
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.
Rule 8: Physical data independence:
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
Rule 9: Logical data independence:
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
Rule 10: Integrity independence:
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
Rule 11: Distribution independence:
distribution of portions of the database to various locations should be
invisible to users of the database. Existing applications should
continue to operate successfully :
- when a distributed version of the DBMS is first introduced; and
- when existing distributed data are redistributed around the system.
Rule 12: The nonsubversion rule:
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.