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 :

Modelisation d'utilisateur linux en SQL


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Points : 110
    Points
    110
    Par défaut Modelisation d'utilisateur linux en SQL
    Hello tout le monde,

    J'ai un problème pour lequel je n'arrive pas à trouver de solution :

    J'explique :

    J'ai une table user avec un id, un nom et un mot de passe.
    J'ai une table groupe avec un id, un nom.

    Mon problème est qu'un même nom ne peut à la fois se retrouver dans la table user et dans la table groupe.
    Un même id ne peut à la fois se retrouver dans la table user et dans la table groupe.

    J'utilise PostgreSQL, j'ai tenté l'héritage avec des contraintes uniques sur la table parent mais ça ne fonctionne pas.

    Une idée pour gérer cela ?

    Merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    Vous pourriez utiliser une séquence unique pour générer vos ID des 2 tables.
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Points : 110
    Points
    110
    Par défaut
    Oui sauf que j'ai toujours le problème du nom qui doit être unique au sein des deux tables...

  4. #4
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    Vous pourriez utiliser une séquence unique pour générer vos ID des 2 tables.

    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
    CREATE SEQUENCE seq1     INCREMENT 1     START 1     MINVALUE 1 ;
     
    CREATE TABLE "groupes"
    (
        "GID" bigint NOT NULL,
        "Groupe" character(20) COLLATE pg_catalog."default" NOT NULL,
        CONSTRAINT group_pkey PRIMARY KEY ("GID")
    );
     
    CREATE TABLE "utilisateurs"
    (
        "UID" bigint NOT NULL,
        "Login" character(20) COLLATE pg_catalog."default" NOT NULL,
        CONSTRAINT group_pkey PRIMARY KEY ("UID")
    ) ;
     
    INSERT into utilisateurs values(nextval('seq1'), 'Login1') ;
    INSERT into Groupes values(nextval('seq1'), 'Mongroupe1') ;
    Tuto : http://dgriessinger.developpez.com/p...sql/sequences/
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 080
    Points : 30 788
    Points
    30 788
    Par défaut
    Autre solution, une table unique d'identifiants (Id et Nom) avec les contraintes d'unicité correspondantes associé à une table des mots de passe, avec clé étrangère sur les identifiants.
    Une ligne d'identifiant sans mot de passe est un Groupe, avec un mot de passe, c'est un Utilisateur. Ce qui se formalise dans les vues correspondantes.
    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
    30
    CREATE TABLE identifiant
        (   identifiant NUMBER  IDENTITY        CONSTRAINT PRIMARY KEY
        ,   nom         VARCHAR(128)    CONSTRAINT  UNIQUE
        )
    ;
    CREATE TABLE mot_de_passe
        (   identifiant     NUMBER CONSTRAINT PRIMARY KEY
        ,   mot_de_passe    VARCHAR(128)
        ,   CONSTRAINT FOREIGN KEY identifiant REFERENCES identifiant(identifiant)
        )
    ;
    CREATE VIEW utilisateur
    AS  SELECT  idt.identifiant AS  id_user
            ,   idt.nom         AS  nom_user
            ,   pwd.mot_de_passe
        FROM    identifiant     AS idt
            INNER JOIN
                mot_de_passe    AS  pwd
                ON  idt.identifiant = pwd.identifiant
    ;
    CREATE VIEW groupe
    AS  SELECT  idt.identifiant AS  id_groupe
            ,   idt.nom         AS  nom_groupe
        FROM    identifiant     AS idt
    WHERE   NOT EXISTS
            (   SELECT  NULL
                FROM    mot_de_passe    AS  pwd
                WHERE   idt.identifiant = pwd.identifiant
            )
    ;
    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.

  6. #6
    Membre expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Points : 3 590
    Points
    3 590
    Billets dans le blog
    8
    Par défaut
    Salut
    Un solution serais de faire une seule table:id, nom (unique), estgroupe(true=>groupe, false=>utilisateur), pwd
    Une autre solution (pour éviter le NULL dans pwd) est de prendre la solution de al1_24 en ajoutant estgroupe à la table identifiant. Dans ce cas les vues seront plus simples et la première vue n'aura pas besoin de trigger il suffira de mettre l'option 'WITH CHECK OPTION'.
    @+
    Le monde est trop bien programmé pour être l’œuvre du hasard…
    Mon produit pour la gestion d'école: www.logicoles.com

Discussions similaires

  1. authentification utilisateur vb.net SQL server
    Par wajaahmed dans le forum Windows Forms
    Réponses: 2
    Dernier message: 27/05/2008, 15h30
  2. [Oracle] Oracle sous Linux(PL/SQL,PostGreSQL,PHP)
    Par LinuxUser dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 18/10/2007, 16h15
  3. Quel Pack linux choisir ? + SQL SERVER
    Par Root_JDK dans le forum Apache
    Réponses: 2
    Dernier message: 09/03/2007, 14h13
  4. Connaître le nom de l'utilisateur (Linux)
    Par gos77 dans le forum Ruby
    Réponses: 2
    Dernier message: 27/12/2006, 19h26
  5. Système d'utilisateurs - XML ou SQL ?
    Par DrySs dans le forum XQUERY/SGBD
    Réponses: 2
    Dernier message: 11/11/2005, 21h06

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