数据库表设计思想。 。

标签 database database-design

我有一个数据库结构问题,正在寻求一些意见。

假设有一种场景,用户将使用应用程序来请求 Material 。

需要跟踪请求者是谁。

请求者有三种可能的“类型”。个人(Person)、部门和供应商自行提供 Material 。

此外,供应商对象也需要与供应商相关。

所以想法是在请求表中有一个RequestedByID FK。但是,相关请求者的数据结构如此不同,如果仅将其制作为单个表(人员与部门和供应商具有不同的属性),则需要完全非规范化的表来关联。

我对如何处理这个问题有一些想法,但我认为 SO 社区会有一些很好的见解。

感谢您的所有帮助。

编辑:

伪结构:

请求

请求ID 请求者ID

部门

部门ID 部门现场1 部门字段2

人员ID 人员字段1 人员字段2

供应商

供应商ID 供应场1 补充字段2

部门、人员和供应商都有单独的表,因为它们的属性有很大不同。但他们每个人都可以作为一个请求的请求者(RequesterID)。如果没有一个(非规范化的表)充满不同的可能请求者,那么完成此操作的最佳方法是什么?

希望这有帮助。 。 。

最佳答案

您需要 ER 建模中的继承(又名类别、子类型、泛化层次结构等),如下所示:

enter image description here

这样,每种请求者类型都可以轻松拥有不同的字段和 FK,同时仍然只有一个 REQUEST 表。本质上,您可以改变请求者,而不必被迫也改变请求。

一般有3 ways to represent inheritance在物理数据库中。您所尝试的本质上是策略#1(将所有类合并到单个表中),但我建议策略#3(每个类都在单独的表中)。

关于数据库表设计思想。 。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11552816/

相关文章:

MySQL LOAD DATA IN FILE 未插入所有值

database - CAP定理或简单英语的布鲁尔定理?

mysql - 我应该为 0 到 3 之间的值使用什么数据类型

php - MySQL合并查询并忽略重复项

mysql - 查询结果重复

c# - 组合来自不同表的多个 Select 语句

database - Azure:上下文正在 Code First 模式下使用从 EDMX 生成的代码

mysql - 无论如何,我可以使用单个 MySQL 查询在多个表中插入记录吗?

sql - 我应该如何在数据库中记录 'all' 组可见的项目/产品?

postgresql - 避免在多台机器中 SERIAL 列重复递增