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

Administration SQL Server Discussion :

Table sans PK : SGBDR permissif, pourquoi ?


Sujet :

Administration SQL Server

  1. #1
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut Table sans PK : SGBDR permissif, pourquoi ?
    Bonjour,
    Il me semble que dans la théorie du modèle relationnel, chaque table DOIT avoir une clé primaire (identifiant unique).
    Mais comment comprendre le fait que les éditeurs de SGBDR soient permissifs vis à vis de cette recommandation [qui devrait figurer dans les normes ISO (je ne sais plus laquelle)] et autorise la création de table sans PK ?
    J'ai entendu dire que pour une table temporaire par exemple on n'a pas besoin de PK. Et que posé une clé primaire sur une table temporaire va ralentir les traitements.
    Et je réponds OUI, si cette affirmation est vraie pour les tables temporaires par exemple, pourquoi pour les tables permanentes il y a aucune alerte de la part des SGBDR pour notifier l’existence de table permanente sans PK ?

    Merci de m'éclairer
    Etienne ZINZINDOHOUE
    Billets-Articles

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Points : 1 069
    Points
    1 069
    Par défaut
    Il n'y a pas de règle universelle pour les tables temporaires. Tout dépend de ce que l'on veut en faire. Si on a besoin de faire une jointure entre une table temporaire et une table physique, ou rechercher sur un critère dans la table temporaire par exemple, ça peut être intéressant de placer un index (par exemple pour les très longues IN-Lists). Le fait que les tables temporaires contiennent assez souvent peu de volumétrie a peut être répandu cette idée, mais ce n'est pas généralisable (pas grand chose ne l'est en définitive).

    Et un SGBD ne peut pas contraindre un développeur à mettre des clés primaires partout, il y a des cas où ça n'a pas de sens (certaines tables de logs).
    David B.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 770
    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 770
    Points : 52 726
    Points
    52 726
    Billets dans le blog
    5
    Par défaut
    Le fait de faire des tables sans clef à été spécifiquement pensé pour la reprise des données. En effet rien ne dit que l'on a pas des doublons dans des fichiers... Or traiter un fichier est souvent plus long que de le faire dans les lignes d'une table.

    C'est pourquoi, oui, des tables sans clef sont utile notamment pour des imports voire des exports, voire des tables de log (exemple table de hit d'un site web ou 2 utilisateur peuvent avoir affiché la même page à la même milliseconde).

    En sus, une très petite table et qui le restera toujours (exemple, table des sexe, des civilités) sera en principe plus rapide sans aucune clef ni index, car il n'y aura jamais lecture que d'une page, alors qu'avec un index ce sera un minimum de deux !

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

  4. #4
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Citation Envoyé par dbaffaleuf Voir le message
    Et un SGBD ne peut pas contraindre un développeur à mettre des clés primaires partout, il y a des cas où ça n'a pas de sens (certaines tables de logs).
    Je comprends parfaitement ton point de vue. Et je le partage.
    Même pour une table de logs je dirai comme toi "ça dépend !"
    Quelques soit le niveau du log, je pense que les tables de logs d'application grossissent vite si elles ne sont pas purgées. Et si on utilise ces tables de logs pour faire du reporting, ou rechercher (ou étudier) un évènement particulier sur une période donnée. ça peut être utile d'avoir un PK ?
    Etienne ZINZINDOHOUE
    Billets-Articles

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Points : 1 069
    Points
    1 069
    Par défaut
    Ce sont les traitements qui pilotent les choix d'indexation, donc oui.
    David B.

  6. #6
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Le fait de faire des tables sans clef à été spécifiquement pensé pour la reprise des données. En effet rien ne dit que l'on a pas des doublons dans des fichiers... Or traiter un fichier est souvent plus long que de le faire dans les lignes d'une table.

    C'est pourquoi, oui, des tables sans clef sont utile notamment pour des imports voire des exports, voire des tables de log (exemple table de hit d'un site web ou 2 utilisateur peuvent avoir affiché la même page à la même milliseconde).

    En sus, une très petite table et qui le restera toujours (exemple, table des sexe, des civilités) sera en principe plus rapide sans aucune clef ni index, car il n'y aura jamais lecture que d'une page, alors qu'avec un index ce sera un minimum de deux !

    A +
    100 % d'accord. Et c'est logique.

    Dans ces conditions on peut donc s’asseoir sur les règles de la normalisation ?
    Etienne ZINZINDOHOUE
    Billets-Articles

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par zinzineti Voir le message
    100 % d'accord. Et c'est logique.
    Dans ces conditions on peut donc s’asseoir sur les règles de la normalisation ?
    Pour les progiciels qui utilisent ce genre de principe - pas de pk ni de fk - c'est vraisemblablement plus du à une ignorance totale de la conception de BD qu'à une réflexion profonde...
    Du bricolage de stagiaire du prototype qui perdure car les priorités du développement sont ailleurs...
    J'en ai un très beau exemple dans mes bds et c'est une horreur à manipuler car ça craque de partout!

  8. #8
    Membre émérite

    Homme Profil pro
    Chargé de Développement et d'Analyse de données
    Inscrit en
    Mars 2010
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé de Développement et d'Analyse de données
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2010
    Messages : 1 278
    Points : 2 856
    Points
    2 856
    Par défaut
    Citation Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
    Pour les progiciels qui utilisent ce genre de principe - pas de pk ni de fk - c'est vraisemblablement plus du à une ignorance totale de la conception de BD qu'à une réflexion profonde...
    Du bricolage de stagiaire du prototype qui perdure car les priorités du développement sont ailleurs...
    J'en ai un très beau exemple dans mes bds et c'est une horreur à manipuler car ça craque de partout!
    C'est justement ce même constat qui m'a motivé à écrire le billet "Montre-moi tes tables et je te dirai ce que vaut ta base ..."
    Etienne ZINZINDOHOUE
    Billets-Articles

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Points : 1 069
    Points
    1 069
    Par défaut
    Citation Envoyé par zinzineti Voir le message
    Dans ces conditions on peut donc s’asseoir sur les règles de la normalisation ?
    Il faut s'asseoir dessus quand ça ne vaut pas le coup, c'est à dire dans les cas isolés que Frédéric a évoqué. Pour le reste, ce n'est pas normal qu'une table métier dans un modèle relationnel n'ait pas été passée à la 1FN.
    David B.

  10. #10
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 314
    Points
    13 314
    Par défaut
    Citation Envoyé par zinzineti Voir le message
    Et si on utilise ces tables de logs pour faire du reporting, ou rechercher (ou étudier) un évènement particulier sur une période donnée. ça peut être utile d'avoir un PK ?
    Ca peut être utile d'avoir un index, mais pas forcément une PK.

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  11. #11
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 770
    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 770
    Points : 52 726
    Points
    52 726
    Billets dans le blog
    5
    Par défaut
    Non ce serait plutôt le contraire, car sans PK => doublons et supprimer les doublons est une horreur ! Voir impossible sans changer la structure de la table....

    Or une PK créé un index...

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

Discussions similaires

  1. Table sans elemnt en sous table
    Par talere dans le forum Langage SQL
    Réponses: 4
    Dernier message: 22/12/2005, 17h11
  2. Regrouper les infos de deux table sans jointure
    Par ricobye dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/07/2005, 09h30
  3. [sql] afficher deux champs de deux tables sans jointure
    Par Hell dans le forum Langage SQL
    Réponses: 6
    Dernier message: 30/06/2005, 12h38
  4. exporter une table sans le nom de colonnes ?
    Par vuldos dans le forum Access
    Réponses: 13
    Dernier message: 11/10/2004, 19h56
  5. Lister le contenu d'une table sans connaitre ses champs
    Par Google.be dans le forum PostgreSQL
    Réponses: 9
    Dernier message: 30/03/2004, 15h23

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