数据集中关系的目的是什么?

时间:2011-08-15 03:11:38

标签: c# sql-server database

我正在使用SQL CE。在我的设计中我得到了:

学生表:

  • StudentID
  • 的GroupID
  • 名字

和小组表:

  • 的GroupID
  • 组名

我不知道从工具箱使用Relation的优点。看来我这个窗口。如何配置该关系?使用它有什么好处?

enter image description here

4 个答案:

答案 0 :(得分:4)

在数据集中使用它的好处可以追溯到RDBMS设计策略。当您提供主/外键关系时(只要指定了关系完整性),它就会在父表和子表之间创建链接。这可确保您使用主键从父表中插入具有合法预定义外键的表中的记录。

答案 1 :(得分:2)

定义关系会强制您的数据库强制执行referential integrity。如果没有此定义,则可以删除子表中的行,从而使父表数据部分无意义。例如:

您有Make和Model表,其中包含以下数据:

Make
ID     | MakeName
321    | Ford
322    | Toyota

Model
ID   | ModelName | MakeId
1    | Focus     | 321
2    | Tundra    | 322

如果您不强制执行参照完整性,则可以从Make表中删除“Ford”行。这会使Focus表中的Model行(部分)无意义,因为MakeId将不再引用存在的内容。

如果您强制执行关系,那么这将永远不会发生。

一些数据库经验有限的人会说,“如果我从不删除该记录,这甚至不会成为一个问题。”这条逻辑线存在许多问题,例如:

  • 你有一个休息日,并犯了一个错误。每个人都这样做。
  • 有人开始使用数据库,他们不知道这种隐含的关系。
  • 你被解雇了,没有人知道这种隐含的关系甚至存在。

底线是人类会犯错误而计算机却不会犯错误。如果你执行它,你的生活会更容易。

答案 2 :(得分:1)

如果设置正确,关系可以防止孤立记录删除父项的位置,留下子记录。

当尝试删除包含子记录的父记录时,可以设置为执行级联删除或引发异常。

答案 3 :(得分:1)

强类型DataSet中的关系非常有用。假设您将[{1}}绑定的Group对象绑定到您的学生,如果您想知道学生GroupID是否在bob,您本身就可以做到:

Group 5

此外,当您创建新学生时,假设您将某个群组与if (bob.GroupRow.GroupName == "Group 4") { //... } 相关联:

GroupID

DataSet尚未正确设置链接。您需要提交并刷新DataSet才能建立链接。但是,如果你这样做:

Classroom cr = new Classroom();
Classroom.StudentRow student = cr.Student.NewStudentRow();
student.FirstName = "Bob";
student.LastName = "Villa";
student.GroupID = 4;

Console.WriteLine(student.Group.GroupName); // Error

我知道我没有回答“如何配置这种关系?”部分,但我相信你已经弄清楚了。如果不好......将匹配的ID列拖放到另一个上面:-P

编辑:这可能不是一个学术答案,但我喜欢看到当我尝试学习新东西时的样子。