SQL Serveur 2008 : abbandonne t'on la vieille norme sql ( SQL 1 - SQL 89 )?
bonjour,
je dois avouer que je préfère écrire ( surtout pour les tables multiples ):
Code:
1 2
|
SELECT COLONNEA,COLONNEB FROM TABLE1,TABLE2 WHERE TABLE1.COLONNEA=TABLE2.COLONNEA |
plutôt que
Code:
1 2
|
SELECT COLONNEA,COLONNEB FROM TABLE1 INNER JOIN TABLE2 ON TABLE1.COLONNEA = TABLE2.COLONNEA |
pourtant, je crois, mais j'aimerais être certain, je crois que SQL Serveur 2008 n'acceptera plus que la deuxieme façon d'écrire plus "moderne" ( SQL 92 - SQL 2 )
J'attends Février pour commander la version francaise de sql serveur 2008, d'ici là, si quelqu'un pouvait me dire si c'est une certitude... ce serait sympa!
------------------------------------------------------------------
J'ai lu un livre de Peter Debetta sur SQL Serveur 2005 écrit en préversion et j'ai cru qu'il parlait de INNER JOIN, en fait, il ne parlait que du OUTER JOIN ancienne version qui disparait dans sql serveur 2005.
Extrait du site de SQL Pro A propos de SQL Serveur 2005.
Citation:
1.1 Jointure externes (norme SQL 1992)
Excellente nouvelle : les jointures externes avec une syntaxe propre à SQL server et rendant des résultats souvent faux, ne sont désormais plus accéptées nativement. Cette nouvelle ne va pas réjouir un certains nombre de développeurs et de DBA qui se la sont "coulé douce" depuis une décennie... Les jointures externe normatives sont dans la norme depuis 1992 et ont commencées à être supportées par SQL Server version 6.5. MS a mis en garde ses utilisateurs depuis la version 2000 qu'il était nécessaire d'utiliser les jointures normatives à base de LEFT, RIGHT ou FULL OUTER JOIN parce qu'elles ne seraient plus supportées dans les version futures...
Le message d'erreur est alors le suivant :
Msg 4147, Level 15, State 1, Line ...
The query uses non-ANSI outer join operators ("*=" or "=*"). To run this query without modification, please set the compatibility level for current database to 80 or lower, using stored procedure sp_dbcmptlevel. It is strongly recommended to rewrite the query using ANSI outer join operators (LEFT OUTER JOIN, RIGHT OUTER JOIN). In the future versions of SQL Server, non-ANSI join operators will not be supported even in backward-compatibility modes.
Encore désolé.
---------------------------------------------------------------------
Je confirme, apres test sur serveur sql serveur 2008, la requete sql 1 suivante s'execute bien :
SELECT * FROM Table1,TableA WHERE Table1.clef_primaire=tableA.clef_primaire
_____________________________________________________________
je vous renvois à une discussion particulierement interessante sur ce sujet dans le forum sql:
http://www.developpez.net/forums/sho...d.php?t=522319
premier livre francais sur sql server 2008
La première forme normale est ce qu'elle est
Citation:
Envoyé par
SQLpro
je ne suis pas du tout d'accord avec ton interprétation trop littérale.
Je n’interprète rien du tout. Je ne fais que citer les auteurs de référence, au sujet de la définition de la 1NF, notamment le père du Modèle relationnel, qui se trouve avoir aussi inventé la 1NF (et qui du reste, n’était pas obligé de le faire : en 1969 il était muet sur le sujet (Cf. E.F. Codd - Derivability, Redundancy, and Consistency of Relations Stored in Large Data Banks. IBM Research Report RJ599 (August 19th, 1969)).
Vous avez le droit d’être en désaccord avec Codd, mais alors n’appelez pas Première Forme Normale la contrainte que vous préconisez — au demeurant tout à fait pertinente — à savoir qu’un ensemble de colonnes d’une table ne puisse constituer une liste.
Citation:
Envoyé par
SQLpro
nous savons que cela n'est pas du pur relationnel et nous connaissons les problèmes que cela pose en général d'un point de vue requête comme au sujet des performances
Certes, il y a un problème relevant de la modélisation conceptuelle, mais le Modèle relationnel de données n’a rien à voir avec cela. Que les requêtes soient beaucoup plus balourdes, c’est certain, mais ça n’est pas non plus le problème du Modèle relationnel qui en l’occurrence n’a pas à se prononcer. Quant aux performances, elles sont l’affaire du SGBD car elles relèvent de la réalisation et non pas des concepts.
Citation:
Envoyé par
SQLpro
Je suis même encore plus méchant que cela, car dans les cours de modélisation que je donne, je considère comme faute le motif suivant :
Code:
1 2 3 4 5 6 7 8 9
| CREATE TABLE T_CLIENT_CLI
(
...
CLI_TELEPHONE_DOMICILE VARCHAR(20),
CLI_TELEPHONE_BUREAU VARCHAR(20),
CLI_TELEPHONE_PORTABLE VARCHAR(20),
CLI_TELECOPIE_BUREAU VARCHAR(20),
...
) |
En effet cela devrait être traduit en une table de téléphones avec des types de téléphone (GSM, Fixe, FAX...) et des localisations (Domicile, bureau..)
Bien entendu, cette liste de colonnes dénote une maladresse évidente dans la conception de la table et il faut renvoyer à l’école celui qui en est l’auteur. Mais je répète que, stricto sensu, ceci ne concerne pas la première forme normale.
J’ai eu, moi aussi, bien souvent à expliquer à des concepteurs peu aguerris les risques de ce genre de modélisation. Par exemple, l’un d’eux était très fier de son MCD concernant les statistiques du réseau (le produit final devait être vendu chez nos clients...) Mais une entité-type comportait une liste d’attributs, un pour chaque jour de la semaine, une deuxième liste était du même tonneau, ainsi qu’une troisième liste... Je lui ai posé la question suivante : "Que feras-tu de ton système le jour où certains de tes clients voudront des statistiques non pas sur 7 jours, mais sur 10 ou 15 jours ?", "Crois-tu que SQL est fait pour sommer un nombre fixe de colonnes ?", etc. Il a tout de suite compris l'enjeu et s’est empressé de revoir sa copie.
Je vous donne matière à être très, mais alors très méchant, concernant une table qui est en première forme normale, mais qui mérite une fort mauvaise note par ailleurs...
http://www.fsmwarden.com/developpez/...Sysindexes.jpg
Cette image date de quelques années. Pour avoir quelque chose de plus frais (mais toujours aussi mal modélisé) :