IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 MySQL Discussion :

déclarer des tables avec une association [1-n] (InnoDB-MyISAM)


Sujet :

MySQL

  1. #1
    Membre confirmé
    Avatar de Khaled.Noordin
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 354
    Points : 497
    Points
    497
    Billets dans le blog
    1
    Par défaut déclarer des tables avec une association [1-n] (InnoDB-MyISAM)
    voici le MCD de départ



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mon MLD
    PATIENT(numP, nomP, prénomP, adrP,telP, numV#)
    VILLE(numV, CP, ville)
    sur ubuntu mysql 5.1 mes déclarations de tables dans une base nommé medicalcenter:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    CREATE TABLE Ville(
    numV BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    code VARCHAR(5) NOT NULL DEFAULT '',
    ville VARCHAR(30) NOT NULL DEFAULT '',
    CONSTRAINT pk_Ville_numV PRIMARY KEY(numV),
    INDEX(code),
    INDEX(ville)
    )ENGINE=MyISAM DEFAULT CHARSET=utf8;
    pas de probleme
     
    CREATE TABLE Patient(
    numP BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    nomP VARCHAR(30) NOT NULL DEFAULT '',
    prénomP  VARCHAR(30) NOT NULL DEFAULT '',
    adrP  VARCHAR(120) NOT NULL DEFAULT '',
    numV  BIGINT UNSIGNED NOT NULL,
    telP VARCHAR(10) NOT NULL DEFAULT '',
    CONSTRAINT un_Patient_numP UNIQUE(numP),
    CONSTRAINT pk_Patient_numP PRIMARY KEY (numP),
    CONSTRAINT fk_Patient_Ville_numV FOREIGN KEY (numV) REFERENCES Ville(numV) ON DELETE NO ACTION ON UPDATE CASCADE,
    INDEX(numV)
    )ENGINE=InnoDB DEFAULT CHARSET=utf8;
    la j'ai une l'erreur suivante :
    ERROR 1005 (HY000): Can't create table 'medicalcenter.Patient' (errno: 150).
    je vois vraiment pas ou est l'erreur.

  2. #2
    Membre confirmé
    Avatar de Khaled.Noordin
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 354
    Points : 497
    Points
    497
    Billets dans le blog
    1
    Par défaut
    en changeant le type d'engin de ville de myisam vers innodb la commande passe, dois je comprendre que pour que la contrainte de clé étrangère est possible que entre deux type innodb uniquement, j'ai cru comprendre que ce n'est que la table qui a une clé étrangère qui a besoin d'être géré par ce moteur?
    Est ce que ma déclaration de clé étrangère respecte bien l'intégrité référentiel du MCD car si je met numV sans not null dans patient alors ce n'est plus une cardinalité (1,1) du coté patient ?
    Et si je détruits un enregistrement de ville comment répercuter correctement la destruction ?

  3. #3
    Membre confirmé
    Avatar de Khaled.Noordin
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 354
    Points : 497
    Points
    497
    Billets dans le blog
    1
    Par défaut
    la solution est en faisant un ON DELLETE CASCADE ON UPDATE CASCADE et tout en InnoDB

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    CREATE TABLE Ville(
    numV BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    code VARCHAR(5) NOT NULL DEFAULT '',
    ville VARCHAR(30) NOT NULL DEFAULT '',
    CONSTRAINT pk_Ville_numV PRIMARY KEY(numV),
    INDEX(code),
    INDEX(ville)
    )ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
    CREATE TABLE Patient(
    numP BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    nomP VARCHAR(30) NOT NULL DEFAULT '',
    prénomP  VARCHAR(30) NOT NULL DEFAULT '',
    adrP  VARCHAR(120) NOT NULL DEFAULT '',
    numV  BIGINT UNSIGNED NOT NULL,
    telP VARCHAR(10) NOT NULL DEFAULT '',
    CONSTRAINT un_Patient_numP UNIQUE(numP),
    CONSTRAINT pk_Patient_numP PRIMARY KEY (numP),
    CONSTRAINT fk_Patient_Ville_numV FOREIGN KEY (numV) REFERENCES Ville(numV) ON DELETE NO ACTION ON UPDATE CASCADE,
    INDEX(numV)
    )ENGINE=InnoDB DEFAULT CHARSET=utf8;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/04/2013, 08h52
  2. Réponses: 1
    Dernier message: 25/11/2008, 11h11
  3. Réponses: 1
    Dernier message: 02/10/2008, 16h08
  4. Ajouter des champ dans une table avec une procedure sp
    Par Abdou1 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 26/07/2006, 18h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo