Recette
#8: |
|
Février 2011 |
Comprendre les constraints (contraintes) du point
de vue conceptuel, est relativement simple.
|
Important: |
Commençons
CREATE
TABLE mothers ( SELECT
AddGeometryColumn('mothers', 'home_location', CREATE
TABLE children ( INSERT
INTO mothers (first_name, last_name, home_location) INSERT
INTO mothers (first_name, last_name, home_location) INSERT
INTO mothers (first_name, last_name, home_location) INSERT
INTO children INSERT
INTO children INSERT
INTO children INSERT
INTO children INSERT INTO
children |
Rien de très complexe: on a simplement créé deux tables:
la table mothers (mère) contient une colonne géométrique
il existe une relation entre mothers et children (enfants): de fait, nous avons déclaré une FOREIGN KEY (clé étrangère).
un dernier point: dans cette exemple, nous utilisons une
PRIMARY KEY sur
deux colonnes:
il n'y a rien d'anormal ici ... il s'agit d'une
requête SQL valide.
Enfin, nous avons insérés quelques données à cette table.
SELECT m.last_name AS
MomLastName, |
MomLastName |
MomFirstName |
HomeLongitude |
HomeLatitude |
ChildLastName |
ChildFirstName |
ChildGender |
Smith |
Stephanie |
0.8 |
52.1 |
Brown |
George |
M |
Smith |
Stephanie |
0.8 |
52.1 |
Brown |
Janet |
F |
Dupont |
Antoinette |
4.7 |
45.6 |
Petit |
Chantal |
F |
Dupont |
Antoinette |
4.7 |
45.6 |
Petit |
Henry |
M |
Rossi |
Maria |
11.2 |
43.2 |
Bianchi |
Luigi |
M |
Un coup d'oeil et nous sommes prêts a commencer.
QUESTIONS |
Q1: pourquoi cette requête
va elle échouer et aboutir à une exception constraint
failed ?
INSERT INTO
children |
Q2: ... même question
...
INSERT INTO
children |
Q3: ... même question
...
INSERT INTO
children |
Q4: ... même
question ...
INSERT INTO
children |
Q5: ... même
question ...
INSERT INTO mothers
(first_name, last_name, home_location) |
Q6: ... même
question ...
INSERT INTO mothers
(first_name, last_name, home_location) |
Q7: ... même
question ...
INSERT INTO mothers
(first_name, last_name) |
Q8: ... même
question ...
INSERT INTO mothers
(first_name, last_name, home_location) |
Q9: ... même
question ...
DELETE FROM
mothers |
Q10: ... même
question ...
UPDATE mothers SET
first_name = 'Marianne' |
Réponses |
A1: gender
non défini:
une valeur NULL est
alors implicitement envoyée.
mais une contrainte NOT
NULL a été définie pour cette colonne.
A2: la
valeur ('f') n'est
pas une valeur valide: SQLite est sensible à la casse
(case-sensitive) pour les donnée de type textes.
La
contrainte sex
restreint le choix des valeurs à 'M'
et 'F' : 'f'
n'est pas accepté.
A3: FOREIGN KEY
manquante.
Pas d'entrées correspondantes {'Rossi','Giovanna'}
dans la table mothers.
A4: PRIMARY KEY manquante.
l'entrée
{'Petit','Henry'}
est déjà présente dans la table children.
A5: SRID non
défini: la valeur -1
est alors implicitement envoyée.
mais la contrainte Géométrique
définie pour cette colonne n'autorise que le SRID 4326.
A6: Mauvais type géométrique: seuls les POINT
seront autorisés pour la colonne home_location.
A7: home_location
non défini: une valeur NULL
est envoyée.
mais une contrainte NOT
NULL a été définie pour cette colonne.
A8:
expression WKT non valide: ST_GeomFromText()
retournera NULL.
A9: FOREIGN KEY manquante: oui, la table mothers
n'a pas de FOREIGN KEY.
en revanche la table children
pen possède une.
Supprimer une entrée dans la table mothers
va casser l'intégrité référentielle, donc cette opération
n'est pas autorisée.
A10: FOREIGN KEY manquante: plus
ou moins la même chose que précédemment.
Modifier une donnée
de type PRIMARY KEY dans la table mothers
va casser l'intégrité référentielle, donc cette opération
n'est pas autorisée.
Leçon #1: |
|
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 |