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 :

Table avec une seule colonne : acceptable?


Sujet :

Langage SQL

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 61
    Par défaut Table avec une seule colonne : acceptable?
    Voici un exemple. Imaginons 2 tables, une avec des chiens, l'autre avec des chats. Chacun de ces animaux appartient obligatoirement à un (et un seul) regroupement existant d'animaux. Ensuite, imaginons que les femmes et les hommes peuvent posséder un (et un seul) regroupement d'animaux.

    On pourrait imaginer, si on n'a pas peur de faire cliché:
    Chat (id, nom, typeMoustache, idGroupeAnimal)
    Chien (id, nom, typeOreille, idGroupeAnimal)
    GroupeAnimal (id)
    Femme (id, nom, clubFoot, idGroupeAnimal)
    Homme (id, nom, clubFitness, idGroupeAnimal)

    Si le groupeAnimal en tant que tel ne possède pas de nom, qu'il n'existe aucune information particulière liée, est-ce acceptable d'avoir une table qui ne contient qu'un id? Est-ce que ça implique forcément qu'il y a une erreur dans le raisonnement? Et si c'est le cas, est-il possible de dire où se trouve l'(horriblissime) erreur dans le schema?

    Merci d'avance!

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 036
    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 036
    Billets dans le blog
    6
    Par défaut
    Pas du tout, c'est parfaitement normal. Il arrive souvent que l'on ait pas exemple une table de date ou de nombre dans une base du fait du modèle.

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

  3. #3
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Dans ton cas, tu as deux manières de faire :
    1) La contrainte CHECK ou le type ENUM s'il existe dans ton SGBD.
    Tu contrains la colonne idGroupeAnimal à certaines valeurs prédéfinies.

    2) La table mono-colonne comme tu l'as définie avec une clé étrangère faisant référence à cette table.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 61
    Par défaut
    Ok, merci pour vos réponses.

    Ici, la table GroupeAnimal sert uniquement à créer un groupe hétéroclyte.
    - La foreign key vers GroupeAnimal dans Chien ou Chat signifie "fait partie de ce groupe". (Ils ne peuvent faire partie que d'un et un seul groupe.)
    - La foreign Key vers GroupeAnimal dans Homme ou Femme signifie "possède ce groupe". (Ils ne peuvent posséder qu'un et un seul groupe.)
    Si vous me dites que c'est cohérent d'avoir une table pour représenter les groupes qui ne contient que l'id de ces groupe, et bien pourquoi pas! J'avoue que ça me semblait étrange de premier abord.

  5. #5
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 259
    Par défaut
    Mais rien ne t'empêche de rajouter ne serait-ce qu'une colonne Nom pour dire à quoi correspond ton ID, même si tu ne l'utilise pas dans le reste des données.

    NE serait-ce que lorsque tu inspecte ta base lors de recherche de problème, tu n'aurait pas à te poser la question "A quoi correspond cet ID"


  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 61
    Par défaut
    Effectivement... mais quoi comme nom?

    Parfois, on aura un groupe de chiens et de chat, qu'on voudra assigner à un homme ou une femme.
    On va donc créer le groupe, créer les chiens et les chats en leur assignant leur groupe, puis filer ce groupe à un homme ou une femme.
    Mais au moment de créer le groupe, que pourrais-je lui donner comme nom? Si je me retrouve avec (id:1, name:'GroupeAnimal1'), je serai bien avancé.
    Ce groupe est un concept assez abstrait, qui permet simplement aux hommes et aus femmes de pouvoir le posséder.

    Je pourrais mettre le nom de l'homme ou de la femme qui possède le groupe pour info (ou le nom des animaux), mais ce serait une mauvaise idée: le lien homme/femme vers le groupe existe déjà, inutile de créer un lien bidirectionnel qui ne serait de toute façon pas "officiel".
    A la limite, la date de création... mais ce sera la même que celle des chiens et des chats, vu que les groupes ne seront pas modifiés...
    Bref, je ne vois pas...

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

Discussions similaires

  1. [2008R2] Problème d'insertion sur table avec une unique colonne identity
    Par Kropernic dans le forum Développement
    Réponses: 12
    Dernier message: 04/10/2013, 09h16
  2. Réponses: 3
    Dernier message: 13/11/2012, 17h56
  3. Réponses: 6
    Dernier message: 02/03/2009, 09h42
  4. Réponses: 1
    Dernier message: 20/02/2008, 12h34
  5. Réponses: 2
    Dernier message: 23/04/2007, 01h10

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