create table article1 ( reference varchar(8) constraint pk_article1 primary key, type_article varchar(15), -- pour les articles qui ne sont pas des lots (stylos, ramettes,...) description varchar(80), pu decimal(10, 2), -- pour les stylos couleur varchar(15), -- pour les ramettes grammage integer, -- pour les lots ; type decimal(4,2) si nombre décimal pourcentage integer) -- Composition d'un lot -- Clé primaire possible : (ref_article, ref_lot) create table lot_article1 ( ref_article varchar(8) constraint fk_lot_article1_article references article1, ref_lot varchar(8) constraint fk_lot_article_lot references article1, nb int_article) create table facture1 ( numero integer constraint pk_facture1 primary key, nom_client varchar(80), date_facture date) create table ligne1 ( num_facture integer constraint fk_ligne1_facture1 references facture1 on delete cascade, ref_article varchar(8) constraint fk_ligne1_article1 references article1, quantite integer, constraint pk_ligne1 primary key(num_facture, ref_article))
create table stylo2 ( reference varchar(8) constraint pk_stylo2 primary key, description varchar(80), pu decimal(10, 2), couleur varchar(15)) create table ramette2 ( reference varchar(8) constraint pk_ramette2 primary key, description varchar(80), pu decimal(10, 2), grammage integer) create table lot2 ( reference varchar(8) constraint pk_lot2 primary key, pourcentage integer) -- Composition d'un lot -- Le problème principal de cette méthode de mapping : pas possible de traduire -- convenablement une référence vers une classe abstraite -- (ici une référence vers un article). -- Clé primaire possible : (ref_article, ref_lot) -- Il est envisageable d'ajouter une colonne donnant le type des articles qui composent le lot. create table lot_article2 ( -- pas possible de mettre une contrainte "foreign key" sur ref_article ! ref_article varchar(8), ref_lot varchar(8) constraint fk_lot_article2_lot2 references lot2, nb_article integer) create table facture2 ( numero integer constraint pk_facture2 primary key, client varchar(50), date_facture date) create table ligne2 ( num_facture integer constraint fk_ligne2_facture2 references facture2 on delete cascade, -- pas possible de mettre une contrainte "foreign key" sur ref_article ! ref_article varchar(8), quantite integer, constraint pk_ligne2 primary key(num_facture, ref_article))
Remarque : on peut aussi ajouter "type_article varchar(15)" à la table article3.
create table article3 ( reference varchar(8) constraint pk_article3 primary key) create table article_unitaire3 ( reference varchar(8) constraint pk_article_unitaire3 primary key constraint fk_article_unitaire3_article3 references article3, description varchar(80), pu decimal(10, 2)) create table stylo3 ( reference varchar(8) constraint pk_stylo3 primary key constraint fk_stylo3_article3 references article3, couleur varchar(15)) create table ramette3 ( reference varchar(8) constraint pk_ramette3 primary key constraint fk_ramette3_article3 references article3, grammage integer) create table lot3 ( reference varchar(8) constraint pk_lot3 primary key constraint fk_lot3_article3 references article3, pourcentage integer) -- Composition d'un lot create table lot_article3 ( ref_article varchar(8) constraint fk_lot_article3_article3 references article3, ref_lot varchar(8) constraint fk_lot_article3_lot3 references lot3, nb int_article, constraint pk_lot_article3 primary key(ref_article, ref_lot)) create table facture3 ( numero integer constraint pk_facture3 primary key, client varchar(50), date_facture date) create table ligne3 ( num_facture integer constraint fk_ligne3_facture3 references facture3 on delete cascade, ref_article varchar(8) constraint fk_ligne3_article3 references article3, quantite integer, constraint pk_ligne3 primary key(num_facture, ref_article))