'skinny table'设计可以用视图来补偿吗?



>上下文:用于个人学习目的的简单网络应用程序游戏,使用postgres。我可以随心所欲地设计它。

2 个表 1 个视图(还有其他不重要的表视图引用)

Table: Research
col: research_id (foreign key to an outside table)
col: category (integer foreign key to category table)
col: percent (integer)
constraint (unique combination of the three columns)
Table: Category
col: category_id (primary key auto inc)
col: name(varchar(255))

注意:此表的存在是为了捕获我想要在业务逻辑中进行的 4 类研究,我认为在数据库中硬编码为列不是最佳实践

View: Research_view
col: research_id (from research table)
col: foo1 (one of the categories from category table)
col: foo2 (etc...)
col: other cols from other joins

注释:具有适当使用上述表格的插入/更新/删除语句

担心研究表本身就有资格称为"瘦桌子"(直到我刚刚在伊巴蒂斯曼宁的书中看到它才听说过这个词)。例如,其中的测试数据如下所示:
| research_id | percent | category |
| 1 | 25 | 1 |
| 1 | 25 | 2 |
| 1 | 25 | 3 |
| 1 | 25 | 4 |
| 2 | 20 | 1 |
| 2 | 30 | 2 |
| 2 | 25 | 3 |
| 2 | 25 | 4 |

1) 让表中的所有列共同定义唯一条目是否有意义?
2)这对你来说"闻起来"吗?

几个注意事项:

约束(三列的唯一组合)

具有包含单列主键的唯一约束是没有意义的。 包含该列将导致每一行都是唯一的。

notes: this table exists to capture the 4 categories of research I want in business logic and which I assume is not best practice to hardcode as columns in the db

如果研究项目/实体需要定义所有四个类别才能有效,则它们绝对应该是研究表中的列。 我无法从你的陈述中确切地判断情况是否如此,但如果孤立地看,你的假设是错误的。 让您的模型尽可能反映现实。

另一个因素是是否要求在部署后向系统添加其他类别。 类别是灵活还是固定,绝对应该影响设计。

1)将所有列放在一个表中是否有意义 定义唯一条目?

我会说这并不常见,但可以想象在某些情况下可能是合适的。

2)这对你来说"闻起来"吗?

没有更多细节很难说。

综上所述,如果目的是查看和添加具有所有四个类别的研究项目,我会(再次)考虑这四个类别是否是研究实体的语义属性。

作为一个随机示例,身高和体重等内容可能被视为人员的类别,但它们可能会平坦地存储在人员表中,而不是单独的表中。

最新更新