设计此特定数据库/ SQL问题的最佳方法是什么?

Nic*_*ges 6 sql database-design normalization

这是一个令我们困惑的棘手的规范化/ SQL /数据库设计问题.我希望我能说得对.

你有一套活动.他们是需要做的事情 - 一个荣耀的TODO名单.任何给定的活动都可以分配给员工.

每项活动也都有活动进行的活动.这些活动是联系人(个人)或客户(业务).然后,每个活动都将有一个联系人或一个将为其开展活动的客户.例如,活动可能是"向Spacely Sprockets(客户)发送感谢卡"或"向Tony Almeida(联系人)发送营销文献".

从那个结构中,我们需要能够查询以查找给定员工必须执行的所有活动,将它们列在一个单独的关系中,就像这样最简单的形式:

-----------------------------------------------------
| Activity | Description    | Recipient of Activity |
-----------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

这里的想法是避免为Contact和Customer提供两列,其中一列为null.

我希望我已经正确地描述了这一点,因为这并不像乍看之下那么明显.

所以问题是:数据库的"正确"设计是什么?如何查询它以获取所要求的信息?

Joe*_*lli 9

这听起来像是一个基本的多对多关系,我就是这样建模的.

替代文字


Joh*_*ock 2

这是我的尝试:

基本上,您需要将活动与 1 名(联系人或客户)和 1 名负责该活动的员工相关联。请注意,您可以在这样的模型中处理引用约束。

另请注意,我添加了一个连接所有人员和地点的businessEntity 表。(有时有用但不是必需的)。放置businessEntity 表的原因是您可以简单地将活动中的负责人和接收者引用到businessEntity,现在您可以让任何人和所有人员或地点执行和接收活动。

替代文本