【发布时间】:2017-01-20 18:29:50
【问题描述】:
我正在为 CRM 设计数据库架构。它有以下表格:users、organizations、contacts、addresses、organization_types。
organizations 可能是公司、非营利组织或个人。
users 与organizations 具有多对多关系。原因是,例如,一家公司可以在应用程序上拥有一个销售员和一个经理,并使用两个不同的登录名。另一方面,一个推销员有可能为两家不同的公司做销售。
contact 和 addresses 与 organizations 具有一对一的关系。我的客户只希望一个组织拥有其中的每一个。
我设计它的方式是 organization 也可以是一个客户端,它属于另一个 organization。这意味着组织表与其自身具有一对多的关系。
这对我来说很有意义,因为它们似乎是同一个实体。客户还需要contacts 和addresses 表,它也可以是公司、非营利组织或个人。
另一位开发人员提出的要点是,随着时间的推移,查询数据库以区分属于我们客户的组织与属于我们客户的组织的成本会很高。
最好的方法是什么?制作一个 client_organizations 表并将这两者分开会更好吗?
【问题讨论】:
-
你问的是做分层查询吗? (组织是组织的客户是组织的客户是组织的客户是组织的客户等)
-
@O.Jones 我只是想知道这种方法是否成本太高而无法进行查询。为了区分哪些组织订阅使用我的 CRM 应用程序以及哪些是他们的客户,只需在我们的产品上注册即可。制作
client_organizations表会更好吗? -
我只有一个组织表
-
我会拆分它们,特别是如果超级管理员编辑组织而组织管理员编辑他们的客户。在这种情况下,并没有真正节省数据输入工作或节省空间。你只会让报告变得更复杂。如果您担心使用递归实现真实世界的模型,您将添加组织关系表,但随后您会遇到需要在某些记录编辑上添加随机出现的权限限制。我假设您不会这样做,而这确实是您需要将它们放在同一张表中的唯一原因。
标签: mysql sql database-design relational-database erd