这种数据库建模叫什么,它有什么好处?
What is this kind of database modelling called and how is it beneficial?
我搬到了一个新的工作场所,我们有这种特殊的数据库架构。数据库架构由4张表驱动
1) 大师类型
在这里定义列代码、名称和描述
第 1 行 - EmpID - 员工的 ID
第 2 行 - EmpName - 员工姓名
2) 主类型数据
此处您将列代码值定义为行
第 1 行 - EmpId - 123
第 2 行 - EmpId - 124
第 3 行 - 员工姓名 - 约翰
第 4 行 - EmpName - Jason
3) 主类型映射
这里映射哪些列可以映射
第 1 行 - EmpId - EmpName
4) 主类型映射数据
在这里映射列的值
第 1 行 - 主类型数据的 ID 第 1 行 - 主类型数据的 ID 第 3 行
第 2 行 - 主类型数据的 ID 第 2 行 - 主类型数据的 ID 第 4 行
这样您可以在结构中创建任意数量的 table/columns/relationship。有谁知道这种数据库架构叫什么?有什么好处?在看到它为添加、维护和理解数据增加了多少复杂性之后,我发现很难发现它的好处。
有人告诉我,它可以让您免于创建数百个表和存储表中那些可能为空的列。我广泛从事 RDBMS 方面的工作,没有使用 NoSQL DB 的经验,但我认为这就是 NoSQL 在幕后的工作方式?
"I am finding it hard to find it's benefits, after seeing how much complexity it adds in to adding, maintaining and understanding the data."
关于这个可怕的想法,您只需要记住这一点。 (顺便说一下,它通常被标记为 "EAV" 或 "Entity Attribute Value" 的通用名称。(google 这个词你会发现很多赞美和很多呕吐.你评估和判断各自的论点。)
"Generic name" 因为实际上可能有很多变体,它们都在一些小细节上有所不同。举例来说:你的是一个变体,它用记录的实体属性值之间的 "mapping" 替换了通常存在的 "entity ID" 概念。你对该映射的概念是它是二进制的(对于称为 "mapping" 的东西并不罕见),如果你想 "map" 两个以上的实体属性值在一起,这会带来额外的问题。)
也就是说,如果您处于以下所有情况都为真的罕见情况:
- 你真的在面对 "sparse" 数据
-数据的性质一直在变化(一年一次不是"all the time")
- 没有可用的 dba 技能以正确的方式解决这个问题(= dba 方式),或者以正确的方式解决它对应用程序的影响太大且令人生畏
- 并且不可避免地缺乏对数据的任何形式的完整性强制执行对业务来说不是问题
那么您可能会使用这样的方案来解决您的问题。
我搬到了一个新的工作场所,我们有这种特殊的数据库架构。数据库架构由4张表驱动
1) 大师类型
在这里定义列代码、名称和描述
第 1 行 - EmpID - 员工的 ID
第 2 行 - EmpName - 员工姓名
2) 主类型数据
此处您将列代码值定义为行
第 1 行 - EmpId - 123
第 2 行 - EmpId - 124
第 3 行 - 员工姓名 - 约翰
第 4 行 - EmpName - Jason
3) 主类型映射
这里映射哪些列可以映射
第 1 行 - EmpId - EmpName
4) 主类型映射数据
在这里映射列的值
第 1 行 - 主类型数据的 ID 第 1 行 - 主类型数据的 ID 第 3 行
第 2 行 - 主类型数据的 ID 第 2 行 - 主类型数据的 ID 第 4 行
这样您可以在结构中创建任意数量的 table/columns/relationship。有谁知道这种数据库架构叫什么?有什么好处?在看到它为添加、维护和理解数据增加了多少复杂性之后,我发现很难发现它的好处。
有人告诉我,它可以让您免于创建数百个表和存储表中那些可能为空的列。我广泛从事 RDBMS 方面的工作,没有使用 NoSQL DB 的经验,但我认为这就是 NoSQL 在幕后的工作方式?
"I am finding it hard to find it's benefits, after seeing how much complexity it adds in to adding, maintaining and understanding the data."
关于这个可怕的想法,您只需要记住这一点。 (顺便说一下,它通常被标记为 "EAV" 或 "Entity Attribute Value" 的通用名称。(google 这个词你会发现很多赞美和很多呕吐.你评估和判断各自的论点。)
"Generic name" 因为实际上可能有很多变体,它们都在一些小细节上有所不同。举例来说:你的是一个变体,它用记录的实体属性值之间的 "mapping" 替换了通常存在的 "entity ID" 概念。你对该映射的概念是它是二进制的(对于称为 "mapping" 的东西并不罕见),如果你想 "map" 两个以上的实体属性值在一起,这会带来额外的问题。)
也就是说,如果您处于以下所有情况都为真的罕见情况:
- 你真的在面对 "sparse" 数据
-数据的性质一直在变化(一年一次不是"all the time")
- 没有可用的 dba 技能以正确的方式解决这个问题(= dba 方式),或者以正确的方式解决它对应用程序的影响太大且令人生畏
- 并且不可避免地缺乏对数据的任何形式的完整性强制执行对业务来说不是问题
那么您可能会使用这样的方案来解决您的问题。