C# 数据集中关系的用途是什么?

C# 数据集中关系的用途是什么?,c#,sql-server,database,C#,Sql Server,Database,我在SQL CE工作。在我的设计中,我有: 学生表: 学生 GroupID 名字 姓氏 和组表: GroupID 组名 我不知道使用工具箱中的关系有什么好处。然后出现在这个窗口。如何配置该关系?使用它有什么好处 在数据集中使用此功能的好处可以追溯到RDBMS设计策略。提供主键/外键关系时(只要指定了关系完整性),它将在父表和子表之间创建链接。这可确保您将记录插入到具有合法外键的表中,该外键来自主键为父表的预定义外键。如果设置正确,则关系可以防止删除父表而留下子记录的孤立记录 可以将其设置

我在SQL CE工作。在我的设计中,我有:

学生表:

  • 学生
  • GroupID
  • 名字
  • 姓氏
和组表:

  • GroupID
  • 组名
我不知道使用工具箱中的关系有什么好处。然后出现在这个窗口。如何配置该关系?使用它有什么好处


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

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


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

定义关系会强制数据库执行。如果没有此定义,子表中的行可能会被删除,从而使父表数据部分失去意义。例如:

您拥有包含以下数据的Make和a模型表:

Make
ID     | MakeName
321    | Ford
322    | Toyota

Model
ID   | ModelName | MakeId
1    | Focus     | 321
2    | Tundra    | 322
如果不强制引用完整性,则可以从
Make
表中删除“Ford”行。这将使
模型
表中的
焦点
行(部分)失去意义,因为
MakeId
将不再引用存在的内容

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

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

  • 你休息了一天,犯了一个错误。每个人都这样做
  • 一些新成员开始与DB合作,但他们不知道这种隐含的关系

  • 你被解雇了,没有人知道这种隐含的关系甚至存在

底线是人类会犯错误,而计算机不会。如果你实施它,你的生活会更轻松。

强类型数据集中的关系非常有用。假设您获得了由
GroupID
绑定到学生的
Group
对象,如果您想知道学生
bob
是否在
group5
中,您可以简单地执行以下操作:

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

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
数据集尚未正确设置链接。您需要提交并刷新数据集以创建链接。但是,如果您这样做:

Classroom cr = new Classroom();

Classroom.GroupRow group4 = cr.Group.NewGroupRow();
group4.GroupName = "Group 4";
cr.Group.AddGroupRow(group4);

Classroom.StudentRow student = cr.Student.NewStudentRow();
student.FirstName = "Bob";
student.LastName = "Villa";
student.GroupRow = group4;

Console.WriteLine(student.GroupRow.GroupName); // Works
我知道我没有回答“如何配置该关系?”部分,但我相信你已经找到了答案。如果不是很好。。。将匹配的ID列拖放到另一列的顶部:-P


编辑:这可能不是一个学术性的答案,但我想看看当我尝试学习新东西时会是什么样子

“你被解雇了,没有人知道这种隐含关系的存在。”如果发生这种情况,我真的不在乎有人在我的代码上犯错误。这更好,因为他们可能会打电话回来,我可以拿出一个“我可以帮忙,但会花你的钱”提醒我永远不要雇用你。。。说真的,为你的工作感到骄傲。如果这让事情变得更容易,那就把它想象成“你一年有一百万美元的工作,离开你现在的公司,没有人知道这种隐含的关系甚至存在。”哈哈,那是个笑话。我从不制造无法维护的代码。对于这里的其他人,永远不要这样做,即使你认为这是有益的。相信我,我知道,它会回来缠着你的。