# 12 règles de Codd

Les 12 règles de Codd sont un ensemble de règles édictées par Edgar F. Codd, conçues pour définir ce qui est exigé d'un système de gestion de base de données (SGBD) afin qu'il puisse être considéré comme relationnel (SGBDR)$^,$.

## Les règles
### Règle 1

    Unicité :
    Toute l'information dans la base de données est représentée d'une et une seule manière, à savoir par des valeurs dans des colonnes de tables.

### Règle 2

    Garantie d'accès :
    Toutes les données doivent être accessibles sans ambiguïté. Cette règle est essentiellement un ajustement de la condition fondamentale pour des clefs primaires. Elle indique que chaque valeur scalaire individuelle dans la base de données doit être logiquement accessible en indiquant le nom de la table contenante, le nom de la colonne contenante et la valeur principale primaire de la rangée contenante.

### Règle 3

    Traitement des valeurs nulles :
    Le système de gestion de bases de données doit permettre à chaque attribut de demeurer nul. Spécifiquement, il doit soutenir une représentation "d'information manquante et d'information inapplicable" qui est systématique, distincte de toutes les valeurs régulières (par exemple, "distincte de zéro ou tous autres nombres", dans le cas des valeurs numériques), et ce indépendamment du type de données. Cela implique également que de telles représentations doivent être gérées par le système de gestion de bases de données d'une manière systématique.

### Règle 4

    Catalogue lui-même relationnel :
    Le système doit supporter un catalogue en ligne, intégré, relationnel, accessible aux utilisateurs autorisés au moyen de leur langage d'interrogation régulier. Les utilisateurs doivent donc pouvoir accéder à la structure de la base de données (catalogue) employant le même langage d'interrogation qu'ils emploient pour accéder aux données de la base de données.

### Règle 5

    Sous-langage de données :
    Le système doit soutenir au moins un langage relationnel qui :
      * a une syntaxe linéaire
      * peut être employé interactivement et dans des programmes d'application,
      * supporte des opérations de définition d'informations supplémentaires (incluant des définitions de vues), de manipulation de données (mise à jour aussi bien que la récupération), de contraintes de sécurité et d'intégrité, et des opérations de gestion de transaction (commencer, valider et annuler une transaction).

### Règle 6

    Mise à jour des vues :
    Toutes les vues pouvant théoriquement être mises à jour doivent pouvoir l'être par le système.

### Règle 7

    Insertion, mise à jour, et effacement de haut niveau :
    Le système doit supporter les opérations par lot d'insertion, de mise à jour et de suppression. Ceci signifie que des données peuvent être extraites d'une base de données relationnelle dans des ensembles constitués par des données issues de plusieurs tuples et/ou de multiples table. Cette règle explique que l'insertion, la mise à jour, et les opérations d'effacement devraient être supportées aussi bien pour des lots de tuples issues de plusieurs tables que juste pour un tuple unique issu d'une table unique.

### Règle 8

    Indépendance physique :
    Les modifications au niveau physique (comment les données sont stockées, si dans les rangées ou les listes liées, etc.) ne nécessitent pas un changement d'une application basée sur les structures.

### Règle 9

    Indépendance logique :
    Les changements au niveau logique (tables, colonnes, rangées, etc) ne doivent pas exiger un changement dans l'application basée sur les structures. L'indépendance de données logiques est plus difficile à atteindre que l'indépendance de donnée physique.

### Règle 10

    Indépendance d'intégrité :
    Des contraintes d'intégrité doivent être indiquées séparément des programmes d'application et être stockées dans le catalogue. Il doit être possible de changer de telles contraintes au fur et à mesure sans affecter inutilement les applications existantes.

### Règle 11

    Indépendance de distribution :
    La distribution des parties de la base de données à diverses localisations doit être invisible aux utilisateurs de la base de données. Les applications existantes doivent continuer à fonctionner avec succès :
      * quand une version distribuée du système de gestion de bases de données est d'abord présentée ; et
      * quand des données existantes sont redistribués dans le système.

### Règle 12

    Règle de non-subversion :
    Si le système fournit une interface de bas niveau, cette interface ne doit pas permettre de contourner le système (par exemple une contrainte relationnelle de sécurité ou d'intégrité).
On considère parfois une règle 0, qui stipule que l'intégralité des fonctions du SGBDR doit être accessible par le modèle relationnel. Codd formula six autres règles en 1990.