SQL requetes

hobow Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
SamFish Messages postés 21 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

Voilà je suis nouveau sur le forum et j'apprends actuellement la créations de tables et les requêtes SQL. Je viens vers vous afin de savoir si c'est celles-ci sont correctes et pouvoir progresser. Je m'excuse par avance de mes erreurs.... :oups:

Voici mon schéma (BDD d'un zoo)

ANIMAL (id_a ,nom_a, datenaiss_a, id_m, id_endroit, race_fam, ori_fam)
ENFANT (id_enf, nom_enf,datenaiss_enf, id_a_pere,id_a_mere)
FAMILLE(race_fam,ori_fam)
ENDROIT (id_e, type_e, superf_e,nbmaxoccupant_e)
MENU (id_menu,quteviande_menu,qutelegume_menu)

Voici ma table animal qui je pense est fausse car je n'ai pas intégré les clés étrangères id_e,race_fam et origine_fam mais je ne sais pas où mentionner ""FOREIGN KEY" "

CREATE TABLE ANIMAL
( id_a CHAR(6) NOT NULL PRIMARY KEY
, nom_a VARCHAR(20) NOT NULL
, datenaiss_a DATE(10) NOT NULL
, id_menu CHAR(6) NOT NULL REFERENCES MENU (ID_MENU)
, id_endroit CHAR(6) NOT NULL REFERENCES ENDROIT(ID_ENDROIT)
, race_fam VARCHAR 20) NOT NULL
, race_fam VARCHAR(30) NOT NULL REFERENCES FAMILLE(RACE_FAM)
, ori_fam VARCHAR(30) NOT NULL REFERENCES FAMILLE(ORI_FAM);)

Et voici mes requêtes :

1.Liste de tous les animaux qui sont parents et le nombre d'enfants qu'ils ont

SELECT nom_a
FROM ANIMAL
GROUP BY ENFANT

2.Liste des animaux dont les deux parents sont connus
SELECT id_a_pere,id_a_mere
FROM ENFANT

3.Moyenne de la qté de viande servie dans le menu des singes
SELECT AVG(quteviande_menu)
FROM MENU
WHERE FAMILLE='singe'

Je vous remercie par avance pour votre aide et vos corrections
Bonne journée
H.
A voir également:

3 réponses

SamFish Messages postés 21 Date d'inscription   Statut Membre Dernière intervention   8
 
Il faudrait optimiser le modèle et les tables.

ZOA_ANIMAL (
ZOA_ID_ANIMAL
ZOA_NOM_ANIMAL
ZOA_DESCRIPTION
ZOA_DATE_NAISS
ZOA_ID_MENU
ZOA_ID_ENDROIT
ZOA_ID_FAMILLE
ZOA_ID_PERE
ZOA_ID_MERE)


ZOP_PARENT (
ZOP_ID_PARENT
ZOP_ID_ENFANT
ZOP_DESCRIPTION)

ZOE_ENDROIT (
ZOE_ID_ENDROIT
ZOE_TYPE_ENDROIT
ZOE_DESCRIPTION
ZOE_SUPERFICIE
ZOE_MAX_OCC)

ZOM_MENU (
ZOM_ID_MENU,
ZOM_QTE_VIANDE
ZOM_QTE_LEGUME)

ZOF_FAMILLE (
ZOF_ID_FAMILLE
ZOF_RACE_FAMILLE
ZOF_ORIGINE)

Pour ce qui est des index, chaque ID de chaque table (sauf la table ENF_ENFANT) est
une pk.
Pour les FK, ce sont des contraintes qu'il faut ajouter aux tables.

Requêtes :

1. Liste de tous les animaux qui sont parents et le nombre d'enfants qu'ils ont :
SELECT ZOP_ID_PARENT, ZOP_ID_ENFANT, ZOP_DESCRIPTION FROM ZOP_PARENT GROUP BY ZOP_ID_PARENT, ZOP_DESCRIPTION;
// Comme cela, on a tous les parents avec leurs enfants et leur lien (description : PERE, MERE)

2. SELECT ZOP_ID_ENFANT, ZOP_ID_PARENT GROUP BY ZOP_ID_ENFANT HAVING COUNT (*) > 1;

3. SELECT AVG (ZOM_QTE_VIANDE)
FROM ZOM_MENU,
ZOF_FAMILLE,
ZOA_ANIMAL
WHERE ZOF_ID_FAMILLE = ZOA_ID_FAMILLE
AND ZOF_RACE_FAMILLE = 'SINGE'
AND ZOA_ID_MENU = ZOM_ID_MENU;

Pourquoi j'ai mis des ZO devant les tables, c'est simplement pour les associer à un système quelconque.
Dans votre cas, on parle de ZOO. alors j'ai mis ZO. De plus, le fait de mettre le préfixe de 3 lettres de la table
devant chaque colonne de celle-ci fait en sorte que si j'avais un SELECT A.DESCRIPTION FROM ANIMAL A
c'est moins évident à lire que SELECT ZOA_DESCRIPTION FROM ZOA_ANIMAL.
On voit immédiatement de quelle table ça provient.

C'est encore plus pratique quand on a 3 colonnes descriptions (imaginez a.description, b.description, c.description).
1
hobow Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
Bonsoir,

Merci beaucoup pour votre réponse, c'est vrai que c'est beaucoup plus clair ! :)

Cependant, je n'ai pas encore compris pour les clé étrangère (fk)... Est-ce que le script SQL de ma table est tout de même correct en terme de données ? Et en gardant ma table de base avec "enfant" à la place de "parent"

CREATE TABLE ANIMAL
( id CHAR(6) NOT NULL PRIMARY KEY
, nom VARCHAR(20) NOT NULL
, date_naiss DATE(10) NOT NULL
, menu CHAR(6) NOT NULL REFERENCES MENU (ID_MENU)
, zoa_id_endroit CHAR(6) NOT NULL REFERENCES ENDROIT(ID_ENDROIT)
, zoa_race_fam VARCHAR(30) NOT NULL REFERENCES FAMILLE(RACE_FAM)
, zoa_ori_fam VARCHAR(30) NOT NULL REFERENCES FAMILLE(ORI_FAM)
;)

Encore merci !
H.
0
SamFish Messages postés 21 Date d'inscription   Statut Membre Dernière intervention   8
 
C'est quel genre de BD ?

Oracle ?

Exemple :

ALTER TABLE
ALTER TABLE ZOA_ANIMAL ADD
CONSTRAINT ZOA_ANIMAL_f1 FOREIGN KEY (
ZOA_ID_ENDROIT )
REFERENCES ZOE_ENDROIT (
ZOE_ID_ENDROIT

Par contre, il faut que ZOE_ID_ENDROIT soit une PK.

Pour les autres, je n'ai malheureusement pas d'exemple.
0