【发布时间】:2021-05-19 12:44:08
【问题描述】:
这是一个与设计相关的问题,而不是与实际编程相关的问题。假设我在系统中有一个用户配置文件,并且此配置文件涉及基本信息和高级信息。假设它还将涉及对此数据的基本搜索和高级搜索。在这种情况下,最好使用一个大实体而不区分基本数据和高级数据,还是将这些信息拆分为两个实体,其中高级继承自基本数据?再次考虑将在所有这些数据上执行搜索。还要考虑“高级实体”可能涉及 Enum 或 Set 之类的字段。在这些情况下可以使用 SET 和 ENUM 字段,还是应该进一步拆分我的高级实体/表以进一步一对一关系?
这里是一个例子:
Profile (base entity)
+- Location (will probably poit to a location table)
- Birthdate
- Sex
- Avatar
- Pictures (will point to pictures entity)
Advanced profile (extends Profile)
+- eye_color (enum like)
- hair_color (enum like)
- weight
- heigth
- favorite_hobbies (set like)
- favorite_quote
- known_programming_languages (set like)
等等!这个例子很基础,但实际项目会涉及更多的数据。
您对设计这些东西的最佳方式有什么建议吗?
【问题讨论】:
-
II 建议不要使用 set datatype..
-
答案取决于这些表的实际使用情况,很难给你一个明确的答案!
-
只有对量化数据有概念的人才能做出合理的决定:会有多少用户,具有基本和高级属性的典型用户元组有多长,查询应该多快,该表将增长多少以及在什么时间等。我也建议不要使用集合数据类型。
-
将配置文件表拆分为多个表的一个原因是第二个表中的列是可选的,如果配置文件是一个表,则大多数情况下为空。
标签: database-design relational-database