我有一个数据库结构问题,正在寻求一些意见。
假设有一种场景,用户将使用应用程序来请求 Material 。
需要跟踪请求者是谁。
请求者有三种可能的“类型”。个人(Person)、部门和供应商自行提供 Material 。
此外,供应商对象也需要与供应商相关。
所以想法是在请求表中有一个RequestedByID FK。但是,相关请求者的数据结构如此不同,如果仅将其制作为单个表(人员与部门和供应商具有不同的属性),则需要完全非规范化的表来关联。
我对如何处理这个问题有一些想法,但我认为 SO 社区会有一些很好的见解。
感谢您的所有帮助。
编辑:
伪结构:
请求
请求ID 请求者ID
部门
部门ID 部门现场1 部门字段2
人
人员ID 人员字段1 人员字段2
供应商
供应商ID 供应场1 补充字段2
部门、人员和供应商都有单独的表,因为它们的属性有很大不同。但他们每个人都可以作为一个请求的请求者(RequesterID)。如果没有一个(非规范化的表)充满不同的可能请求者,那么完成此操作的最佳方法是什么?
希望这有帮助。 。 。
最佳答案
您需要 ER 建模中的继承(又名类别、子类型、泛化层次结构等),如下所示:
这样,每种请求者类型都可以轻松拥有不同的字段和 FK,同时仍然只有一个 REQUEST 表。本质上,您可以改变请求者,而不必被迫也改变请求。
一般有3 ways to represent inheritance在物理数据库中。您所尝试的本质上是策略#1(将所有类合并到单个表中),但我建议策略#3(每个类都在单独的表中)。
关于数据库表设计思想。 。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11552816/