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 :

[Commentaires] Qu'est-ce qu'il manque selon vous à SQL-Server ?


Sujet :

MS SQL Server

  1. #1
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    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 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut [Commentaires] Qu'est-ce qu'il manque selon vous à SQL-Server ?
    *** Ce sujet permet de commenter les choses qui manquent selon vous à SQL-Server, issues de ce sujet :
    http://www.developpez.net/forums/d10...lon-sql-server


    Citation Envoyé par zoltix Voir le message
    Dans l’algèbre SQL la différence.
    L'opération de différence existe. Simplement au lieu d'être appelée DIFFERENCE ou, comme dans l'algèbre relationnelle, MINUS, conformément à la norme SQL elle est appellée EXCEPT.
    (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. #2
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    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 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Pour ma part, je commencerai par la déférabilité des contraintes !
    Par rapport à la norme SQL, vous avez bien raison. Mais l’application différée des contraintes prônée par la norme n’est une bonne chose. Au nom de la garantie de l’intégrité des données, il est de loin préférable que tout se passe au sein d’un bloc d’instructions (multiple assignment), comme dans l’exemple ici.

    Pour les motifs profonds de la disqualification des contrôles différés, reportez-vous par exemple à l’ouvrage SQL and Relational Theory, pages 171 et suivantes.
    (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. #3
    Membre éprouvé Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Points : 1 104
    Points
    1 104
    Par défaut
    Citation Envoyé par elsuket Voir le message
    Le type bit répond à cela, et il est normal qu'il puisse être à NULL.
    Non. L'implémentation d'un type Booléen implique des conséquences plus profondes et très utiles comme l'explique Chris Date.

    La requête suivante retourne une valeur de type entier :
    De la même manière il devrait être possible de retourner directement dans la clause SELECT une valeur booléenne, qui serait le résultat d'une expression.. booléenne donc.
    Il devrait être possible d'écrire les requêtes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT EXISTS (
      SELECT * FROM msdb.sys.databases WHERE name='nomBdd'
    )
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM maTable
    WHERE maFonction(uneColonne);
    On pourrait imaginer que cette valeur booléenne soit directement utilisée dans nos langages de programmation (qui supportent un vrai type booléen) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    IF(maRequêteSQL) {
    -- traitement si TRUE
    } ELSE {
    -- traitement si FALSE
    }

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    OK, j'y vois un peu plus clair dans votre expression.

    Je suis d'accord sur l'addition, qui devrait provoquer une erreur.

    En revanche sur l'EXISTS d'une requête, je pense (à tort peut-être !) que c'est un prédicat, donc je trouve normal que votre exemple ne fonctionne pas.

    L'exemple d'utilisation de ISNUMERIC() que vous donnez fonctionne et retourne bien 1.

    Idem pour la clause WHERE avec une fonction, définie par l'utilisateur ou native.
    En revanche c'est assez contre-performant.

    Merci pour la référence au livre de Chris Date, je vais m'empresser de me le procurer.

    @++

  5. #5
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    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 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonsoir,

    Citation Envoyé par elsuket Voir le message
    Le type bit répond à cela
    Hum...

    Je cite la référence SQL Server à propos du type BIT :
    « An integer data type that can take a value of 1, 0, or NULL. »

    Pour sa part, Oishiiii a fait mention d’un vrai type booléen (BOOLEAN). Que je sache, d’après la citation ci-dessus, le type BIT n’est jamais qu’une spécialisation du type INT, avec lequel on passe de la logique des prédicats à un simulacre, à un ersatz, à de l’épicerie.

    NULL (que par ailleurs l’auteur de la référence considère comme une valeur, alors que ça n’est qu’une marque !) ne fait pas partie des valeurs possibles pour le type booléen, qui sont limitées à TRUE, FALSE, point barre. La norme autorise pour sa part TRUE, FALSE, UNKNOWN, mais je n’entrerai pas dans la polémique, je l’ai fait assez souvent chez DVP.

    Par ailleurs, il y a du mou dans la corde à nœuds avec ce type BIT, car si je code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    CREATE TABLE A
    (
          COLA    BIT
       ,  COLB    CHAR(1)
    ) ;
     
    INSERT INTO A VALUES (0, 'A') ;
    INSERT INTO A VALUES (3.14, 'B') ;
     
    SELECT * FROM A
    WHERE COLA = 'TRUE' ;
    Le résultat fourni est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    COLA    COLB
    ----    ----
       1    B
    Or je ne sache pas que 3.14 = 1.

    Quand l’auteur de la référence écrit :
    « The string values TRUE and FALSE can be converted to bit values: TRUE is converted to 1 and FALSE is converted to 0. »
    Il a tout faux, car il y a conversion non pas de TRUE et FALSE mais de 'TRUE' et 'FALSE', qui ne sont pas des valeurs de type booléen, mais de type chaîne de caractères. On nage dans l’approximation (l'arnaque ?) la plus totale.

    Encore un mot à propos de la norme SQL :
    « The data type boolean comprises the distinct truth values True and False. Unless prohibited by a NOT NULL constraint, the boolean data type also supports the truth value Unknown as the null value. This specification does not make a distinction between the null value of the boolean data type and the truth value Unknown that is the result of an SQL <predicate>, <search condition>, or <boolean value expression>; they may be used interchangeably to mean exactly the same thing. »
    Vous avez bien lu ? Selon la norme, il revient au même de dire : « Je ne sais pas » et « Je sais que l’information est absente » ! Etc.
    (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.

  6. #6
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    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 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par zinzineti Voir le message
    S'il y a une suggestion à faire à MS à propos de SQL SERVER c'est d'abord et avant tout de commencer par corriger les anomalies remontées par les utilisateurs.
    Très bon préambule
    (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. #7
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Merci fmsrel.
    En fait je ne me suis jamais rendu compte de ces anomalies parce que je maintiens mes bases de données de façon très stricte.

    Même si ce genre d'anomalies devrait plutôt générer une erreur que "passer", je pense qu'elles relèvent plus d'une mauvaise utilisation de SQL Server donc bien des éditeurs profitent ou ont demandé à profiter ...

    Pourquoi cette course aux versions ? Parce que pour vendre des lames de rasoir comme des logiciels, il faut y ajouter (ou faire croire qu'on y a ajouté, ce qui est plus vrai dans le cas des lames de rasoir ) de nouvelles fonctionnalités

    @++

  8. #8
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    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 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    De rien Nicolas,


    Citation Envoyé par elsuket Voir le message
    je ne me suis jamais rendu compte de ces anomalies parce que je maintiens mes bases de données de façon très stricte.
    Ce dont on ne peut que vous féliciter. Confidence pour confidence, je n’avais jamais utilisé le type BIT et du coup je l’ai testé en tapant n’importe quoi, histoire de voir le genre de message d’erreur produit... Quelle ne fut pas ma surprise !
    (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.

  9. #9
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Je n'en doute pas

    Pour en revenir à un exemple donné par Oishiiii, SELECT 1+1 retourne 2, puisque ces deux entiers sont considérés en tant que tel (=> int)

    En revanche, si l'on exécute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CAST(1 AS bit) + CAST(1 AS bit)
    Nous obtenons :

    Msg 8117, Level 16, State 1, Line 1
    Operand data type bit is invalid for add operator.
    Enfin, pour reprendre l'exemple de fmsrel, et là est un gros problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT CAST(3.14 AS bit)
    retourne 1, et ça, c'est très moche

    @++

  10. #10
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Est ce qu'on va attendre encore 10 ans pour mettre des TRY ...CATCH dans les UDFs (CREATE FUNCTION ....) ?
    Je ne suis pas d'accord là-dessus.
    Une fonction retourne une valeur, et par là même est susceptible d'être appelée dans une requête.
    C'est donc pour cela qu'il n'y a pas de gestion d'erreur faisable dans les fonctions.

    @++

  11. #11
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Citation Envoyé par fsmrel Voir le message
    Par rapport à la norme SQL, vous avez bien raison. Mais l’application différée des contraintes prônée par la norme n’est une bonne chose. Au nom de la garantie de l’intégrité des données, il est de loin préférable que tout se passe au sein d’un bloc d’instructions [...]
    Est-ce que les contraintes déférées posent un vrai problème, puisqu'elles sont fort heureusement toujours contrôlées lors de la fin de la transaction ?

    Vérifions avec Oracle :
    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
    31
    create table t1_master
    (
        c1   int,
        constraint pk_t1_master
          primary key (c1)
          deferrable
    );
    -- Table created.
     
    create table t2_slave
    (
        c1   int,
        constraint pk_t2_slave
          primary key (c1),
        constraint fk_t2_slave_t1_master
          foreign key (c1)
          references t1_master (c1)
          initially deferred
    );
    -- Table created.
     
    insert into t1_master (c1) values (1);
    -- 1 row created.
    insert into t1_master (c1) values (2);
    -- 1 row created.
    insert into t2_slave (c1) values (1);
    -- 1 row created.
    insert into t2_slave (c1) values (2);
    -- 1 row created.
    commit;
    -- Commit complete.
    Supprimons un maître, et rendons à un esclave sa liberté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    delete from t1_master where c1 = 2;
    -- 1 row deleted.
     
    select * from t1_master;
            C1
    ----------
             1
     
    select * from t2_slave;
            C1
    ----------
             1
             2
    Diantre ! Les données sont-elles corrompues ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    commit;
     
    ORA-02091: transaction annulée
    ORA-02292: violation de contrainte (FK_T2_SLAVE_T1_MASTER) d intégrité - enregistrement fils existant
    Ouf, la transaction a été annulée. Les contraintes déférées ne présentent donc pas de risque au niveau de l'intégrité des données !

  12. #12
    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 elsuket Voir le message
    Je ne suis pas d'accord là-dessus.
    Une fonction retourne une valeur, et par là même est susceptible d'être appelée dans une requête.
    C'est donc pour cela qu'il n'y a pas de gestion d'erreur faisable dans les fonctions.

    @++

    Prenons un cas concret

    Problème : essayons d'écrire la fonction ISDATE2 qui retourne 1 si l'expression entrée est une valeur DATETIME2 valide sinon retourne 0

    Constat
    Impossible d'écrire cette fonction ISDATE2 avec des TRY et CATCH à l'intérieur

    Solution de contournement
    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
    31
    32
    CREATE PROCEDURE P_IsDate2(@dateStr NVARCHAR(20), @retour INT OUTPUT)
    AS
    BEGIN
    DECLARE @datetime2 datetime2
     
    BEGIN TRY
        SELECT  @datetime2 = CONVERT(DATETIME2, @dateStr)
        SELECT @retour = 1     
    END TRY
    BEGIN CATCH
        SELECT @retour = 0
    END CATCH
    END
     
    --Utilisation de la procédure P_IsDate
    DECLARE @re INT 
    EXEC P_IsDate2 N'0001-01-01',@re OUTPUT
    IF (SELECT @re) = 1
    PRINT 'VALID'
    ELSE
    PRINT 'INVALID'
     
    --Résultat : VALID
     
    DECLARE @re INT 
    EXEC P_IsDate2 N'23:59:59.9999999',@re OUTPUT
    IF (SELECT @re) = 1
    PRINT 'VALID'
    ELSE
    PRINT 'INVALID'
     
    --Résultat : VALID
    Etienne ZINZINDOHOUE
    Billets-Articles

  13. #13
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    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 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Ouf, la transaction a été annulée. Les contraintes déférées ne présentent donc pas de risque au niveau de l'intégrité des données !
    Hum... Une fois que vous avez supprimé le maître 1 et que la requête « select * from t2_slave ; » affirme qu’il est toujours bien présent du fait de l’état deferred, de facto la base de données est dans un état instable (pour la seule transaction, puisqu’en cas de mise à jour le système de verrouillage interdit aux autres utilisateurs d’accéder aux tables impliquées), et l’on court tous les dangers tant que l’on n’a pas atteint un point de commit car, entre temps, il peut y avoir un sacré paquet d’instructions exécutées en toute bonne foi (on peut faire confiance en cela aux développeurs, lesquels ont parfois une imagination débordante, mais ne sont pas censés savoir que sous le capot, au niveau du DDL on a codé « initially deferred »).

    La vraie solution qui garantit la stabilité est bien celle qui est préconisée par Chris Date qui disqualifie tout contrôle différé, alors que du temps de sa folle jeunesse il était pour (cf. "Immediate vs. Deferred Rules" in Relational Database, Writings 1991-1994, pages 93-94).

    Comme je l’ai déjà précisé, tout contrôle peur être rendu immédiat grâce à la technique de l’affectation multiple (Multiple Assignment). A ce sujet, je vous renvoie une fois de plus à l’ouvrage SQL and Relational Theory, pages 171 et suivantes.
    (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.

  14. #14
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Zinzinetti,

    Je me suis mal exprimé, et pour moi ce que tu montres là est une vérification à effectuer côté applicatif (depuis quand une chaîne est une date ?)

    Notes que tu peux faire cela avec une fonction d'assembly ...

    @++

  15. #15
    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 elsuket Voir le message
    Zinzinetti,

    Je me suis mal exprimé, et pour moi ce que tu montres là est une vérification à effectuer côté applicatif (depuis quand une chaîne est une date ?)

    @++
    L'idée c'est d'écrire une fonction ISDATE2 pour valider des données de type DATETIME2.

    La fonction native ISDATE prend bien en entrée une chaîne de caractères ou expression qui peut être convertie en une chaîne de caractères

    Citation Envoyé par elsuket Voir le message
    Notes que tu peux faire cela avec une fonction d'assembly ...
    Eh oui ...là il faut que je sorte de SSMS pour lancer Visual Studio et commencer par coder du C# ou autre ...
    Tu vois la problématique ?

    Qu'est ce qui empêche/bloque MS de mettre à disposition la fonction ISDATE2 valable pour les types DATETIME2 ?

    On revient à la question initiale !

    A+
    Etienne ZINZINDOHOUE
    Billets-Articles

  16. #16
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Citation Envoyé par Kloun
    Un truc qui va faire hurler les puristes : pouvoir faire des Insert/Update/Delete sans logger.
    C'est totalement inutile, et si c'est enregistré dans le fichier du journal, c'est pour garantir l'intégrité de la base de données en cas de crash par exemple ...

    @++

  17. #17
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Bonjour tout le monde,

    Juste quelques remarques sur certains choses qui ont été dite. La discussion est très intéressante :-)

    >> Zinzineti
    S'il y a une suggestion à faire à MS à propos de SQL SERVER c'est d'abord et avant tout de commencer par corriger les anomalies remontées par les utilisateurs. Et la liste des anomalies est longue. Vous pouvez faire votre propre opinion en allant jeter un coup d'oeil sur Connect.
    Personnellement je suis abasourdi de constater qu'il y a des anomalies remontées depuis SQL Server 2005 et qui ne sont toujours pas traitées jusqu'à ce jour !
    Je pense qu'il ne faut pas faire l'amalgame entre corrections de bug et nouvelles fonctionnalités. Une application qui n'innove pas est une application qui est vouée à mourir (je me souviens bien de mes cours de génie logiciel ).

    >> Waldar

    Les constructeurs de lignes valuées qui permettent d'écrire :
    Depuis 2008 il existe un tel constructeur


    >> Kloun
    Un truc qui va faire hurler les puristes : pouvoir faire des Insert/Update/Delete sans logger.
    Vous allez à l'encontre des principes mêmes des propriétés ACID des transactions

  18. #18
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 760
    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 760
    Points : 52 541
    Points
    52 541
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par 7gyY9w1ZY6ySRgPeaefZ Voir le message
    Je te rejoins.
    Sans parler de la notion de package, inexistante sous SQL Server qui permettrait de mettre un peu d'ordre quand il y a beaucoup de code.
    Il suffit d'utiliser ce que la norme SQL à prévu, à savoir les schémas SQL trop souvent ignoré des développeurs !

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

  19. #19
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 760
    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 760
    Points : 52 541
    Points
    52 541
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Oishiiii Voir le message
    Je commencerais par l'ajout:
    • de l'opérateur de jointure naturelle (NATURAL JOIN)
    • d'un vrai type Booléen
    • des Assertions
    1) NATURAL JOIN n'est pas une obligation de la norme et se trouve être plus pervers qu'autre chose vue les pratiques des développeurs de nommer les colonnes toujours de la même manière. Exemple colonne Nom dans personne etr colonne Nom dans Produit !
    2) le type boolean est considéré comme deprecated dans les dernières version de la norme SQL
    3) personne sauf Ocelot n'a implémenté les Assertions du fait de problèmes de performances qui peuvent s'avérer dramatiques.

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

  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 760
    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 760
    Points : 52 541
    Points
    52 541
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par elsuket Voir le message
    Bonjour,


    Le type bit répond à cela, et il est normal qu'il puisse être à NULL.

    Pour ma part, je dirai, sous SSMS :

    - possibilité de filtrer sur le nom des bases de données
    - possibilité de formater le code
    - possibilité d'écrire des modèles de requêtes INSERT, UPDATE, DELETE
    - intégration du Profiler
    - débogage des requêtes et procédures stockées simplifié
    - onglets pas serveur
    Certaines de ces fonctionnalités sont déjà présentes dans 2005/2008 et pour le formatage il y a des outils externes plugable dans SSMS.

    Et pour le moteur de bases de données :

    - possibilité de spécifier le re-calcul des statistiques de colonnes par table
    - rendre impossible la compilation de code sur des objets non qualifiés (=> erreur de syntaxe)
    - remplacement des instructions DBCC par des DMVs (comme DBCC SHOW_STATISTICS, ...)
    Quand à rendre impossible l compilation de code sur des objets non qualifiés c'est idiot car certaines applications fonctionne sous le principe de la nom qualification par le schéma. Notamment de nombreux ERP qui crééent de nombreux schémas SQL et autant d'utilisateurs associés par défaut.
    Enfin pour DBCC c'est en voie de remplacement.

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

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Qu'est-ce qu'il manque selon vous à SQL-Server ?
    Par mikedavem dans le forum MS SQL Server
    Réponses: 203
    Dernier message: 23/04/2021, 14h51
  2. Qu'est ce que cela veux dire un "code propre" selon-vous ?
    Par kagura dans le forum Général Conception Web
    Réponses: 45
    Dernier message: 09/02/2016, 14h22
  3. Quel est selon-vous le système idéal à la maison ?
    Par Community Management dans le forum Linux
    Réponses: 77
    Dernier message: 19/11/2015, 09h24
  4. Quel est le meilleur générateur d'états selon vous ?
    Par Marc Lussac dans le forum Outils de restitution et d'analyse
    Réponses: 80
    Dernier message: 18/05/2010, 16h43
  5. Quel est selon vous le meilleur AV du marché ?
    Par lavazavio dans le forum Sécurité
    Réponses: 6
    Dernier message: 10/10/2005, 08h30

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