WinFS是传统的文件系统以及关系数据库的延伸,它不仅存储以往的文件类型数据,也可以存储非文件类型的数据,比如一些个人信息、日程表、邮件等等。因此,在WinFS中存储的单位不应该用文件来描述,准确说来应该是Item。
首先要弄清楚几个概念:Types/Subtypes、PropertIEs/Fields、Constraints、Relationships。
一.Types/Subtypes
Type和Subtype与面向对象的类及子类的概念相象,WinFS中存储的数据都是某种TYPE的实例(Instance),比如我们可以创建一个TYPE为Person的实例,这个实例拥有自己的属性,姓、名、年龄、性别等等。每种TYPE都会有自己的属性,即Properties/Fields。每种TYPE都会有自己的超类型(super type)和子类型(Subtype),与JAVA等语言类似,一个TYPE只能继承自一个超类型,但可以有多个子类型。比如Contact和Document的超类型都是Item,而Contact的子类型有Person、Group和Organization等等,Document的子类型有Image和Media等等,Image的子类型有Photo等等。WinFS中预定义了几种“Windows Type“,比如Person、Message、Document和Folder等等。Type可以被扩展,即允许用户定义自己的Type,但是现在在这个版本的WinFS中还不提供这种自定义功能。
二.Properties/Fields
Properties/Fields与类的属性的概念相似,每一个属性可以是一个标量,也可以是一个与C/C++的structure相似的结构。对于一个类型来说,可以拥有多个相同的属性,比如一个Person可以拥有多个Address属性。
三.Constraints
对于每个Propertie/Field,都可以有约束(Constraints),比如年龄必须是在什么范围内,姓名不允许为空等。但是当前发布的WinFS版本还不提供对约束的支持。
四.Relationships
在WinFS中,TYPE之间可以有关联(Relationship),Relationship创建在源类型的实例及目的类型的实例之间(源实例与目的实例可否是同一类型?)。源类型的实例是不可缺少的,一旦发现源类型的实例不存在,Relationship会立即被删除。但是目的类型的实例却可以缺少,这种缺少目的类型的实例的Relationship被称为“Dangling Relationship“。
对于一个Relationship来说,它也可以与Type那样拥有自己的Properties/Fields。举个例子,比如一个Contact与一个Message之间存在一个Participant的关系,而这个关系可以有一个nickname的属性。
在WinFS中,有两种Relationship,一种叫Holding Relationship,一种叫Reference Relationship。
标签: