Les articles de ESSI# - SQL Server Yukon (preview)

RACINE
 

SQL Server Yukon (preview)

Voir dans une fenêtre à part Cliquez ici pour voir la page dans un explorateur séparé.

Index Rapide

Introduction

Le but de ce document est de présenter (disons même survoler) quelques aspects des modifications qu'apporte SQL Server Yukon. Il n'est pas ici question d'une présentation exhaustive, mais je conseille de parcourrir les pointeurs donnés en "webographie".

retour à l'index

UDT : User Defined Types

Yukon = SQL Server Orienté Objet ?


Yukon permet de définir des UDT (User Defined Types / types définis par l'utilisateur). C'est à dire d'enrichier T-SQL (integer, varchar, etc...) avec des types définis par nos soins. Et si ces types viennent de nos programmes écrit pour .NET (C#, VB.NET, ...) on obtient une base de donnée orientée objet ! Mais n'allons pas trop vite ...

Le CLR (Common Language Runtime) est l'ensemble des types définis dans le noyau .NET. C'est sa machine virtuelle si vous préferez (bien que .NET soit JITé et pas interprété). C'est cette même CLR qui a été intégrée dans Yukon pour permettre une interaction optimale avec les programmes .NET.

Renommage

Ainsi, parmis les UDT proposés par Yukon, vous pourrez redéfinir des types en les renommant (aliasing). L'exemple ci-dessous permet de définir le type ZIP que vous pourrez utiliser partout :

CREATE TYPE ZIP FROM char(5) NOT NULL

Source : Managed UDTs Let You Extend the SQL Server Type System

Import de types .NET

Vous pouvez importer vos classes, c'est à dire utiliser vos classes comme types de bases pour vos tables. Cela signifie que, moyennant quelques contraintes, Yukon réalisera tout seul le mapping .NET / BD-R.

Votre classe doit être Sérializable et avoir l'attribut SqlUserDefinedType :

[Serializable]
[SqlUserDefinedType (Format.Native)]
public class MaClasse {...}

Pour que votre classe puisse-t-être null, elle doit implémenter l'interface INullable (soit un getter) :

[Serializable]
[SqlUserDefinedType (Format.Native)]
public class MaClasse : INullable {...}

Votre classe doit pouvoir être transformée en string, et réciproquement (les 2 opérations ne doivent pas être opposées, mais c'est recommandé) :

public static MaClasse Parse(SqlString s) {...}
public override string ToString() {...}

Votre classe doit avoir un constructeur par defaut sans paramètre :

public MaClasse() {...}

Dans Yukon, vous devez importer votre Assembly (DLL ou EXE contenant la classe) dans un schéma. Ensuite, il faut aliaser la classe avec un nom interne à Yukon.

CREATE ASSEMBLY YukonCLR FROM 'C:\Projects\Yukon\UDTs\Point\YukonCLR.dll'

CREATE TYPE Point EXTERNAL NAME YukonCLR:Point

Dans Yukon, vous pouvez desormais utiliser le type .NET comme un type primaire :

CREATE TABLE Points
(
    PointID int NOT NULL,
    Pnt Point NOT NULL
)

Dans .NET, vous pourrez (dans vos appels de procédure stockée ou si vous utilisez un prepared statement) ajouter un paramètre de type UserDefined qui sera une instance de votre classe.

Vous pourrez aussi dans Yukon appeler une méthode ou accéder une propriété en utilisant la syntaxe suivante :

Propriété: <implemented_type>::<property_name> = <scalar_expression>
Méthode: <implemented_type>::<method_name>([arguments])

SELECT Pnt::X AS XValue, Pnt::Y AS YValue FROM Points

On peut la résumer à "remplacer les . par des ::".


Source : Managed UDTs Let You Extend the SQL Server Type System

Import de procedures .NET

Vous pouvez aussi importer des methodes .NET dans votre Yukon, et les utiliser comme des procédure stockées standard !

CREATE PROCEDURE mysproc (@username NVARCHAR(4000))
AS
EXTERNAL NAME YukonCLR:[MyNamespace.CLRCode]:: myfunction

Source : XML, T-SQL, and the CLR Create a New World of Database Programming

retour à l'index

Le mot de la fin

Conclusion

Oui, SQL Server Yukon vous permet d'avoir des objets dans votre base, de ne plus écrire à la main ou avec un outil des invériables INSERT et UPDATE. Mais non, Yukon n'est pas un SDBGOO, car il réalise le mapping Objet-Relationnel. Mais ne dénigrons pas les progrès effectués ni les bénéfices réalisés par l'inclusion de la CLR dans Yukon.

Si vous avez des remarques concernant cet article ((im)précisions, remarques, ...) faites moi signe !!

retour à l'index

Remerciements

Monsieur Laurent ELLERBACH, responsable relation études supérieures chez Microsoft France, pour ses idées et son soutien logistique.

Monsieur Pierre-Louis XECH, responsable relation recherche chez Microsoft France.

Monsieur Philippe SALVAN, professeur à l'ESSI pour son interrêt et ses cours sur les Bases de données Orientées Objet (motif de cet article).

retour à l'index

Sources

Sur le Web :

retour à l'index

 




par Alain Vizzini (vizzini@essi.fr )
pour l'ESSI & Microsoft, création 21-02-2004, dernière màj 21-02-2004


+ 17.000 pages vues depuis le 14 oct. 2002