/*============================================================================*/
/* DDL SCRIPT                                                                 */
/*============================================================================*/
/* Title:      */
/* Filename:   eBay.hf                                                        */
/* Platform:   Oracle 10g                                                     */
/* Version:    Concept                                                        */
/* Generated:  jeudi 22 novembre 2007                                         */
/*============================================================================*/
DROP TABLE Paypal CASCADE CONSTRAINTS
/

DROP TABLE VirementBancaire CASCADE CONSTRAINTS
/

DROP TABLE MoyensPaiement CASCADE CONSTRAINTS
/

DROP TABLE Pays CASCADE CONSTRAINTS
/

DROP TABLE Personne CASCADE CONSTRAINTS
/

DROP TABLE Acheteur CASCADE CONSTRAINTS
/

DROP TABLE Vendeur CASCADE CONSTRAINTS
/

DROP TABLE Avis CASCADE CONSTRAINTS
/

DROP TABLE CarteBancaire CASCADE CONSTRAINTS
/

DROP TABLE Categorie CASCADE CONSTRAINTS
/

DROP TABLE Produits CASCADE CONSTRAINTS
/

DROP TABLE Categorie_Produits CASCADE CONSTRAINTS
/

DROP TABLE Encherir CASCADE CONSTRAINTS
/

DROP TABLE ReponseCommentaire CASCADE CONSTRAINTS
/

DROP TABLE Restriction CASCADE CONSTRAINTS
/

/*============================================================================*/
/* Tables                                                                     */
/*============================================================================*/
CREATE TABLE Paypal (
    NPay INTEGER NOT NULL,
    Compte VARCHAR2(40) NOT NULL,
    CONSTRAINT PK_Paypal PRIMARY KEY (NPay)
)
/

CREATE TABLE VirementBancaire (
    NVB INTEGER NOT NULL,
    RIB VARCHAR2(40),
    IBAN VARCHAR2(40),
    CONSTRAINT PK_VirementBancaire PRIMARY KEY (NVB)
)
/

CREATE TABLE MoyensPaiement (
    NMP INTEGER NOT NULL,
    CarteBancaireNCB INTEGER,
    Paypal NPay INTEGER,
    VirementBancaireNVB INTEGER,
    CONSTRAINT PK_MoyensPaiement PRIMARY KEY (NMP)
)
/

CREATE TABLE Pays (
    Npa INTEGER NOT NULL,
    Nom VARCHAR2(40) NOT NULL,
    CONSTRAINT PK_Pays PRIMARY KEY (Npa)
)
/

CREATE TABLE Personne (
    NPe INTEGER NOT NULL,
    Nom VARCHAR2(40) NOT NULL,
    Prenom VARCHAR2(40) NOT NULL,
    DateDeNaissance DATE NOT NULL,
    Adresse VARCHAR2(40) NOT NULL,
    Telephone VARCHAR2(40),
    Email VARCHAR2(40) NOT NULL,
    Login VARCHAR2(40) NOT NULL,
    Password VARCHAR2(40) NOT NULL,
    PaysNpa INTEGER NOT NULL,
    MoyensPaiementNMP INTEGER,
    CONSTRAINT PK_Personne PRIMARY KEY (NPe),
    CONSTRAINT Contrainte_PersonneMajeure CHECK (((SELECT sysdate FROM dual) - DateDeNaissance)/365 >= 18)
)
/

CREATE TABLE Acheteur (
    NAch INTEGER NOT NULL,
    Clef VARCHAR2(32) NOT NULL,
    VerifEmail CHAR(1),
    PersonneNPe INTEGER NOT NULL,
    CONSTRAINT PK_Acheteur PRIMARY KEY (NAch),
    CONSTRAINT Contrainte_ClefUnique UNIQUE (Clef)
)
/

CREATE TABLE Vendeur (
    NVe INTEGER NOT NULL,
    Clef VARCHAR2(32),
    Verif CHAR(1),
    PersonneNPe INTEGER NOT NULL,
    CONSTRAINT PK_Vendeur PRIMARY KEY (NVe),
    CONSTRAINT Contrainte_ClefUnique UNIQUE (Clef)
)
/

CREATE TABLE Avis (
    Nav INTEGER NOT NULL,
    Note CHAR(1) DEFAULT N NOT NULL,
    Commentaire VARCHAR2(40),
    VendeurNVe INTEGER,
    AcheteurNAch INTEGER,
    CONSTRAINT PK_Avis PRIMARY KEY (Nav)
)
/

CREATE TABLE CarteBancaire (
    NCB INTEGER NOT NULL,
    Numero NUMBER NOT NULL,
    Type VARCHAR2(40) NOT NULL,
    Cryptogramme NUMBER NOT NULL,
    CONSTRAINT PK_CarteBancaire PRIMARY KEY (NCB)
)
/

CREATE TABLE Categorie (
    NCat INTEGER NOT NULL,
    Nom VARCHAR2(40) NOT NULL,
    Description VARCHAR2(40),
    CONSTRAINT PK_Categorie PRIMARY KEY (NCat)
)
/

CREATE TABLE Produits (
    NPr INTEGER NOT NULL,
    Nom VARCHAR2(40) NOT NULL,
    Photo BFILE,
    Description VARCHAR2(40),
    PrixDepart NUMBER,
    PrixReserve NUMBER,
    PrixAchatImmediat NUMBER,
    Etat CHAR(1) NOT NULL,
    DateDebut DATE NOT NULL,
    DateFin DATE NOT NULL,
    VendeurNVe INTEGER NOT NULL,
    CONSTRAINT PK_Produits PRIMARY KEY (NPr)
)
/

CREATE TABLE Categorie_Produits (
    CategorieNCat INTEGER NOT NULL,
    ProduitsNPr INTEGER NOT NULL
)
/

CREATE TABLE Encherir (
    NEn INTEGER NOT NULL,
    Montant NUMBER NOT NULL,
    MontantMaxi NUMBER,
    AcheteurNAch INTEGER NOT NULL,
    ProduitsNPr INTEGER NOT NULL,
    CONSTRAINT PK_Encherir PRIMARY KEY (NEn)
)
/

CREATE TABLE ReponseCommentaire (
    NRC INTEGER NOT NULL,
    Reponse VARCHAR2(40) NOT NULL,
    AvisNav INTEGER NOT NULL,
    CONSTRAINT PK_ReponseCommentaire PRIMARY KEY (NRC)
)
/

CREATE TABLE Restriction (
    Nre INTEGER NOT NULL,
    PaysNpa INTEGER NOT NULL,
    CategorieNCat INTEGER NOT NULL,
    CONSTRAINT PK_Restriction PRIMARY KEY (Nre)
)
/

/*============================================================================*/
/* Foreign keys                                                               */
/*============================================================================*/
ALTER TABLE MoyensPaiement
    ADD CONSTRAINT FK_CarteBancaire_MoyensPaiement
    FOREIGN KEY (CarteBancaireNCB) REFERENCES CarteBancaire (NCB)
/

ALTER TABLE MoyensPaiement
    ADD CONSTRAINT FK_Paypal_MoyensPaiement
    FOREIGN KEY (Paypal NPay) REFERENCES Paypal (NPay)
/

ALTER TABLE MoyensPaiement
    ADD CONSTRAINT FK_VirementBancaire_MoyensPaiement
    FOREIGN KEY (VirementBancaireNVB) REFERENCES VirementBancaire (NVB)
/

ALTER TABLE Personne
    ADD CONSTRAINT FK_Pays_Personne
    FOREIGN KEY (PaysNpa) REFERENCES Pays (Npa)
/

ALTER TABLE Personne
    ADD CONSTRAINT FK_MoyensPaiement_Personne
    FOREIGN KEY (MoyensPaiementNMP) REFERENCES MoyensPaiement (NMP)
/

ALTER TABLE Acheteur
    ADD CONSTRAINT FK_Personne_Acheteur
    FOREIGN KEY (PersonneNPe) REFERENCES Personne (NPe)
/

ALTER TABLE Vendeur
    ADD CONSTRAINT FK_Personne_Vendeur
    FOREIGN KEY (PersonneNPe) REFERENCES Personne (NPe)
/

ALTER TABLE Avis
    ADD CONSTRAINT FK_Acheteur_Avis
    FOREIGN KEY (AcheteurNAch) REFERENCES Acheteur (NAch)
/

ALTER TABLE Avis
    ADD CONSTRAINT FK_Vendeur_Avis
    FOREIGN KEY (VendeurNVe) REFERENCES Vendeur (NVe)
/

ALTER TABLE Produits
    ADD CONSTRAINT FK_Vendeur_Produits
    FOREIGN KEY (VendeurNVe) REFERENCES Vendeur (NVe)
/

ALTER TABLE Categorie_Produits
    ADD CONSTRAINT FK_Produits_Categorie_Produits
    FOREIGN KEY (ProduitsNPr) REFERENCES Produits (NPr)
/

ALTER TABLE Categorie_Produits
    ADD CONSTRAINT FK_Categorie_Categorie_Produits
    FOREIGN KEY (CategorieNCat) REFERENCES Categorie (NCat)
/

ALTER TABLE Encherir
    ADD CONSTRAINT FK_Produits_Encherir
    FOREIGN KEY (ProduitsNPr) REFERENCES Produits (NPr)
/

ALTER TABLE Encherir
    ADD CONSTRAINT FK_Acheteur_Encherir
    FOREIGN KEY (AcheteurNAch) REFERENCES Acheteur (NAch)
/

ALTER TABLE ReponseCommentaire
    ADD CONSTRAINT FK_Avis_ReponseCommentaire
    FOREIGN KEY (AvisNav) REFERENCES Avis (Nav)
/

ALTER TABLE Restriction
    ADD CONSTRAINT FK_Categorie_Restriction
    FOREIGN KEY (CategorieNCat) REFERENCES Categorie (NCat)
/

ALTER TABLE Restriction
    ADD CONSTRAINT FK_Pays_Restriction
    FOREIGN KEY (PaysNpa) REFERENCES Pays (Npa)
/
