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

MS SQL Server Discussion :

[SQL2008][SQL2012] Select From With(NoLock)


Sujet :

MS SQL Server

  1. #21
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 205
    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 205
    Billets dans le blog
    16
    Par défaut
    Bonsoir,


    Citation Envoyé par dodidam Voir le message
    j'aurais voulu savoir quelles conséquences avez-vous pu observer de l'utilisation du marqueur NULL au sein des bases de données ?
    Dans les applications archi testées je n’ai pas observé de bugs flagrants produits par les SGBD que j’ai secoués. Cela dit, je modélise de telle sorte que chaque colonne de chaque table de chaque base de données soit accompagnée de la clause NOT NULL. Mais je n’ai pas accès aux « relations » intermédiaires créées sous le capot à partir d’une requête puisque le SGBD ne montre pas la structure de leur en-tête et je croise les doigts avant de valider la relation finale fournie en résultat. Ces « relations » intermédiaires doivent être de même nature que celles dont elles sont issues, leurs parents — sinon elles relèveraient de la tératologie —, on appelle cela le principe de fermeture, mais je ne suis pas bien sûr que les fabricants de SGBD aient clairement cela en tête.

    Si vous vous reportez ici (après la photo de Naf-Naf) aux paragraphes traitant des tables de vérité en logique trivaluée (celle de SQL) relatives au conditionnel SI p ALORS q, (qui se ramène à (NON p) OU q) et au biconditionnel p SI ET SEULEMENT SI q, on voit que l’optimiseur du SGBD peut fournir des résultats faux. Pour approfondir, je vous renvoie aux ouvrages de Date et Darwen, par exemple Date on Database: Writings 2000-2006, au chapitre 18 « Why three - And four-valued logic don’t work ».

    Je rappelle en passant que le théorème de Heath ne vaut plus quand NULL est présent, alors que ce théorème est au cœur de la décomposition des schémas de relation : la décomposition d’une relation n’est plus sans perte.

    Je rappelle aussi que les colonnes appartenant au schéma d’une table permettent de construire le prédicat de cette table. Ainsi, à partir de l’instruction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TABLE PERSONNE
    (
            PsnId        INT            NOT NULL
          , PsnNom       VARCHAR(48)    NOT NULL
          , PsnTel       VARCHAR(24)    NOT NULL
        , CONSTRAINT PSN_PK PRIMARY KEY (PsnId)
    ) ;
    On déduit le prédicat à trois places (paramètres) :
    La personne PsnId a pour nom PsnNom et pour téléphone PsnTel.

    Mais qu’advient-il si la colonne PsnTel de la table PERSONNE peut être marquée NULL ? On a affaire à un autre prédicat, à seulement deux places cette fois-ci :
    La personne PsnId a pour nom PsnNom, elle a peut-être le téléphone, mais nous ne savons rien à ce sujet.
    Or le prédicat d’une variable relationnelle (relvar, informellement table) ne peut être à la fois à deux et à trois places (sauf à l’asile de fous ou dans un monde quantique). En vertu de quoi, la table PERSONNE est à décomposer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CREATE TABLE PERSONNE
    (
            PsnId        INT            NOT NULL
          , PsnNom       VARCHAR(48)    NOT NULL
        , CONSTRAINT PSN_PK PRIMARY KEY (PsnId)
    ) ;
    CREATE TABLE TELEPHONE
    (
            PsnId        INT            NOT NULL
          , PsnTel       VARCHAR(24)    NOT NULL
        , CONSTRAINT PSN_PK PRIMARY KEY (PsnId)
    ) ;
    D’où le prédicat relatif à la table PERSONNE :
    (P1) La personne PsnId a pour nom PsnNom.
    Et le prédicat relatif à la table TELEPHONE :
    (P2) La personne PsnId a pour téléphone PsnTel.


    Sinon, je retiens que NULL est collant, tel un bout de scotch au bout du doigt et dont on n’arrive pas à se débarrasser : on est obligé d’utiliser des fonctions ad-hoc pour bricoler et éviter les pièges : COALESCE, NULLIF, IS NULL, ...

    Revoyez la discussion à propos de « Sum(X+Y) = Sum(X) + Sum(Y) ? ».
    Un sympathique point d’orgue offert ici par J1 est édifiant et significatif, car on y voit que NULL ça peut être de la dynamite à ne pas confier à des mains inexpérimentées.

    Ceux qui font la norme SQL (voyez ici) arrivent à se vautrer lamentablement en établissant une équivalence entre la valeur de vérité UNKNOWN et NULL qui n’est pas une valeur ! Au royaume des NULL...

    Bref, à la manière de Fernand Naudin (in Les tontons flingueurs), je dirais que le bonhomme NULL me les brise menu...
    (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.

  2. #22
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 205
    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 205
    Billets dans le blog
    16
    Par défaut
    Bonjour,


    Que CinePhil me pardonne, j’ai omis de remonter d’un cran, c'est-à-dire traduire la possession facultative d'un téléphone sous la forme d’une règle de gestion gravée dans le marbre du dossier de conception :

    (RG314) Une personne est en possession d’au plus un téléphone et un téléphone est la possession exclusive d’exactement une personne :

    [PERSONNE ]--0,1----(POSSEDER)----(1,1)--[TELEPHONE]

    D’où la traduction en SQL :

    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
     
    CREATE TABLE PERSONNE
    (
            PsnId        INT            NOT NULL
          , PsnNom       VARCHAR(48)    NOT NULL
        , CONSTRAINT PSN_PK PRIMARY KEY (PsnId)
    ) ;
    CREATE TABLE TELEPHONE
    (
            PsnId        INT            NOT NULL
          , PsnTel       VARCHAR(24)    NOT NULL
        , CONSTRAINT PSN_PK PRIMARY KEY (PsnId)
        , CONSTRAINT TEL_PSN_FK FOREIGN KEY (PsnId) REFERENCES PERSONNE (PsnId)
              ON DELETE CASCADE
    ) ;
    Noter la contrainte référentielle TEL_PSN_FK et, en particulier la présence de l’action compensatoire CASCADE : un téléphone ne peut pas s’opposer à la suppression de son propriétaire et disparaît donc avec celui-ci (conséquence de la possession exclusive). Le dossier de conception doit tenir compte de cette situation, c'est-à-dire ne pas se limiter à l’anatomie et prendre en compte un minimum de métabolisme des données, d’où l’aménagement de la règle de gestion :

    (RG314) Une personne est en possession d’au plus un téléphone et un téléphone est la possession exclusive d’exactement une personne ; la suppression d’une personne entraîne celle de son téléphone.
    (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.

  3. #23
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 12
    Par défaut Réponse.
    Bonsoir,

    Merci beaucoup pour ces explications.

  4. #24
    Membre éclairé
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 497
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    (...)
    2) NOLOCK est très dangereux car il peut lire deux fois les mêmes lignes ou sauter des lignes200 verrous c'est ridicule (...)
    Bonjour,

    Ok la dessus mais bon apres la dangerosite depend de l'application qui attends les donnees. Certaines applications prefereront un temps de reponse plus cours avec des donnees moins fiable... Ce qui est le cas avec l'erp sur lequel je travaille...

  5. #25
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fsmrel Voir le message
    Si tel est le cas, puisqu’une personne ne vient pas non plus au monde avec un numéro de sécurité sociale, alors ce numéro ne peut pas non plus être une caractéristique de la personne et doit donc à son tour faire l’objet d’un type d’entité ad-hoc.
    J'ai inscrit ma fille sur ma carte Vital lorsqu'elle avait 2 jours.
    Elle a un numéro de sécurité sociale depuis ce jour.

    Donc certes, elle est pas née avec une carte Vital dans les fesses, mais presque...

    Ensuite, je pense que vous cherchez la petite bête.
    Rien que dans la carte SIM d'un téléphone, où 100% des contacts on un numéro de téléphone, on se rend compte que :
    - Un même contact peut avoir plusieurs numéros de téléphone, et on a donc des doublons "Estelle M", "Olivier P", "Olivier T"... et c'est tout de suite hyper pratique pour savoir si "M" ça veut dire "Maison", "Mobile", "Mari"
    - Plusieurs contacts peuvent avoir le même numéro de téléphone, et on a donc des doublons "Estelle" et "Ludovic" on le même numéro, et vu qu'on est faignant, on n'en a enregistré qu'un, et on se demande à chaque fois si c'est Estelle ou Ludovic qui est enregistré...

    Donc un numéro de téléphone est bel et bien totalement indépendant de l'entité "personne", quelle que soit le besoin fonctionnel.
    Même pour une base d'abonnements de téléphone, on peut avoir plusieurs numéros de lignes attribuées à un même client.

  6. #26
    Expert éminent
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 205
    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 205
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    Donc un numéro de téléphone est bel et bien totalement indépendant de l'entité "personne", quelle que soit le besoin fonctionnel.
    Sophisme. Relisez ce que j’ai écrit. Essayez de comprendre qu’il n’y a pas d’absolu en matière de modélisation. Tout dépend de l’univers du discours, c'est-à-dire du SI (système d’information) que l’on modélise. Par exemple, du temps où j'intervenais chez certains opérateurs téléphoniques, un téléphone ne correspondait effectivement pas à une simple information, il était élevé au rang d'entité-type forte, en relation avec un abonné (c'est-à-dire pas totalement indépendant contrairement à ce que vous écrivez).

    Par contre, chez telle association où je suis adhérent, on ne s'occupe pas de téléphones, mais d'adhérents que l'on conseille.
    En même temps que le nouvel adhérent, son numéro de téléphone naît avec lui dans le système, et quand un adhérent est supprimé, par voie de conséquence son numéro de téléphone disparaît aussi (ou ses numéros s’il en a plusieurs) : dans ce contexte (cet univers), un numéro de téléphone n’est jamais qu’une propriété (mono ou multivaluée) de l’entité-type Adhérent, au même titre qu'une ligne de facture est une propriété de la facture.

    Il en va des téléphones comme des prénoms : pour tel SI, le nom et le prénom des personnes sont des propriétés de l’entité-type Personne, pour tel autre SI ça n’est pas le cas. J’ai par exemple souvenir d’une entreprise de vente par correspondance pour laquelle le prénom des clientes était une entité-type très importante (univers du discours oblige) et le DSI serait monté sur ses grands chevaux si j’avais ravalé le prénom au rang de propriété de la cliente. Toute la nuit les imprimantes crachaient du courrier du genre : « Chère Monique, c’est votre fête et c’est avec plaisir que je vous fais parvenir ce petit cadeau... » ; c’était dans les années soixante-dix et depuis le système a sans doute été bien aménagé du fait des (r)évolutions technologiques, mais sur le fond le principe a dû rester le même.
    (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.

  7. #27
    Membre éclairé
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 497
    Par défaut
    Citation Envoyé par StringBuilder Voir le message
    J'ai inscrit ma fille sur ma carte Vital lorsqu'elle avait 2 jours.
    Elle a un numéro de sécurité sociale depuis ce jour.
    Non elle a un numero INSEE depuis sa naissance. Elle a par contre le meme numero de secu social que le tien tant qu'elle t'es rattache a moins que la loi est change dernierement...

  8. #28
    Expert confirmé
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 4 197
    Billets dans le blog
    1
    Par défaut
    Sur mon attestation de droits, elle apparaît bien comme ayant un code SECU.

    La gestion des numéros de SECU a évolué. Il y a quelques années, un enfant avait le numéro de SECU de son père jusqu'à ses 15 ou 16 ans (date à laquelle il a son propre dossier à la SECU).

    Mais maintenant on choisi si son code est rattaché au père, à la mère ou aux deux.

    C'est d'ailleurs notre choix, et elle apparaît aussi sur la carte de sa mère (c'est donc sacrément plus simple quand elle doit l'emmener chez le médecin sans moi !)

    En pièce jointe l'attestation de droits en question (ne me demande pas ce que je fous avec au boulot).
    Images attachées Images attachées  

Discussions similaires

  1. [COUNT] select ... from ... where count !
    Par tmcgrady dans le forum Langage SQL
    Réponses: 5
    Dernier message: 30/11/2007, 17h29
  2. SELECT * FROM (Transform...pivot...)... ???
    Par davidso dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 20/01/2006, 18h04
  3. Réponses: 5
    Dernier message: 31/10/2005, 13h25
  4. un SELECT FROM ????
    Par tarik75 dans le forum Langage SQL
    Réponses: 18
    Dernier message: 17/07/2005, 12h04
  5. Equivalent du Select * from ::Fn_Fonction()
    Par WOLO Laurent dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 09/07/2004, 09h48

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