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

Optimisations SGBD Discussion :

Conseil clé primaire pour les meilleurs performances ?


Sujet :

Optimisations SGBD

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 36
    Points : 32
    Points
    32
    Par défaut Conseil clé primaire pour les meilleurs performances ?
    Salut,

    Je désirerais avoir un conseil sur le choix de clé primaire.
    Par ex:
    Il préférable d'avoir
    1. une clé primaire naturelle
    table CLIENT (
    code_cli (alphanumérique) clé primaire
    libellé_cli
    ...
    )
    ou
    2. une clé primaire auto et clé primaire qui ne sera pas employé (code_cli)
    table CLIENT (
    id_cli (numérique) clé primaire
    code_cli (alphanumérique)
    libellé_cli
    ...
    )

    Est ce que point de vue vitesse cela change ou autre performance ?
    Faites moi part de vos avis car j'ai lu plusieurs documents et ce n'est pas trop clair.

    Merci
    Ites

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    il est toujours plus rapide de mettre une clée primaire sur un champ numérique qu'un champ alpha numérique : rapidité de comparaison, de tri, etc...
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag (en bas)

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 124
    Points : 159
    Points
    159
    Par défaut
    Dans le second cas, tu dis que code_cli n'est pas utilisé alors pourquoi ne pas le supprimer et laisser uniquement la PK auto-incrémentée?

    Il faut le mettre s'il t'arrive de l'afficher ou de l'imprimer dans ton application et dans ce cas-ci il est employé.

    Enfin bref, moi je crois que le plus simple c'est de mettre systématiquement une clé primaire dans les tables, à part peut-être dans celles qui ne servent que de liaison entre 2 tables (tables associatives).

  4. #4
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Pour moi c'est plus un choix de conception qu'un strict point de vue de performance ...



    2. une clé primaire auto et clé primaire qui ne sera pas employé (code_cli)
    table CLIENT (
    id_cli (numérique) clé primaire
    code_cli (alphanumérique)
    libellé_cli...
    Attention par définition une table n'a qu'une clé primaire ...

    Si on a un identifiant naturel, il a de fortes chances d'être utilisé dans des recherches (alors que l'exemple semble curieusement dire le contraire ...) et donc d'être présent dans un index secondaire. Avec l'utilisation d'un identifiant automatique on risque de se retrouver avec deux index, ce qui n'est pas forcément top pour les performances en insertion ...

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 36
    Points : 32
    Points
    32
    Par défaut
    Merci pour toutes vos réponses

    Ites

  6. #6
    Membre confirmé Avatar de Monstros Velu
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 619
    Points : 601
    Points
    601
    Par défaut
    Je te conseille de lire cet article de SQLPro : http://sql.developpez.com/clefs/

    Les 2 premiers paragraphes expliquent tout d'abbord quelles sont les qualités d'une clef, et pourquoi il faut éviter les clefs naturelles, et donc répondra à ta question. Ce qui n'empêche pas de lire la suite de l'article qui est fort interressant ;o)

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    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 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    Pour compléter mon propre papier, toute clef autre qu'un entier de la longueur du mot du processeur est par nature moins performante.
    Par exemple un CHAR(32) sera à peu près 16 fois moins performant qu'un entier...
    Quant au VARCHAR(32) si tout va bien il peut être 16 à 16 * n moins performant (n étant le nombre de ligne de la table). Donc dans le pire des cas dans une table de 1000 lignes, il pourra être 16000 fois moins performant qu'un entier...

    C'est pas rien !

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

  8. #8
    Membre régulier Avatar de Arvulis
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 117
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par Monstros Velu
    Je te conseille de lire cet article de SQLPro : http://sql.developpez.com/clefs/

    Les 2 premiers paragraphes expliquent tout d'abbord quelles sont les qualités d'une clef, et pourquoi il faut éviter les clefs naturelles, et donc répondra à ta question. Ce qui n'empêche pas de lire la suite de l'article qui est fort interressant ;o)


    Bon article !

    D'ailleurs SQLPRO, tu peux rajouter le concepts des Séquences sous Oracle

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    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 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    D'ailleurs SQLPRO, tu peux rajouter le concepts des Séquences sous Oracle
    je l'évoque en point 4 mais j'ai choisit de montrer celui d'Interbase (très proche).

    Sachez que la norme SQL:2003 à standardisé l'usage à la fois du IDENTITY et de l'objet SEQUENCE.

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

  10. #10
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Si on choisit on clé primaire "non naturelle" (une clé numérique par exemple) comme clé primaire faudra-t-il lui associer un index (au sens CREATE INDEX) pour en assurer l'unicité ?

  11. #11
    Membre régulier Avatar de Arvulis
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 117
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par SQLpro
    je l'évoque en point 4 mais j'ai choisit de montrer celui d'Interbase (très proche).

    Sachez que la norme SQL:2003 à standardisé l'usage à la fois du IDENTITY et de l'objet SEQUENCE.

    A +

    Oki merci, je ne savais pas, pour la normalisation

    Ce tuto est du bon boulot en tout cas.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 36
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par Monstros Velu
    Je te conseille de lire cet article de SQLPro : http://sql.developpez.com/clefs/

    Les 2 premiers paragraphes expliquent tout d'abbord quelles sont les qualités d'une clef, et pourquoi il faut éviter les clefs naturelles, et donc répondra à ta question. Ce qui n'empêche pas de lire la suite de l'article qui est fort interressant ;o)
    Merci pour l'article

  13. #13
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    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 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    Si on choisit on clé primaire "non naturelle" (une clé numérique par exemple) comme clé primaire faudra-t-il lui associer un index (au sens CREATE INDEX) pour en assurer l'unicité ?
    Pas un index, mais une contrainte SQL d'unicité. l'un n'empêche pas l'autre... mais la clef candidate peut ne pas être valuée au moment de l'insertion. Or la norme SQL prévoir qu'une contrainte UNIQUE peut avoir plusieurs lignes à NULL ce qui est normal car NULL = NULL est toujours faux !

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

  14. #14
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par SQLpro
    Pas un index, mais une contrainte SQL d'unicité. l'un n'empêche pas l'autre...
    Et comment le SGBD va-t-il assurer l'unicité de manière performante ?
    Ben ... par un index évidemment ...

  15. #15
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonsoir SQLpro,


    Désolé de revenir sur un point traité il y a un moment, mais vous me connaissez, je ne peux pas m’empêcher...

    Citation Envoyé par SQLpro
    Or la norme SQL prévoir qu'une contrainte UNIQUE peut avoir plusieurs lignes à NULL
    Donc, concernant cette contrainte UNIQUE, SQL Server 2005 ne serait-il pas un tantinet délinquant par rapport à la norme ? Je cite :

    UNIQUE :
    Contrainte fournissant à l'aide d'un index unique l'intégrité d'entité pour une ou plusieurs colonnes spécifiques. Les colonnes d'une contrainte UNIQUE peuvent être NULL, mais une seule valeur NULL est autorisée par colonne.
    Par ailleurs, SQL Server n’assure pas l’intégrité d’entité, contrairement à ce qu’il prétend, mais seulement une contrainte d’unicité car, par définition l’intégrité d’entité interdit les valeurs nulles.

    En outre, mêler conceptuel (intégrité d’entité) et physique (index, tuyauterie pour booster les performances) relève de la confusion mentale. Je rappelle que le terme "index" est étranger au Modèle Relationnel de Données et Ted Codd est clair à ce sujet :
    In the context of the relational model this coupling with the DBMS of semantic properties of the data with performance in making index decisions is an abuse of the index concept and a DBMS design error. Uniqueness of values within any column should be specified as one of the properties of that column, not as a property of any index ("The Relational Model for Database Management: Version 2 (Reading, Mass.: Addison-Wesley, 1990", page 162).
    (Ceci relève de l’indépendance physique).


    Citation Envoyé par SQLpro
    NULL = NULL est toujours faux !
    Vraiment ?

    Je cite Codd à nouveau :
    What is the truth value of x = y if x or y or both are null? An appropriate result in each of these cases is the unknown truth value, rather than true or false. ("Extending the Database Relational Model to Capture More Meaning, 1979", paragraphe 2.3 "Extensions of the Algebra for Null Values").
    Je fais aussi référence à Chris Date, qui va plus loin. Date rappelle qu’en logique binaire, il y a deux valeurs de vérité : true et false et qu’en logique ternaire, elles sont trois, true, false et unk, et que dans ces conditions, si v est une variable logique dont la valeur de vérité est unk, alors "v = v" donne true. En revanche, comme dans ce qu’expose Codd, si la valeur de vérité de v est inconnue, alors "v = v" donne unk ("Relational Database Writings 1985-1989 (Reading, Mass.: Addison-Wesley, 1990", page 224).
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  16. #16
    Membre expérimenté

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 249
    Points : 1 745
    Points
    1 745
    Par défaut précision.
    Tout ce que tu dis est peut être valable pour la version standard mais le lien que tu aurais du fournir est le suivant :
    http://msdn2.microsoft.com/fr-fr/library/ms174979.aspx

    UNIQUE Contrainte assurant l'intégrité d'entité d'une ou plusieurs colonnes spécifiées au moyen d'un seul index. Une table peut comprendre plusieurs contraintes UNIQUE.

  17. #17
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonsoir,

    Citation Envoyé par ylarvor
    Tout ce que tu dis est peut être valable pour la version standard mais le lien que tu aurais du fournir est le suivant :
    http://msdn2.microsoft.com/fr-fr/library/ms174979.aspx
    Je ne connais malheureusement pas tous les liens MSDN, mais peu importe, j'accède donc bien volontiers à la rubrique proposée et je lis :

    UNIQUE
    Contrainte assurant l'intégrité d'entité d'une ou plusieurs colonnes spécifiées au moyen d'un seul index.
    Je répète que mêler conceptuel (intégrité d’entité) et physique (index, tuyauterie pour booster les performances) relève de la confusion mentale. Le terme "index" est étranger au Modèle Relationnel de Données et ce que dit Codd à ce sujet continue à s’appliquer aux SGBD, quels qu'ils soient.

    Je lis à la suite :
    Une table peut comprendre plusieurs contraintes UNIQUE.
    Cette phrase ne figure pas dans l’énoncé que j’ai mis en cause, et elle est tout à fait pertinente ! En effet, on doit pouvoir définir librement des clés alternatives, ce dont je fais personnellement une assez grande consommation.

    Maintenant, si partant du lien proposé en citation, on clique sur Contraintes, puis sur Contraintes UNIQUE, on retrouve le couplet sur l’unicité de la valeur nulle :
    contrairement aux contraintes PRIMARY KEY, les contraintes UNIQUE autorisent la valeur NULL. Cependant, comme pour toute valeur participant à une contrainte UNIQUE, une seule valeur NULL est autorisée par colonne.
    N'étant pas personnellement adepte des valeurs nulles, je ne suis donc pas concerné par ce qu'écrit le rédacteur de la documentation en ligne de SQL Server 2005. Quoi qu’il en soit, les énoncés des différentes documentations ne sont pas contradictoires, ce qui est heureux ! Et en plus elles arrivent à se compléter...
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  18. #18
    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 801
    Points
    30 801
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    NULL = NULL est toujours faux !
    Non !
    On peut dire que NULL = NULL n'est jamais VRAI, éventuellement, mais il n'est jamais FAUX non plus, puisque que NULL = NULL est UNKNOWN
    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.

  19. #19
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par al1_24
    On peut dire que NULL = NULL n'est jamais VRAI, éventuellement, mais il n'est jamais FAUX non plus, puisque que NULL = NULL est UNKNOWN
    Vous êtes donc en phase avec MM. Codd, D & D (alias Date & Darwen, ou Dupond & Dupont, comme vous voudrez) que j'avais cités dans un précédent message concernant la formule NULL = NULL.

    Les SGBDR sont aussi tous en phase sur ce point (au moins peut-on l’espérer...) Par exemple, comparons le salaire et la commission d’un employé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Select EmpId, Salaire, Commission, 
                   Case 
                      When Salaire = Commission Then 'Oui'
                      When Not (Salaire = Commission) Then 'Non' 
                      Else 'Joker !'    
                   End
                   AS 'Salaire = Commission ?' 
    From   Emp
    Si pour un employé le salaire et la commission sont à NULL, à la question "Salaire = Commission ?" La réponse est : "Joker !" (même chose du reste dès que Salaire ou bien Commission sont à NULL).

    Ceci met en évidence l’erreur de résultat que produirait la requête suivante, selon laquelle on raisonne binairement dans le contexte d'une logique ternaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Select EmpId, Salaire, Commission, 
                   Case 
                      When Salaire = Commission Then 'Oui'
                      Else 'Non'    
                   End
                   AS 'Salaire = Commission ?' 
    From   Emp
    Voire celle-ci, selon laquelle si un employé a un salaire de 1000 et une commission à NULL, le salaire est égal à la commission...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Select EmpId, Salaire, Commission, 
                   Case 
                    When Salaire <> Commission Then 'Non'
                    else 'Oui'    
                   end
                   AS 'Salaire = Commission ?'
    From   Emp
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  20. #20
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    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 768
    Points : 52 719
    Points
    52 719
    Billets dans le blog
    5
    Par défaut
    fmsrel
    Donc, concernant cette contrainte UNIQUE, SQL Server 2005 ne serait-il pas un tantinet délinquant par rapport à la norme ?
    Oh que oui, et c'est le principal point qui me fait chier avec SQL Server ! Cela oblige a faire un index et un trigger...

    Sur NUL = NULL est faux...
    OK, cela donne UNKNOWN, mais le UNKNOWN se comporte comme faux dans tous les cas (NOT ou pas).

    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. Quel choix pour de meilleures performances ?
    Par vince29 dans le forum Zend_Db
    Réponses: 6
    Dernier message: 20/07/2011, 23h13
  2. Réponses: 4
    Dernier message: 28/04/2009, 12h38
  3. [JpGraph] Besoin de conseil/Tuto/aide pour les canevas Jpgraph
    Par titou_777 dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 23/03/2009, 13h48
  4. Taille du transaction.log pour les meilleures performances
    Par Tartenpion dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 25/10/2006, 14h52

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