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 :

Conditions d'unité sur deux champs


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 132
    Points : 99
    Points
    99
    Par défaut Conditions d'unité sur deux champs
    Bonsoir,

    Juste une petite question...
    Lors que l'on crée une table, on a la possibilité de définir un champs de type UNIQUE, voir même plusieurs.
    Mais est ce possibilité d'étendre cette possibilité sur deux champs ?

    Un petit exemple :

    Une table avec les champs suivants :
    | user_id | blog_id | access

    Il peut y avoir plusieurs utilisateurs identiques sur différents blogs, mais pas deux fois le même utilisateurs sur le même blog.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     | user_id  | blog_id  | access    |
     |---------------------------------|
     | 11       | 2        | 'admin'   | OK
     |---------------------------------|
     | 11       | 3        | 'editeur' | OK
     |---------------------------------|
     | 10       | 2        | 'invité'  | OK
     |---------------------------------|
     | 11       | 2        | 'editeur' | PAS OK
     |---------------------------------|
     | 11       | 2        | 'invité'  | PAS OK
    Y'a t'il un moyen de mettre en place ce type de contrainte ?

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 94
    Points : 113
    Points
    113
    Par défaut
    Je pense que cette sytaxe devrait marcher pour MYSQL

    ALTER TABLE myTable ADD UNIQUE (user_id, blog_id);

  3. #3
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Salut,

    Oui c'est possible, mais je pense (je ne suis pas sûr) que la syntaxe diffère selon le SGBD.

    Par exemple, sous Oracle, lors de la création de ta table:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TABLE matable
    (.......................................
    CONSTRAINT nomdemacontrainte UNIQUE (liste des colonnes séparées par des virgules)
    );
    Etre ou ne pas être, telle est la question sinusoïdale de l'anachorète hypocondriaque et vice et versa .
    Bonsai monsieur, bonsai madame, vous avez gagnez un milliard de degrés au soleil .
    There is no cure for stupidity (ou pas ).

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Au vu de l'exemple donné :
    Une table avec les champs suivants :
    | user_id | blog_id | access

    Il peut y avoir plusieurs utilisateurs identiques sur différents blogs, mais pas deux fois le même utilisateurs sur le même blog.

    Code SQL :
    | user_id | blog_id | access |
    |---------------------------------|
    | 11 | 2 | 'admin' | OK
    |---------------------------------|
    | 11 | 3 | 'editeur' | OK
    |---------------------------------|
    | 10 | 2 | 'invité' | OK
    |---------------------------------|
    | 11 | 2 | 'editeur' | PAS OK
    |---------------------------------|
    | 11 | 2 | 'invité' | PAS OK
    Le couple (user_id, blog_id) ne devrait-il pas être clé primaire de la table ?
    En ce cas, le problème de l'unicité serait réglé.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 : 21 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    ors que l'on crée une table, on a la possibilité de définir un champs de type UNIQUE, voir même plusieurs.
    Mais est ce possibilité d'étendre cette possibilité sur deux champs ?
    Beaucoup d'horreur dans votre question :

    1) la notion de "champs" n'existe pas en matière de bases de données. Lisez l'article que j'ai écrit à ce sujet :
    http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L2

    2) UNIQUE n'est pas un type, c'est une contrainte qui accepte une collection de colonnes.
    Pour la syntaxe, voir ce que j'ai écrit à ce sujet :
    http://sqlpro.developpez.com/cours/s...partie2#L7.2.2

    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/ * * * * *

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 132
    Points : 99
    Points
    99
    Par défaut
    Citation Envoyé par CinePhil Voir le message
    Au vu de l'exemple donné :

    Le couple (user_id, blog_id) ne devrait-il pas être clé primaire de la table ?
    En ce cas, le problème de l'unicité serait réglé.
    Pourrais tu développer s'il te plait ?

    Citation Envoyé par SQLpro Voir le message
    Beaucoup d'horreur dans votre question :

    1) la notion de "champs" n'existe pas en matière de bases de données. Lisez l'article que j'ai écrit à ce sujet :
    http://sqlpro.developpez.com/cours/sqlaz/erreurs/#L2

    2) UNIQUE n'est pas un type, c'est une contrainte qui accepte une collection de colonnes.
    Pour la syntaxe, voir ce que j'ai écrit à ce sujet :
    http://sqlpro.developpez.com/cours/s...partie2#L7.2.2

    A +
    Noté, merci.

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par SPKlls Voir le message
    Pourrais tu développer s'il te plait ?
    J'ai l'impression que ta table est une table associative représentant l'association suivante :
    User -0,n----Accéder----0,n- Blog

    Cette association se traduit par les tables, en prenant des noms anglais comme dans ton exemple :
    Users(User_Id, User_name, ...)
    Blogs(Blog_id, Blog_title, ...)
    Access(User_Id, Blog_Id, Access, ...)

    Une table associative a pour clé primaire les clés primaires des tables entrant en jeu dans l'association.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. condition sur deux champs parmi beaucoup
    Par bluesmanu dans le forum Requêtes
    Réponses: 5
    Dernier message: 10/02/2010, 14h30
  2. Tri sur deux champs en même temps
    Par Azharis dans le forum Access
    Réponses: 8
    Dernier message: 11/01/2006, 13h10
  3. [MYSQL] Problème ORDER BY sur deux champs
    Par LE NEINDRE dans le forum Requêtes
    Réponses: 8
    Dernier message: 14/10/2005, 16h46
  4. pb avec select sur deux champs
    Par graphicsxp dans le forum Langage SQL
    Réponses: 7
    Dernier message: 22/03/2005, 15h30
  5. contrainte sur deux champs d'une table
    Par bdkiller dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 17/09/2004, 18h26

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