Bonsoir,
Envoyé par
escartefigue
Concernant la parenté, la cardinalité 2,2 coté parent vous posera problème en cas d'orphelin (1 ou 2 parents inconnus)
Une alternative : créer 2 associations, une pour le père (0,1) une pour la mère (0,1)
Exact. Une personne peut être née de parents inconnus. Par ailleurs, si une personne a au moins deux parents, on sera obligé de remonter dans le temps, voire très loin... On va arriver à Adam, mais nom d’une pipe ! qui sont ses parents ?
Envoyé par
escartefigue
Concernant le décès, vous pouvez directement inclure la date et le motif de décès au niveau de la personne.
C’est laisser le bonhomme Null s’introduire dans la maison : la mise en oeuvre d’une entité-type DECES est préférable.
Envoyé par
win_ubuntu
J'aimerais ajouter les contraintes suivantes:
1.Les deux personnes participantes à une mariage donnée doivent être de sexe différent.
2.même chose pour la relation parenté: un doit être mère (sexe féminin) et l'autre père doit être masculin.
Il faut donc faire le distinguo entre les hommes et les femmes, c'est-à-dire utiliser la spécialisation pour l’entité-type PERSONNE, avec contrainte d’exclusion (et de totalité : pas de sexe neutre ou autre fantaisie...)
Dans ces conditions, les époux sont forcément de sexe opposé :
La date participe à l’association MARIAGE. En effet, on part de l’hypothèse qu’une personne ne peut pas se marier deux fois le même jour. Les flèches colorées symbolisent chacune une CIF (contrainte d’intégrité fonctionnelle) :
La flèche bleue symbolise la CIF selon laquelle à une date donnée, un homme ne peut épouser qu’une seule femme (HOMME X DATE -> FEMME), tandis que (symétrie oblige...) la flèche rouge symbolise la CIF selon laquelle à une date donnée, une femme ne peut épouser qu’un seul homme (FEMME X DATE -> HOMME).
Il faudra aussi veiller (ça n’est pas pris en compte ci-dessus) à ce que quelqu’un ne se marie pas alors qu’il est déjà marié et que son conjoint est toujours vivant, ou qu’il n’y a pas eu de divorce de prononcé.
Ci-dessous, l’entité-type A_POUR_PERE signifie qu’une personne peut avoir au plus un père et qu’elle peut ne pas en avoir (association A_P_PERE). Un homme peut avoir plusieurs enfants, notamment hors mariage (association A_P_HOMME).
L’entité-type A_POUR_MERE signifie qu’une personne peut avoir au plus une mère et qu’elle peut ne pas en avoir (association A_P_MERE). Une femme peut avoir plusieurs enfants, notamment hors mariage (association A_P_FEMME).
La mise entre parenthèses des cardinalités 1,1 symbolise l’utilisation de l’identification relative (convention PowerAMC, reprise du reste par JMerise).
Version DB-MAIN :
Script SQL
CREATE TABLE PERSONNE
(
personne_id INT NOT NULL,
personne_nom VARCHAR(32) NOT NULL,
personne_prenom VARCHAR(32) NOT NULL,
personne_date_naissance DATE NOT NULL,
personne_lieu_naissance VARCHAR(32) NOT NULL,
CONSTRAINT PERSONNE_PK PRIMARY KEY (personne_id)
) ;
CREATE TABLE HOMME
(
personne_id INT NOT NULL,
CONSTRAINT HOMME_PK PRIMARY KEY (personne_id),
CONSTRAINT HOMME_PERSONNE_FK FOREIGN KEY (personne_id)
REFERENCES PERSONNE (personne_id) ON DELETE CASCADE
) ;
CREATE TABLE FEMME (
personne_id INT NOT NULL,
CONSTRAINT FEMME_PK PRIMARY KEY (personne_id),
CONSTRAINT FEMME_PERSONNE_FK FOREIGN KEY (personne_id)
REFERENCES PERSONNE (personne_id) ON DELETE CASCADE
) ;
CREATE TABLE A_POUR_PERE
(
personne_id INT NOT NULL,
papa_id INT NOT NULL,
CONSTRAINT A_POUR_PERE_PK PRIMARY KEY (personne_id),
CONSTRAINT A_POUR_PERE_PERSONNE_FK FOREIGN KEY (personne_id)
REFERENCES PERSONNE (personne_id) ON DELETE CASCADE,
CONSTRAINT A_POUR_PERE_HOMME_FK FOREIGN KEY (papa_id)
REFERENCES HOMME (personne_id)
) ;
CREATE TABLE A_POUR_MERE
(
personne_id INT NOT NULL,
maman_id INT NOT NULL,
CONSTRAINT A_POUR_MERE_PK PRIMARY KEY (personne_id),
CONSTRAINT A_POUR_MERE_PERSONNE_FK FOREIGN KEY (personne_id)
REFERENCES PERSONNE (personne_id) ON DELETE CASCADE,
CONSTRAINT A_POUR_MERE_FEMME_FK FOREIGN KEY (maman_id)
REFERENCES FEMME (personne_id)
) ;
CREATE TABLE MARIAGE
(
epoux_id INT NOT NULL,
epouse_id INT NOT NULL,
mariage_date DATE NOT NULL,
mariage_lieu VARCHAR(32) NOT NULL,
CONSTRAINT MARIAGE_PK PRIMARY KEY (epoux_id, mariage_date),
CONSTRAINT MARIAGE_AK UNIQUE (epouse_id, mariage_date),
CONSTRAINT MARIAGE_HOMME_FK FOREIGN KEY (epoux_id)
REFERENCES HOMME (personne_id),
CONSTRAINT MARIAGE_FEMME_FK FOREIGN KEY (epouse_id)
REFERENCES FEMME (personne_id)
);
CREATE TABLE DECES
(
personne_id INT NOT NULL,
deces_date DATE NOT NULL,
deces_cause VARCHAR(32) NOT NULL,
CONSTRAINT DECES_PK PRIMARY KEY (personne_id),
CONSTRAINT DECES_PERSONNE_FK FOREIGN KEY (personne_id)
REFERENCES PERSONNE (personne_id)
);
La contrainte d’exclusion homme/femme n’est pas prise en compte dans le script SQL : elles devra faire l’objet d’une assertion (instruction CREATE ASSERTION) ou de triggers si le SGBD ne permet pas de coder une assertion.
_______________________________________________________
Partager