【问题标题】:Best Table Relationship Design for Similar Entities相似实体的最佳表关系设计
【发布时间】:2016-04-28 16:11:22
【问题描述】:

我正在尝试找出设置实体图的最佳方法。我将根据下图进行说明。

tblParentCustomer:此表存储我们的主要客户的信息,可以是企业或消费者。(使用查找表 tblCustomerType 识别它们。)

tblChildCustomer:此表存储主要客户下的客户。主要商业客户可以拥有授权员工和授权代表。主要消费者客户可以拥有授权用户。 (它们使用查找表 tblCustomerType 来识别。)

tblChildAccountNumber:此表存储 tblChildCustomer 的 AccountNumbers。这些帐号主要用于子企业客户。我可能会为儿童消费者客户添加帐号,我还不确定,但我相信这种设计会在必要时允许这样做。

回到 tblParentCustomer :如果此客户是消费者,我将需要为他们添加帐号。我的问题是,我是否在 tblParentCustomer 和 tblParentAccountNumber 之间创建 1 - Many 关系?此选项将为我提供 2 个不同的帐号表。

或者创建一个与 tblParentCustomer 和 tblChildCustomer 相交的连接帐户表是否有意义?

第一个选项对我来说真的没有意义,因为如果一个客户只有一个帐号但有多个 childCustomers 怎么办?

拥有 2 个用于不同目的的相似帐户表是否有意义?

【问题讨论】:

  • 一位客户有一个帐号还是一位客户可以有多个帐号?如果一个客户只有一个 AccountNumber,AccountNumber 应该直接包含在 Customer 表中。如果 AccountNumber 也永远不会更改,则 AccountNumber 可以用作主键。
  • ChildAccountNumber 可以和 ParentAccountNumber 有相同的数字吗?如果不是,为什么将它们放在 2 个单独的表中?只需在两者之间指定一个名为 Parent 的字段,该字段设置为 True 或 False。

标签: sql-server entity-framework ms-access


【解决方案1】:

按照您想要的方式创建多对多,您需要一个链接表,使整个事情从 1-* 到 *-1 该链接表将有两个 FK,一个链接到 parentTable,一个链接到 childTable。这两个 FK 的组合将为您提供复合 PK(这对于避免重复很重要)。它将允许任何客户成为尽可能多的帐户的一部分(呃..它将使父/子表成为多对多关系)。 这种方法对于 CRM 或任何包含人员的帐户极为常见。更进一步,在该表中,您可能希望在 AccountMembers 表中添加“主要联系人”。删除 childAccountNumber 表;你不需要它。

【讨论】:

  • 此外,如果每个帐户可以只有一个父帐户,请在帐户中设置一个字段来说明父帐户 ID。如果不止一个,则创建另一个类似于 accountMembers 的关系表,其中两个 fk 组合 PK 都指向帐户名称,例如 ParentAccountID 和 ChildAccountID。这就是要走的路。
猜你喜欢
  • 1970-01-01
  • 2020-01-28
  • 2013-11-18
  • 1970-01-01
  • 2018-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-05
相关资源
最近更新 更多