DataSet数据关系与DataTable数据表的约束

一、         将数据表收集到收集到集合中

DataSet dataset=new DataSet();

Dataset.Tables.Add(table);

 

二、         构建数据表之间的关系

(1)理解表之间的关系:

在关系数据库的建模过程中,“基数”一词描述了两个表之间的关系类型,基数共有三种类型。

(1)     一对一的关系

一个表中的一条记录与另一个表中的一条记录准确匹配,最常见的应用是如果一个表所包含的列数目很多,不方便查看,将其分为几个不同的表来处理。

(2)    一对多的关系

“父表”中的一条记录在另外一个“字表”中有零条或者是多条“子记录”。常见的是订货系统中,每一个客户可能有0个或者是多个客户记录。

(3)    多对多的关系

第一个表中的一条记录可以与第二条表中的零条或者是多条记录相对应,而且,第二个表中的记录在第一个表中也可以由零条或者是多条记录相对应。比如我们的选课系统,每一个学生可以选很多门课,而每一门课也可以被很多学生选,这就构成了一个多对多的关系。

 

在上面三种表间关系中,都共用了一种物理实现概念,那就是“外键——由一个表使用另一个表的标识列”,在多对多的关系中,也是用“外键”这个概念,但它们需要一个中间表来指出要连接哪两个键,两个主表都是父表,中间表(即临时表)是字表,如下图所示:

总而言之:每个父记录都必须是唯一的,每个子记录都需要有一个父记录。

 

(2)创建数据关系

利用DataRelation 这个类,可以实现数据集中的数据表之间的关联,每一个数据关系都包含了一个父记录和一个子记录。如果需要创建数据表之间的关系,第一步是需要将两个表添加到数据集中,然后创建一个新的DataRelation对象,向他的构造函数传递一个“关系名称”,再加上对每个表中链接列的引用,建立关系链接。

重点:数据关系中,具有明显的父子关系,即对于两张表而言,一张为父表,另一张则为子表,在C#中,有些方法正是体现了表关系之间的父子性

如下

DataRelationrelation = newDataRelation("NewRelation", this.dataSet1.StudentInfo1.Columns["学号"], this.dataSet1.StudentCourse1.Columns["学号"]);

                                 //构建数据关系,第一张为父表,第二张为子表

dataSet1.Relations.Add(relation);//将数据关系添加到数据集对象里面

 DataRow child = this.dataSet1.StudentCourse1.Rows[0];  //子表中的某一行

 DataRow parent=child.GetParentRow(relation);          //通过子表找到父表中的相应行

 Debug.WriteLine($"{parent[0]}  {parent[1]}  {parent[2]}  {parent[3]}  {parent[4]}  {parent[5]}");

 

(3)查找父、子记录

在两个表中建立了“父子”关系之后,就可以根据表之间的关系存取提取数据了。如上面的一个例子,根据子记录查找相应的父记录。

还有几个方法如下:

publicDataRow[] GetChildRows(string relationName);  //根据一条父记录来获取相应的一些列子记录

publicDataRow GetParentRow(string relationName);    //根据一条子记录来获取相应的父记录,它只返回一条父记录

publicDataRow[] GetParentRows(DataRelation relation);//返回一系列的父记录

 

上面的三个方法最为常用,但都有很多的重载版本。

 

三、         定义表的约束

数据表的约束是通过Data命名空间中的Constraint类来实现的,主要支持两种类型的约束:

第一:外键约束:ForeignKeyConstraint类,它是继承Constraint类的;

第二:唯一约束:UniqueConstraint类,它也是继承Constraint类的。

 

默认情况下,我们在创建数据关系的时候,即在两个表之间建立关系的时候,回自动在父列中添加唯一约束,在子列中添加外键约束,如下所示

DataRelationrelation = newDataRelation("NewRelation", this.dataSet1.StudentInfo1.Columns["学号"], this.dataSet1.StudentCourse1.Columns["学号"]);

在这句话中,父表的“学号”列会自动添加唯一约束,子表的“学号”列会自动添加外键约束;他们是在创建数据关系的时候自动完成的。当然我们可以向构造函数传递第四个参数,false,就会在创建数据关系是忽略这些自动创建的那两个约束。

(1)    手动为数据表添加唯一约束和外键约束的方法

//添加唯一约束,添加在父表中

 UniqueConstraint unique = newUniqueConstraint(this.dataSet1.StudentInfo1.Columns[0]);

 this.dataSet1.StudentInfo1.Constraints.Add(unique);

 //添加外键约束,添加在子表中

ForeignKeyConstraint foreign = newForeignKeyConstraint(this.dataSet1.StudentInfo1.Columns[0],

                                                                this.dataSet1.StudentCourse1.Columns[0]);

this.dataSet1.StudentCourse1.Constraints.Add(foreign);


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值