【发布时间】:2013-12-15 16:30:17
【问题描述】:
我正在为数据库设计而苦苦挣扎,这就是我目前所拥有的。
这里有问题。
-
我需要引入一种新的用户类型(企业集团经理),他们将了解公司集团(企业集团)。一个集团经理可以拥有多个公司,一个公司可以属于多个集团经理。如果可以添加一家独立公司,然后在以后轻松地被纳入企业集团的一部分,那将是有利的。
我发现这很难建模,因为到目前为止我的所有用户(经理、司机、收件人)都存在于 users 表中。这是设计使然,因为它们都具有几乎相同的数据字段,并且我需要为我网站上的所有用户提供一个登录点。如果我在 users 表中添加一个 conglomeration manager,他们将与我现有的用户类型没有的其他表建立关系。
-
我对通过用户、所有权、包、公司、用户形成的依赖循环感到不安。这给我的印象是不好的形式,但我真的想不出一种方法来避免它:
经理、司机和收件人都为一家公司工作。该公司有一组相关联的包裹,但我需要能够将这些包裹的子集与特定收件人(他们拥有包裹)和特定司机或经理(负责交付这些包裹)相关联。
我对用户中的“receive_emails”字段不满意,因为它只与“收件人”类型的用户相关。
更糟糕的是,这种设计已经在使用中,并且必须将数据迁移到任何新的设计中。
系统中最常见的操作是收件人查看状态,然后是经理和司机创建状态。
优雅的新设计可以解决我的问题吗?
【问题讨论】:
-
您需要将其分解为一个问题。这对这个论坛来说太宽泛了。
-
从您在第 1 段中所说的,您将需要用户和公司之间的多对多关系。
-
不用担心将列移动到不同的表。是的,迁移会更困难一些,但您将使用数据库设计数十年。
-
@Dan - 这会有所帮助,但这种关系对于某些用户来说没有意义。例如,收件人仅属于一家公司。
-
@Gilbert - 同意,现在值得拥有它。
标签: mysql sql database database-design