介绍Matisse--专为.NET的后关系型数据库part 1

介绍 Matisse

-- 专为 .NET 的后关系型数据库 part 1

介绍

当我开始接触用于 .NET 的数据库,我发现除了众所周知的一些数据库,如 SQL Server 、 MySQL 以外,还有不少选择。 Matisse 就是 其中之一,它是一种后关系型数据库 ( post-relational database ) 。

为什么要选择 Matisse 呢 ? 那是因为它是我所知道的,唯一专为 .NET 进行扩充,具有全部的对象性能和原生 .NET 支持的数据库。它主要的性能包括用户自定义类型,继承,多态和简单的数据模型等。过去的两年里,我在多个需要复杂数据模型的 .NET 项目中获取了 Matisse 的实际工作知识。

如果有人想要找一篇详尽的文章,能够对主流的关系型数据库和其他产品进行深层次的比较。我还没有看到一个简单的,渐进的教程,能帮助那些希望能够接触新一代数据库的开发人员 。因此,我决定发布一系列的短文去填补这一空白,这是第一篇文章。

这第一篇文章主要是对用 Matisse 进行 SQL 编程作一个简介。接下来的文章里,将更加详细的介绍如何使用 .NET 和 ASP.NET 去开发数据库应用程序。

安装

安装 Matisse 非常的简单和快速 . 进入 Matisse 下载站点 http://www.matisse.com/developers/downloads/ ,并在 "Matisse DBMS 7.0.x" 区中下载下面两个文件 :

1. Intel - MS Windows ( 文件名是 _ matisse70x.exe _ )

2. .NET binding ( 文件名是 _ matisseDotNet70x.exe _ )

第一个文件安装数据库服务、管理和开发工具以及一个通用的客户端链接库,该链接库可为不同的语言共享,比如 C#, VB.Net 等。第二个文件包含一个 .NET 的装配件 (assembly), 其提供对象永久化服务和一个原生的 ADO.NET 提供者。

译者注:在这里,我把 native ADO.NET data provider 翻译为原生的 ADO.NET 提供者 .

要安装 Matisse ,你需要拥有 Windows 系统管理员级别 (Administrator) 的权限, 机器的基本配置: Windows NT, 2000, 或者 XP, 64MB 内存以及 100MB 的硬盘空间。首先,执行 matisse70x.exe 文件,跟随安装向导的指引,当出现安装类型时,记得选择 "Typical/Full" ,安装过程将在几分钟内结束。接着,执行 matisseDotNet70x.exe 文件,安装 .NET 接口,选择与前一个安装相同的目录。

在开始使用之前,你应该看看以下几个文档:

1. Discovering Matisse Enterprise Manager (from Readme.html )

2. Building reusable components with SQL PSM (from Readme.html )

3. Getting Started with Matisse

你也可以在以下网址找到一些编程,数据库管理和安装方面的指引:

http://www.matisse.com/developers/documentation/ .

如果有 Rational Rose 建模工具,你也可以下载 Matisse Rose Link(matisseRoseLink70x.exe) 。它允许你使用 UML 来定义和维护数据库 schema 。

记住,你也可以在 Linux 上面运行你的 database 服务器,然后在 Windows 上发布你的 .NET 应用程序。你只需要下载 Linux 版的 Matisse(matisse-7.0-x.i386.rpm) 并用 rpm 安装,如果你使用的是 RedHat 8 ,在运行 rmp 之前,你需要修改环境变量 RPM_INSTALL_PREFIX 为 _ /usr/local/matisse _ _ 。 _

 > rpm -ihv matisse-7.0-x.i386.rpm

使用 Matisse Enterprise Manager 你可以做什么?

在开始写一个演示程序之前,让我们看一些 Enterprise Manager 的有趣特性。

1. 你可以象其他那些收费软件一样,浏览一个数据库中的类,属性,关系和 SQL 方法。其中一个有趣的特性,你可以看到一个类的所有属性 ( 比如属性,关系和方法 ) 以及子类的属性。这样,当你在类中写一个 SQL 声明的时候,这个特性就变得很有用,因为你不用在父类和子类之间来回切换,以查找某一个属性。

2. 数据倒入 (CSV)

使用 CSV(Comma-Separated) 文件,你可以从关系型数据库中倒入数据。当你从 CSV 文件倒入数据,文件中的每一行被存为一个数据对象。所有的 CSV 文件倒入结束后,你需要定义一个描述数据库中不同对象之间链接关系的 XRD 文件 (XML Relationship Definition) 。随后根据你 UML 中的描述,数据库中的对象被整合成一个有意义的语义网络。对象之间的关系会在 SQL 查询时,提供一个明显的性能优化。

简单演示

在这篇文章中,我将会展示一个简单的演示应用程序,以介绍如何使用 SQL 去定义一个 schema 和操作数据对象。在接下来的文章中,我们会进行更深入的讨论。

首先,你需要开启一个数据库。执行 Enterprise Manager ,选中一个数据库,然后点选 Start 菜单。几秒钟之后,数据库将被启动。

在这个演示程序中,我们将使用项目管理模式。其中定义了三个类: Project, Employee 和 Manager 。其关系如下:

如果有 Rational Rose , 可以非常方便的倒入 UML 图。选择 Tools -> Matisse -> Export to Database… 菜单 :

如果有 Rational Rose , 你可以使用 SQL DDL 或者 ODL(Object Definition Language) 。下面的 DDL 语句和前面的 UML 图是等效的。

CREATE TABLE Project (


  ProjectName STRING,


  Budget NUMERIC(19,2),


  Members REFERENCES (Employee) 


    CARDINALITY (1, -1)


    INVERSE Employee.WorksIn,


  ManagedBy REFERENCES (Manager) 


    CARDINALITY (1, 1)


    INVERSE Manager.Manages


);


 


CREATE TABLE Employee (


  Name STRING,


  BirthDate DATE,


  WorksIn REFERENCES (Project) 


    INVERSE Project.Members


);


 


CREATE TABLE Manager UNDER Employee (


  Title STRING,


  Manages REFERENCES (Project) 


    INVERSE Project.ManagedBy


);

要执行上面的 DDL statement ,复制到 SQL Query Analyzer 窗口,执行。

到此,你应该看到了用 Matisse 进行数据库建模的优点了吧!你不需要改动你的模式,所有的类和其他的容器之间的关系已经被保留在数据库的 schema 中了。对于维护和扩展应用程序,这是一个很大的优势。

现在,我们可以在数据库中建立对象了。在 SQL Query Analyzer 窗口中执行下面的代码:

INSERT INTO Employee (Name, BirthDate) 


  VALUES ('John Venus', DATE '1955-10-01') 


  RETURNING INTO emp1;


INSERT INTO Employee (Name, BirthDate) 


  VALUES ('Amy Mars', DATE '1965-09-25') 


  RETURNING INTO emp2;


INSERT INTO Manager (Name, BirthDate, Title) 


  VALUES ('Ken Jupiter', DATE '1952-12-15', 'Director') 


  RETURNING INTO mgr1;


INSERT INTO Project (ProjectName, Budget, ManagedBy, Members) 


  VALUES ('Campaign Spring 04', 10000.00, mgr1, SELECTION(emp1, emp2));

上面的代码创建了两个 Employee 对象,一个 Manager 对象,一个 Project 对象。然后将这个两个雇员对象作为成员加入项目对象中,而经理对象作为项目的管理者加入。

要察看插入的对象,执行 " SELECT * FROM Employee " 语句

当你按照 Employee 查找,查询会返回两种类的对象 - Employee 和 Manager 。因为它们都继承至类 Employee 。但是 , Manager 对象中的一些属性,比如 Title 是不会显示在结果表中的,因为这些属性并没有包括在类 Employee ,而是在其子类中。

你可以定义类的 SQL 方法。语法遵循 SQL PSM (Persistent Stored Module). 举例说明一下,让我们定义一个实例方法 Age() ,该方法返回雇员的年龄。

CREATE METHOD Age()


RETURNS INTEGER


FOR Employee


BEGIN


  RETURN EXTRACT(YEAR FROM CURRENT_DATE) - EXTRACT(YEAR FROM SELF.BirthDate);


END;

在 SQL Query Analyzer 窗口中执行上述语句,然后试试下面的查询语句。

SELECT * FROM Employee emp WHERE emp.Age() > 40;

Age() 这个方法在 Employee 中定义,其子类 Manager 也继承了这一方法,当然,你也可以象在 .NET 一样使用它 , 比如 在 Manager 类中覆写这个方法,或者使用它的多态特性。

下一篇文章

在这篇文章中,我简单的介绍了使用 Matisse 进行 SQL 编程,并展示了它的对象特性,比如继承和关系。在接下来的文章中,我将更加详细的逐个介绍,并讨论它的技术优势和劣势。

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus