这是制作大手提包 table 的好习惯吗?

Is this a good practice to create a big holdall table?

我在一家企业实习,我在 SQL Oracle 数据库上进行 select 查询,我想退后一步以确定什么是好的做法避免这个。

他们用不同类型的代码制作了一个 table,例如:

ID       |  TYPE       | Code       |
-------------------------------------
1        |   1         | red        |
2        |   1         | white      |
3        |   1         | blue       |
4        |   1         | green      |
5        |   2         | dept1      |
6        |   2         | dept2      |
7        |   2         | dept3      |
8        |   3         | prodtype1  |
9        |   3         | prodtype2  |
10       |   3         | prodtype3  |

如您所见,每个代码的信息很少。这是将信息很少的小 table 重新组合到一个大信息中,并在 select 时通过列 "type" 上的 WHERE 子句检索我们的信息的有效做法吗? 按照我的规模,我必须创建三个 table(颜色、部门、生产类型),但信息很少。养三个小table会不会消耗很多资源?使用包含不同 "kind" 信息的大 table 从长远来看会导致大问题吗?

我们同时使用 key/value table 和多个 table。这取决于你需要什么。

例如,你有一个"dept1"。您想保存有关您部门的更多信息吗?然后用它的位置创建一个新的 table "Department" 并为这个新的 table.

创建一个外键是有意义的

至于性能,只要您的索引正确,两者都应该可以正常工作。

如前所述,这是一种通常被视为反模式的实体-属性-值模式。最诙谐的谴责可以在 https://www.red-gate.com/simple-talk/blogs/when-the-fever-is-over-and-ones-work-is-done/

阅读

一个 True Lookup 设计在完全或不增加巨大复杂性的情况下都难以实施参照完整性。

该设计代表数据库中的数据库,有时称为内部系统效应。

在特定且有限的用例或情况下,EAV 模型很有用。这些往往是在实体的属性可以非常自由的情况下。

  • 大量数据 类 在属性方面几乎没有共同点。
  • 每个对象的少量属性。
  • 流动的业务需求或难以确定数据需求使得传统数据建模变得困难或不切实际。
  • 实体内的更改率很低,仅限于插入和删除。
  • 与模型中对象的交互主要在实体级别进行,即检索整个实体,很少在属性级别执行过滤。

它工作的系统是

  • 调查和问卷
  • 产品评论系统
  • 应用程序配置系统
  • 医疗系统

这些天我会质疑 RDBMS 是否是这些用例的正确解决方案。诸如文档存储之类的 NOSQL 解决方案更适合上述用例。