Contraintes d'integrite SQL

Fermé
kml1191 Messages postés 53 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 23 octobre 2009 - 6 mars 2008 à 14:32
 hasna - 11 déc. 2013 à 19:47
Bonjour,

quand on a une question de ce genre

"Préciser les contraintes d’intégrité"

que faut-il donner ?

est ce qu'il faut se contenter de citer les clés primaire et etrangeres seulement ou il faut citer aussi les attributs qui sont caracterisés par :

NULL , NOT NULL, CHECK...etc
A voir également:

3 réponses

kml1191 Messages postés 53 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 23 octobre 2009 3
6 mars 2008 à 15:36
merci pour ta reponse

sinon j'ai une autre question

quand on a une question du genre :

Créer la requête SQL qui liste les chambres disponibles entre deux dates données (=jours consécutifs) classées par hôtel.

je voi pas comment faires cette requete et ce qui me pose probleme c'est le fait de vouloir avoir des infos entre deux dates données

les dates ne sont pas defini

comment fait on dans ce cas ?
2
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
6 mars 2008 à 14:38
Par contrainte d'intégrité généralement on signifie les liens entre les différentes entités d'un modèle relationnel. Donc dans ton cas, oui, les clés étrangères.
Mais tu peux aussi y ajouter certaines informations (si nécessaire, cas particulier) comme la valeur d'un champ (NULL ou non), je dis bien si nécessaire car je ne crois pas que ça rentre dans les contraintes d'intégrités.

A voir aussi, les cardinalités, qui découlent des dépendances entre les entités. Mais il faut tout de même les noter, puisque ce n'est pas parce que tu as une clé étrangère dans une table que tu sais si cette entité peut avoir un ou plusieurs lien avec l'autre entité.
1
kij_82 Messages postés 4088 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
6 mars 2008 à 15:41
Pour te répondre correctement il faudrait que j'ai sous les yeux ton modèle de données (sous forme de schéma de préférence)
1
kml1191 Messages postés 53 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 23 octobre 2009 3
6 mars 2008 à 18:11
j'ai créé les table concernant la gestion d'hotel, les voici :

CREATE TABLE HOTEL (code_etablissement int PRIMARY KEY,
adresse varchar(200) NOT NULL,
code_postal int(5) NOT NULL,
CHECK(code_postal>0) );


CREATE TABLE CHAMBRE (id_chambre int PRIMARY KEY,
num_chambre int(3) NOT NULL,
statut_chambre varchar(20) NOT NULL,
etage int(3) NOT NULL,
code_etablissement int REFERENCES HOTEL(code_etablissement),
id_reservation int REFERENCES RESERVATION(id_reservation),
id_categorie int REFERENCES CATEGORIE(id_categorie));


CREATE TABLE RESERVATION (id_reservation int PRIMARY KEY,
nb_nuit int NOT NULL,
nb_chambre int NOT NULL,
mode_reservation varchar(20) NOT NULL,
id_date int REFERENCES DATE(id_date),
id_facture int REFERENCES FACTURE(id_facture));

CREATE TABLE DATE (id_date int PRIMARY KEY,
date_debut date NOT NULL,
date_fin date NOT NULL,
check(date_debut<date_fin));

CREATE TABLE CATEGORIE (id_categorie int PRIMARY KEY,
nom_categorie varchar(30) NOT NULL);

CREATE TABLE FAIT VARIER (tarif int NOT NULL,
id_categorie int REFERENCES CATEGORIE(id_categorie),
id_saison int REFERENCES SAISON(id_saison),
PRIMARY KEY(id_categorie,id_saison));

CREATE TABLE SAISON (id_saison int PRIMARY KEY,
nom_saison varchar(30) NOT NULL,
id_date int REFERENCES DATE(id_date));

CREATE TABLE CLIENT (id_client int PRIMARY KEY,
nom varchar(30) NOT NULL,
prenom varchar(30) NOT NULL,
adresse varchar(200) NOT NULL,
code_postal int(5) NOT NULL,
mail varchar(50) NOT NULL,
login varchar,
mot_de_passe varchar,
telephone int(10) NOT NULL,
check(mail like '%@%'));

CREATE TABLE FACTURE (id_facture int PRIMARY KEY,
date_facture date,
id_client int REFERENCES CLIENT(id_client),
id_reglement int REFERENCES REGLEMENT(id_reglement));

CREATE TABLE PRESTATION (id_prestation int PRIMARY KEY,
libelle varchar(30) NOT NULL,
quantite int NOT NULL,
cout_prestation int NOT NULL,
id_facture int REFERENCES FACTURE(id_facture));

CREATE TABLE REGLEMENT (id_reglement int PRIMARY KEY,
mode_regelement varchar(30),
montant int NOT NULL);

est ce que c'est le contenu est correct ou il faut modifier des choses ?

sinon la requete concernant la question precedente j'ai essayé de la faire mais elle me parrait bizar
voici la requete

SELECT code_etablissement, id_chambre, num_chambre, etage
FROM chambre, reservation, date, hotel
WHERE hotel.code_etablissement=chambre.code_etablissement
AND chambre.id_reservation=reservation.id_reservation
AND reservation.id_date=date.id_date
AND statut_chambre='libre'
AND date.id_date BETWEEN id_date AND id_date+1

est ce que c'est correct ?
surtt cette ligne

AND date.id_date BETWEEN id_date AND id_date+1
0
SVP vous peuvez me donner un contraint qui affecte à un champs date par date system (syntaxe pour oracle sql)
0