sql - 在 sql 中对具有状态的实体进行建模,其中实体在推进状态时具有更多属性(休眠)
问题描述
我需要能够对可以处于不同状态的单个实体进行建模。问题在于,在每个州,实体都有更多的字段归属于它。
就我而言,我有一个 Match 实体,其状态为“待定”、“准备就绪”、“正在运行”和“已完成”。未决比赛保存比赛开始的日期和时间以及将托管在哪个服务器上,准备好的比赛保存将参加比赛的球队,正在运行的比赛保存比赛的实时比分,因为它正在运行,并且结束的比赛将保持比赛结束和获胜者的时间。
总而言之,匹配实体经历了一种管道,在不同的阶段,新的字段被添加到其中。
一种方法是有一个大的匹配表,其中包含所有状态的所有字段,这些字段随着匹配推进一个状态而被填写。这意味着该表将有许多空值,但它们最终都会在匹配处于其最终状态时被填满。
另一种方法是为每个匹配阶段(PendingMatch、ReadyMatch、RunningMatch 等)创建一个表,其中仅包含与每个阶段相关的字段。由于我使用的是休眠,每个状态都有自己的类,所以当加载匹配时,您只能访问与该状态相关的字段。然而,这种方法的问题是我将跨表重复列,并且为了推进匹配状态,我必须将其从当前表中弹出并将其插入到下一个表中,其中包含该状态的新数据。
这两种解决方案似乎都不理想,但我看不到任何其他建模方式。我敢肯定这是一个常见的问题,但由于它的确切描述是如此的拗口,所以很难在上面找到任何东西!
如果有人可以解释哪种方法最好,或者可能是一种全新的方法,那将不胜感激。
提前致谢!
耶帕迪
ps 我正在使用休眠 ORM 工具对此进行建模
解决方案
推荐阅读
- python - 使用 Pandas,我如何将现有数据框行添加到具有现有值的另一个数据框行?
- avaloniaui - 如何在 DataGrid 中的 Avalonia Ui 中使用组合框制作列?
- matplotlib - 如何根据 matplotlib 中的间隔绘制线条?
- node.js - 无论如何在 Express.js 中使用自定义域
- vue.js - Vue Native:在浏览器中运行时出错
- python - Python Pandas Merge --- 哪些行没有被合并?
- python - 我的代码包含 if 块和替换功能比我预期的要好,但我不知道为什么
- mongodb - 如何在 mongodb 中找到任何子字段?
- c++ - 我怎样才能拥有超过 1 种数据类型的 C++ 集?
- laravel - 后期的 Laravel Nova 价值指标