【问题标题】:Representing a list in a SQL database表示 SQL 数据库中的列表
【发布时间】:2012-11-06 13:12:31
【问题描述】:

我正在用 C# 编写一个带有 SQL 数据库的应用程序。

我有一个模型:

Person()
{
  string id;//unike key
  string name;
  List<string> responsableOf;//list of id
}

我想把它表示成一个表格。

哪些是表格的正确字段?

【问题讨论】:

  • 您需要提供更多信息才能获得更好的答案。你的 SQL 数据库是什么?您所说的“表格的正确字段是什么”是什么意思?

标签: c# sql database database-design


【解决方案1】:

这取决于此人与他将负责的其他人之间的关系。

如果它是父子关系,即组合,您可以使用自引用表。比如:

Persons 包含以下列:

  • Id,
  • name
  • ParentId 同一张表的外键。

如果这个人和其他人之间的关系是一个聚合,并且一个人可能对许多其他persons负责:

Persons:

  • Id,
  • name

usersresponsibilities

  • Id,
  • PersonId,
  • ResobonsiblePersonID

稍后,在这两种情况下,在您的前端应用程序中,您都需要将这些表中的数据作为对象而不是行来处理。你应该从对象的角度来思考。

在您的应用程序中,您当前的类 Person 应映射到此表。

【讨论】:

  • 这意味着负责人不再是人,不是吗?
  • 是的,您仅适用于第二种情况。现在修好了。谢谢。
【解决方案2】:

解决方案将在一定程度上取决于您的限制:

如果一个人可以有几个人负责他们

您需要的是人之间的多对多关系(以及包含其他字段、ID 和姓名的人的表)

您将表示使用关联两个 ID(外键)的表对于任何给定的行,该表将关联:

  • 负责人的身份证
  • 他负责的人的 ID

构建您的列表就像在此表中查询具有给定责任 ID 的行一样简单。

如果一个人只能由一个人负责

您需要一个外键到您的个人表中的同一个表(责任 ID)。

然后,构建您的列表就像在人员表中查询具有给定责任 ID 的行一样简单。

【讨论】:

    【解决方案3】:

    创建一个 id 和 responsableOfID 为整数的表,而 responsableOfID 是另一个具有 id 和名称的表的外键

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      • 2013-09-10
      相关资源
      最近更新 更多