# Table (base de données)

Dans les bases de données relationnelles, une table est un ensemble de données organisées sous forme d'un tableau où les colonnes correspondent à des catégories d'information (une colonne peut stocker des numéros de téléphone, une autre des noms...) et les lignes à des enregistrements, également appelés entrées.
Chaque table est l'implémentation physique d'une relation entre les différentes colonnes. Chaque correspondance est définie par une ligne de la table.
La notion de table est apparue dans les années 1970 chez IBM avec l'algèbre relationnelle qui est une théorie mathématique en relation avec la théorie des ensembles. Cette théorie a pour but d'éclaircir et de faciliter l'utilisation d'une base de données.

## Mise en œuvre
### Conception d'une Table

Lors de la conception d'une Base de données relationnelle, il est important de clairement définir toutes les tables qui la composeront et les différentes associations qui les lient, de manière à pouvoir dresser le schéma conceptuel qui permettra de décrire l'organisation des données dans la base de données avant de la mettre informatiquement en place.
On distinguera les tables courantes qui caractérisent des entités (Tables "Personne", "Projet", "Commande", "Facture"...) contenant des informations, et les tables associatives qui assureront la liaison entre au moins deux tables courantes.
Il est également indispensable de nommer rigoureusement les différentes tables, en utilisant des normes techniques. Par exemple, cela permet d'éviter les incohérences dans la base et permet son évolutivité.
On peut par exemple se fixer comme norme :
* Nom de table toujours au singulier
* Pour les tables de liaison commencer par "l_" suivi des 2 tables liées en les reliant par un tiret bas, et en les classant par ordre alphabétique.
Cela donnera par exemple pour une table personne et une table voiture, on définit la table de liaison I_personne_voiture.

### Contenu d'une Table

Par nature, chaque colonne d'une table, également appelée "champ", doit contenir des données d'un même type et porter un nom, de préférence significatif par rapport aux données contenues dans la colonne. Il y a certaines règles à respecter notamment le fait qu'il faille mettre un identifiant pour chaque enregistrement dans la table.
Pour les différentes colonnes de la table, il faut également respecter des normes pour les noms, par exemple, imposer le nom des colonnes au singulier.
Il y a deux possibilités :
* Mettre un identifiant qui s'auto-incrémente au fur et à mesure des données entrées.
* Choisir un identifiant qui soit unique (par exemple: plaque d'immatriculation pour une base de données de voitures)
Cela permet donc d'avoir une table bien indexée, et cela facilite alors parfaitement les recherches.
Chaque ligne est appelée un "enregistrement", et chaque intersection de champ et d'enregistrement forme une cellule que l'on appelle une "entrée". Un ensemble d'entrée forme une "table" (ou "base").
Il est impropre d'utiliser les termes "colonne" et "ligne" comme on le ferait dans un tableur, car la nature d'une base de données fait qu'elle peut être lue dans plusieurs sens différents (Microsoft Access est un très bon exemple de cela : lors de la création d'une base, les enregistrements sont en abscisses tandis que les champs sont en ordonnées).

### Travail sur une Table

Il y a deux niveaux de travail sur une table :
* un niveau de définition des données d'une table : qui permet de définir, lier, et contraindre les données via un langage de définition de données
* un niveau de manipulation des données d'une table : qui permet d'ajouter, supprimer, rechercher des données via un langage de manipulation de données
Actuellement, le langage standardisé pour travailler sur les tables est le SQL, il est utilisé avec certaines variantes sur la plupart des systèmes de gestions de bases de données.

## Exemple de systèmes de gestion de bases de données utilisant des tables

* Access de Microsoft
* FileMaker Pro de FileMaker
* HSQLDB base relationnelle écrite en Java
* Informix de IBM
* DB2 de IBM
* Ingres
* Interbase de Borland
* Oracle de Oracle Corporation
* Pick
* SQL Server de Microsoft
* SQLite
* MySQL
* Paradox de Corel
* ASE de Sybase
* OpenOffice.org Base de OpenOffice
* MatrixEngine de SIC : www.Matrix-Engine.fr