分享
 
 
 

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

王朝c#·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

介绍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编程,并展示了它的对象特性,比如继承和关系。在接下来的文章中,我将更加详细的逐个介绍,并讨论它的技术优势和劣势。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有