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 :

Clé à champ multiples


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 5
    Par défaut Clé à champ multiples
    Bonjour, voici mon problème, je cherche à créer une table dont la clé primaire serait basée sur deux colonnes a et b, chacune pouvant être null séparément mais pas ensemble... et en plus avoir une contrainte d'unicité sur chaque colonne.

    Ainsi je devrais pouvoir obtenir:
    a b
    toto null
    null toto

    une fois ces deux lignes entrées, je ne dois pas pouvoir insérer
    toto tata
    titi toto

    et je ne dois jamais pouvoir insérer
    null null

    Si quelqu'un a une idée basée sur des contraintes par exemple, cela me serait très utile...
    Merci

  2. #2
    Membre chevronné Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Par défaut
    Bonjour,
    quel est votre SGBD ?

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 5
    Par défaut
    Je dirais peu importe, mais probablement SQL Server 2005.
    Il serait intéressant que la solution proposée soit aussi valable sur Syabse 15 ( et le must compatible Sybase 12.5).

    Merci

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 143
    Par défaut
    Compte tenu de la complexité de ta règle, je ne vois guère d'autre solution que de passer par un trigger before insert / update.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre chevronné Avatar de chrifo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    444
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 444
    Par défaut
    Citation Envoyé par frvallee Voir le message
    Je dirais peu importe
    C'était le fait que vous mettiez des valeurs null dans des pk qui m'étonnait.

    Sous Sybase et SQLserver, un champ d'une clé primaire ne peut pas prendre de valeur null .
    Vous devriez pouvoir répondre à votre description avec une Unique Key sur chaque colonne et un trigger pour vérifier que si une colonne est null l'autre ne l'est pas.

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 042
    Billets dans le blog
    6
    Par défaut
    NON ! Une clef ne peut avoir aucune colonne nullable par définition...
    En revanche rien ne vous empêche d'avoir une contrainte d'UNICITÉ qui, elle, accepte les null.

    De plus une contrainte d'unicité peut servir de clef pour une contrainte d'intégrité référentielle...

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 5
    Par défaut
    effectivement une clé à champ multiple n'autorise aucun champ null, c'est pourquoi j'envisageais l'utilisation des contraintes d'unicité associées à une contrainte check (a is not null or b is not null)... mais j'ai découvert que le check ne s'applique pas quand les champs sont null...

    J'avais pas encore poussé jusqu'au trigger merci pour la direction, reste à voir si ca fonctionne...

Discussions similaires

  1. Index full text sur champs multiples
    Par manu_71 dans le forum Outils
    Réponses: 6
    Dernier message: 22/02/2007, 00h41
  2. formulaire avec des champs multiples
    Par don'de dans le forum Struts 1
    Réponses: 13
    Dernier message: 16/02/2007, 09h42
  3. [Struts] champs multiples
    Par khokho dans le forum Struts 1
    Réponses: 4
    Dernier message: 10/05/2006, 16h46
  4. Champs multiples à vérifier...
    Par minusette dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 01/12/2005, 14h04
  5. Champ Multiple Concatenation et Mysql
    Par mulbek dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 17/10/2005, 13h40

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