Recette
#5: |
|
Février 2011 |
Vous êtes maintenant conscient qu'en SQL, la performance et l’efficience dépend essentiellement de la structure de la DBB:
Il est maintenant temps d'examiner ce point en détail. |
CREATE TABLE peoples
( |
Cette requête va créer une table très simple nommée peoples:
la définition de chaque colonne doit spécifier au minimum le type de donnée, comme TEXT ou INTEGER (entier)
note: les types de données supportés par
SQLite diffèrent des autres SGBD:
nous verrons cela plus en
détail.
CREATE TABLE peoples2
( |
Voici une version améliorée de la même table:
on a rajouté une colonne id, déclarée comme PRIMARY KEY AUTOINCREMENT
insérer une PRIMARY KEY a chaque table est toujours une bonne idée.
la clause AUTOINCREMENT stipule à SQLite de générer automatiquement une valeur unique pour chaque ligne.
on a ajouté une clause NOT NULL pour les colonnes first_name et last_name.
ceci définit une première sorte de contrainte:les valeurs NULL seront rejetées de cette colonne
en d'autres termes, first_name et last_name devront obligatoirement contenir une valeur explicite.
on a ajouté CONSTRAINT ... CHECK (...) pour les colonnes age et gender (genre).
ceci définit un deuxième type de contrainte: les valeurs ne satisfaisant pas le critère CHECK (...) seront rejetés.
la colonne age acceptera uniquement un age adulte raisonnable.
la colonne gender acceptera uniquement les valeurs 'M' or 'F'.
note: nous n'avons pas déclaré de clause NOT NULL, ainsi age = NULL et gender = NULL seront considérés comme des valeurs valides.
à propos des types de données supportés par SQLite
Rappel: chaque cellule (intersection ligne/colonne)
peut stocker un type de donnée arbitraire. |
ALTER TABLE
peoples2 |
Vous pouvez ajouter de nouvelles colonnes, même après la création de la table.
Ici encore, un choix propre à SQLite:
i.e. une fois la colonne créée, vous ne pouvez plus modifier sa configuration. |
ALTER TABLE
peoples2 |
Cependant, vous pouvez simplement copier une table.
DROP TABLE peoples; |
cette requête supprimera définitivement la table peoples.
CREATE INDEX
idx_peoples_phone |
création d'un INDEX
DROP INDEX idx_peoples_phone; |
suppression d'un INDEX
CREATE UNIQUE INDEX
idx_peoples_name |
un index peut supporter plusieurs colonnes.
la clause UNIQUE
rajoute une contrainte:
une fois qu'une valeur est
insérée, l'insertion de la même valeur échouera.
PRAGMA table_info(peoples_ok); |
cid |
name |
type |
notnull |
dflt_value |
pk |
0 |
id |
INTEGER |
1 |
NULL |
1 |
1 |
first_name |
TEXT |
1 |
NULL |
0 |
2 |
last_name |
TEXT |
1 |
NULL |
0 |
3 |
age |
INTEGER |
0 |
NULL |
0 |
4 |
gender |
TEXT |
0 |
NULL |
0 |
5 |
phone |
TEXT |
0 |
NULL |
0 |
6 |
cell_phone |
TEXT |
0 |
NULL |
0 |
Vous pouvez utiliser PRAGMA table_info(...) afin de lister les colonnes d'une table.
PRAGMA index_list(peoples_ok); |
seq |
name |
unique |
0 |
idx_peoples_phone |
0 |
1 |
idx_peoples_name |
1 |
PRAGMA index_info(idx_peoples_name); |
seqno |
cid |
name |
0 |
2 |
last_name |
1 |
1 |
first_name |
utiliser PRAGMA index_list(...) et PRAGMA index_info(...) permet de lister les informations sur les index.
|
Author: Alessandro Furieri a.furieri@lqt.it |
This work is licensed under the Attribution-ShareAlike 3.0 Unported (CC BY-SA 3.0) license. |
|
|
|
Permission is granted to copy, distribute and/or modify this
document under the terms of the |