Bonjour,
Quelqu'un peut m'expliquer pourquoi MS SQL SERVER ne permet la création de domaine à l'aide de la commande CREATE DOMAIN ?
je rappelle qu'un domaine est un alias de type (natif) sur lequel on peut définir des contraintes (CHECK, NOT NUL, ...). Selon la norme SQL on peut définir un domaine en utilisant la commande CREATE DOMAIN.
Exemple :
--------
=> Quels sont les avantages de l'utilisation des domaines dans un SGBD ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 CREATE DOMAIN D_CONTINENT AS CHAR(8) DEFAULT 'AFRIQUE' CONSTRAINT CHK_D_CONTINENT CHECK (VALUE IN ('AFRIQUE','AMERIQUE','ASIE','EUROPE','OCEANIE'))
1. Uniformisation des types de données : on ne verra pas par exemple pour une même base de données une table avec une colonne TELEPHONE avec le type VARCHAR(15) et dans une autre table TELEPHONE avec VARCHAR(20)
2. Lisibilité des types de données + qualité des données: choix des types appropriés des types prédéfinis + les contraintes
3. Il paraît que l'utilisation des domaines à la place des types standards permet d'optimiser l'espace RAM.
=> Et les inconvénients ?
1. ALTER DOMAIN ne permet pas de modifier les types de données (prédéfinis): ALTER DOMAIN ne s'applique que pour les DEFAULT et les CONTRAINTs
2. Problèmes avec DROP DOMAIN :
et ses prob
Code : Sélectionner tout - Visualiser dans une fenêtre à part DROP DOMAIN name [ CASCADE | RESTRICT ]
la suppression du domaine devrait en principe préserver les colonnes et leurs appliquer le type standard (built-in) sur le lequel le domaine était définit.
Par exemple sous PostGreSQL 9.1, j'ai constaté que la suppression de domaine avec l'option RESTRICT renvoie l'erreur suivante :
Et lorsque j'utilise l'option CASCADE, non seulement le domaine est supprimé mais aussi TOUTES LES COLONNES BASÉES SUR CE DOMAIN !ERREUR: n'a pas pu supprimer type d_continent car d'autres objets en dépendent
État SQL :2BP01
Détail :table t_cont colonne col dépend de type d_continent
Astuce : Utilisez DROP ... CASCADE pour supprimer aussi les objets dépendants.
=> Quand est-il de l'indexation des colonnes utilisant des domaines ?
=> Pourquoi MS SQL SERVER au lieu d'implémenter la commande CREATE DOMAIN préfère des bidouilles du genre pour avoir un résultat similaire ?
chose curieuse le Book On Line recommande de ne plus utiliser CREATE RULE !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 CREATE TYPE toto .... CREATE RULE R_toto ... EXEC sp_bindrule R_toto ... EXEC sp_bindefault ....
Quelqu'un peut m'éclairer ?CREATE RULE will be removed in a future version of Microsoft SQL Server. Avoid using CREATE RULE in new development work, and plan to modify applications that currently use it. We recommend that you use check constraints instead. Check constraints are created by using the CHECK keyword of CREATE TABLE or ALTER TABLE. For more information, see CHECK Constraints.
Merci d'avance
Partager