【发布时间】:2011-04-28 07:01:17
【问题描述】:
这是一个棘手的规范化/SQL/数据库设计问题,一直困扰着我们。我希望我能正确地陈述它。
您有一组活动。它们是需要完成的事情——一个美化的 TODO 列表。任何给定的活动都可以分配给员工。
每个活动也都有一个要为其执行活动的实体。这些活动是联系人(个人)或客户(企业)。然后,每个活动都将有一个联系人或一个为其完成活动的客户。例如,活动可能是“向 Spacely Sprockets(客户)发送感谢卡”或“向 Tony Almeida(联系人)发送营销资料”。
从该结构中,我们需要能够查询以查找给定员工必须执行的所有活动,并将它们列在一个关系中,最简单的形式如下所示:
-----------------------------------------------------
| Activity | Description | Recipient of Activity |
-----------------------------------------------------
这里的想法是避免为 Contact 和 Customer 设置两列,其中一列为空。
我希望我已经正确描述了这一点,因为这并不像乍看起来那么明显。
所以问题是:数据库的“正确”设计是什么?如何查询它以获取所需的信息?
【问题讨论】:
-
客户和联系人似乎有些混淆。它们是单独的表吗?客户和联系人之间是否有任何关系?它们是您需要使用的现有表,还是新的或可重构的表?
-
是的,客户和联系人是独立的实体。也许他们不应该是,但他们是。 ;-)
标签: sql database-design normalization