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...
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).
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).
Partager