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

Langage SQL Discussion :

[sqlbaseserver]demande de conseils/aides pour requêtes


Sujet :

Langage SQL

  1. #1
    Membre du Club

    Inscrit en
    Juin 2003
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 64
    Points : 66
    Points
    66
    Par défaut [sqlbaseserver]demande de conseils/aides pour requêtes
    Bonjour,

    Je travail avec SQL BASE SERVER 8.0.0.m.
    Je suis donc dans le sql talk et j'aimerai créer une petite base avec deux table. Voici ce que j'ai déjà fait:

    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
    set server server1;
    create database CLIENTS;
    connect CLIENTS sysadm/sysadm;
    CREATE TABLE societe (
                                       num_soc NUMBER, 
                                       nom_soc CHAR(50),
                                       adresse_soc CHAR(60),
                                       ville_soc CHAR(20),
                                       cp_soc CHAR(5),
                                       tel_soc CHAR(15),
                                       email_soc CHAR(60),
                                       fax_soc CHAR(15));
    CREATE TABLE contacts (
                                       num_cont NUMBER, 
                                       nom_cont CHAR(30),
                                       pre_cont CHAR(20),
                                       mail_cont CHAR(60),
                                       tel_cont CHAR(15),
                                       fax_cont CHAR(15),
                                       nom_soc CHAR(50));
    exit;
    Comme vous le voyer j'ai mis le nom_soc dans les deux table pour faire la relation entre les deux.

    Je voudrais créer les identifiants donc num_soc et num_cont.
    Il faut une clé primaire sur num_soc non? et une clé etrangère?
    Pouvez vous me conseiller sur les démarches à suivres?
    Enfaite je ne sais pas du tout comment m'y prendre pour établir une relation entre les deux tables...

    Merci d'avance

  2. #2
    Membre actif
    Avatar de MashiMaro
    Profil pro
    Inscrit en
    Février 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 180
    Points : 213
    Points
    213
    Par défaut
    Si tu veux faire un lien entre tes deux tables. Utilise num_soc qui est numérique et qui est, si je comprends bien, l'identifiant unique de ta table.

    Un lien avec des numériques est plus rapide qu'avec des chaines de caractères.

    Il faut donc que num_soc soit la PK de societe

    contacts aura num_cont en PK et num_soc en FK

  3. #3
    Membre du Club

    Inscrit en
    Juin 2003
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 64
    Points : 66
    Points
    66
    Par défaut
    Merci de ta réponse si rapide.
    Donc pour la déclaration des primary key et foreign key je dois faire:

    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
    23
    24
    25
    26
     
     
    Code: 
    set server server1; 
    create database CLIENTS; 
    connect CLIENTS sysadm/sysadm; 
    CREATE TABLE societe ( 
                                       num_soc NUMBER, 
                                       nom_soc CHAR(50), 
                                       adresse_soc CHAR(60), 
                                       ville_soc CHAR(20), 
                                       cp_soc CHAR(5), 
                                       tel_soc CHAR(15), 
                                       email_soc CHAR(60), 
                                       fax_soc CHAR(15),
                                       PRIMARY KEY (num_soc)); 
    CREATE TABLE contacts ( 
                                       num_cont NUMBER, 
                                       nom_cont CHAR(30), 
                                       pre_cont CHAR(20), 
                                       mail_cont CHAR(60), 
                                       tel_cont CHAR(15), 
                                       fax_cont CHAR(15), 
                                       nom_soc CHAR(50),
                                       PRIMARY KEY (num_cont)); 
    exit;
    Est ce que c'est bien comme sa qu'il faut le déclarer?
    Pour le foreign key je ne vois pas trop comment il faut faire, quelqu'un pourrait m'aider?

    merci d'avance

  4. #4
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ALTER TABLE XXXX
           FOREIGN YYYY (Id)
                   REFERENCES ZZZZZ
                   ON DELETE SET NULL;
    XXXX : table qui contient la FK
    YYYY : Nom de la contrainte
    Id : Nom de la colonne dans XXXX
    ZZZZ : nom de la table dont la PK est référencée
    ON DELETE SET NULL est optionnel (il y a d'autres options cf. la doc)

    Peut se faire aussi dans le CREATE TABLE
    Et comme le dit MashiMaro utilise num_soc pas nom_soc !

  5. #5
    Membre du Club

    Inscrit en
    Juin 2003
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 64
    Points : 66
    Points
    66
    Par défaut
    dans mon cas j'ai essayer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ALTER TABLE contacts 
           FOREIGN num_cont (num_soc) 
                   REFERENCES societe 
                   ON DELETE SET NULL;
    Sans succés... Je suis pas sur de la contrainte, je pense que c'est ça qui est faux.

  6. #6
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par Génious
    dans mon cas j'ai essayer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ALTER TABLE contacts 
           FOREIGN num_cont (num_soc) 
                   REFERENCES societe 
                   ON DELETE SET NULL;
    Sans succés... Je suis pas sur de la contrainte, je pense que c'est ça qui est faux.
    num_soc n'existe pas dans ta table contacts !

  7. #7
    Membre du Club

    Inscrit en
    Juin 2003
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 64
    Points : 66
    Points
    66
    Par défaut
    Si, enfaite j'ai suivi le conseil:

    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
    23
    24
    25
    26
    27
    28
    29
    set server server1;
    create database CLIENTS;
    connect CLIENTS sysadm/sysadm;
     
    CREATE TABLE societe (
        num_soc NUMBER, 
        nom_soc CHAR(50),
        adresse_soc CHAR(60),
        ville_soc CHAR(20),
        cp_soc CHAR(5),
        tel_soc CHAR(15),
        email_soc CHAR(60),
        fax_soc CHAR(15),
    PRIMARY KEY (num_soc)); 
     
    CREATE TABLE contacts (
        num_cont NUMBER, 
        nom_cont CHAR(30),
        pre_cont CHAR(20),
        mail_cont CHAR(60),
        tel_cont CHAR(15),
        fax_cont CHAR(15),
        num_soc NUMBER,
    PRIMARY KEY (num_cont));
     
    ALTER TABLE contacts 
           FOREIGN num_cont (num_soc) 
                   REFERENCES societe 
                   ON DELETE SET NULL;
    Voila exactement ce que j'ai fait.
    tout ce passe bien la création des tables, des clés sauf le ALTER TABLE
    Voici l'erreur que mon retourne SQL TALK

    ALTER TABLE contacts
    FOREIGN num_cont (num_soc)
    ^
    Error: 09817 PRS MKY Missing KEY keyword
    euh j'édite car l'accent circonflexe sous foreign est sous num_cont normalement

    merci d'avance

  8. #8
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Tu ne parles bien anglais non ?
    Missing KEY keyword veut dire qu'il manque le mot clé KEY (que j'ai effectivement laissé dans le presse-papier )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ALTER TABLE contacts 
           FOREIGN KEY num_cont (num_soc) 
                   REFERENCES societe 
                   ON DELETE SET NULL;

  9. #9
    Membre du Club

    Inscrit en
    Juin 2003
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 64
    Points : 66
    Points
    66
    Par défaut
    Oui désolé mon anglais est vraiment nul

    tu as raison sa a supprimer l'erreur et j'en ai une dernière je sens que je touche au but

    ALTER TABLE contacts
    FOREIGN KEY num_cont (num_soc)
    REFERENCES societe
    ^
    Error: 09839 PRS PTI Parent table in incomplete state

  10. #10
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Un défaut de SqlBase que j'avais oublié : définir une PRIMARY KEY ne suffit pas, il faut définir un unique index sur cette clé primaire avant de définir les FOREIGN KEY, c'est pour cela que l'état de la table parente est "incomplet"

  11. #11
    Membre du Club

    Inscrit en
    Juin 2003
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 64
    Points : 66
    Points
    66
    Par défaut
    voici mes requetes completes
    J'avais déjà rajouter le not null

    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
    23
    24
    25
    26
    27
    28
    29
    set server server1;
    create database CLIENTS;
    connect CLIENTS sysadm/sysadm;
     
    CREATE TABLE societe (
    num_soc NUMBER not null, 
    nom_soc CHAR(50),
    adresse_soc CHAR(60),
    ville_soc CHAR(20),
    cp_soc CHAR(5),
    tel_soc CHAR(15),
    email_soc CHAR(60),
    fax_soc CHAR(15),
    PRIMARY KEY (num_soc)); 
     
    CREATE TABLE contacts (
    num_cont NUMBER not null, 
    nom_cont CHAR(30),
    pre_cont CHAR(20),
    mail_cont CHAR(60),
    tel_cont CHAR(15),
    fax_cont CHAR(15),
    num_soc NUMBER,
    PRIMARY KEY (num_cont));
     
    ALTER TABLE contacts 
    FOREIGN KEY num_cont (num_soc) 
    REFERENCES societe 
    ON DELETE SET NULL;
    si par exemple j'essaye de faire un insert into sa fonctionne pas non plus
    Je pense que j'ai oublier ou mal fais quelque chose

    Je viens de voir l'aide de sql base server et ca l'air bon pourtant.
    Est ce que sa ne viendrai pas du fait que je l'ai mis en number?

  12. #12
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Je ne comprends plus très bien :
    As-tu déclaré l'index unique sur les PRIMARY KEY ?
    Tu dis faire un INSERT tu peux donner ta requête et le code erreur ?

  13. #13
    Membre du Club

    Inscrit en
    Juin 2003
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 64
    Points : 66
    Points
    66
    Par défaut

    Bon je reprend:
    Tout ce que je veux faire c'est créer 2 tables: societe et clients.
    J'aimerai qu'il y ai une relation entre les 2 tables.
    Mes identifiants sont num_soc et num_cont
    Num_soc est une clé primaire et num_cont aussi
    Num_soc est également la clé étrangère dans la table contact
    (Jusque la j'espère que c'est bon)

    Pour sa j'ai fait les requêtes suivantes:

    Création de la base et de la table societe avec la clé primaire num_soc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    create database CLIENTS; 
    connect CLIENTS sysadm/sysadm; 
     
    CREATE TABLE societe ( 
    num_soc NUMBER not null, 
    nom_soc CHAR(50), 
    adresse_soc CHAR(60), 
    ville_soc CHAR(20), 
    cp_soc CHAR(5), 
    tel_soc CHAR(15), 
    email_soc CHAR(60), 
    fax_soc CHAR(15), 
    PRIMARY KEY (num_soc));
    la sa fonctionne
    Ensuite je créer ma table contacts avec la clé primaire num_cont
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE contacts ( 
    num_cont NUMBER not null, 
    nom_cont CHAR(30), 
    pre_cont CHAR(20), 
    mail_cont CHAR(60), 
    tel_cont CHAR(15), 
    fax_cont CHAR(15), 
    num_soc NUMBER, 
    PRIMARY KEY (num_cont));
    ensuite je dois déclarer la clé étrangère dans la table contatcs donc c'est num_soc
    Pour ça je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ALTER TABLE contacts 
    FOREIGN KEY num_cont (num_soc) 
    REFERENCES societe 
    ON DELETE SET NULL;
    et la j'ai une erreur qui s'affiche

    ALTER TABLE contacts
    FOREIGN KEY num_cont (num_soc)
    REFERENCES societe
    ^
    Error: 09839 PRS PTI Parent table in incomplete state
    Et c'est la que je bloque...

  14. #14
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par pgibone
    Un défaut de SqlBase que j'avais oublié : définir une PRIMARY KEY ne suffit pas, il faut définir un unique index sur cette clé primaire avant de définir les FOREIGN KEY, c'est pour cela que l'état de la table parente est "incomplet"
    Après avoir créé tes deux tables et avant le ALTER TABLE ajoute les
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE UNIQUE INDEX xxx ON yyyy (pk)
    où xxxx est le nom de l'index, yyyy le nom de la table et pk le nom de la colonne PRIMARY KEY (par exemple num_soc pour la table societe)

  15. #15
    Membre du Club

    Inscrit en
    Juin 2003
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 64
    Points : 66
    Points
    66
    Par défaut
    Ha oui c'était ça aparement.
    En creant l'index j'ai eu le message
    index created with 0 rows
    et apres l'ajout de la fk
    fk added
    Je vais tester si tout fonctionne correctement

    Merci de ta patience

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

Discussions similaires

  1. Demande d'aide pour requête sqlcmd
    Par ramben dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 17/11/2014, 15h54
  2. demande d'aide pour requête complexe avec SUM
    Par sibia dans le forum Requêtes
    Réponses: 1
    Dernier message: 25/04/2013, 10h09
  3. [MySQL-5.5] Demande d'aide pour requête complexe
    Par gattou dans le forum Requêtes
    Réponses: 4
    Dernier message: 23/04/2013, 11h29
  4. [SQL] Demande d'aide pour requète SQL
    Par vinco888 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 30/01/2009, 21h04
  5. Aide pour Requête
    Par Guiche dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/11/2003, 21h18

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