介绍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 查找,查询会返回两种类的对象 - EmployeeManager 。因为它们都继承至类 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