gpt4 book ai didi

mysql - 数据库设计: Storing previous version versus storing first version in version control systems

转载 作者:行者123 更新时间:2023-11-29 16:28:45 26 4
gpt4 key购买 nike

我对使用数据库和数据库设计/创建模式非常陌生,我非常感谢一些建议/建议。我正在创建一个应用程序,用户在其中输入数据,并向用户提供该数据的版本控制。用户可以进入并恢复更改或更新值(有点像 git)等,我正在创建一个数据库结构来存储这些值。目前我有两种不同的可能性,但我不确定哪一种更有优势。

第一种可能性:存储指向先前版本的指针

数据表

id 整数字段

数据内容文本字段

version_control_first_versionforeignKeyField(Data_Version_Control_Table)

Data_Version_Control_Table

id 整数字段

previous_version SelfReferentialForeignKey 可为空

在第一种可能性中,我在版本控制表中存储了指向数据先前版本的链接。随着新版本开始涌入,我在版本控制表中创建新行,并且对于每个新行,我都将该行链接到先前版本的行。数据表仅保存最新版本的数据(我决定将当前版本保存在不同的表中,因为这是适合我的用例的最佳方法,并且版本控制表应该比当前版本表大得多,因为那里有很多条目)。

第二种可能性:存储指向根/第一个版本的指针

数据表

id 整数字段

数据内容文本字段

version_control_first_version ForeginKeyField(Data_Version_Control_Table)

Data_Version_Control_Table

id 整数字段

first_version SelfReferentialForeignKey 可空

版本号整数字段

对于此设计,对于相同数据的所有版本,我存储指向数据的第一个版本的指针,而不是先前版本和版本号。当我想回滚到特定版本时,我会跳转所需的版本数,以到达我正在寻找的版本。这是这里唯一的区别,其余部分几乎相同。我还可以补充一点,如果这可能有帮助的话,我也会存储这些版本的创建日期时间。

这些选项是否有任何显着的优点或缺点,可以证明使用其中一种比另一种更合理?如果我使用其中一种而不是另一种,性能会受到影响吗?哪一种模型可以实现更快、更轻松的查询,哪一种模型是最佳模型?这些模型有什么缺陷吗?

感谢您提前提供的帮助,祝您度过愉快的一天:)

最佳答案

在这两种情况下,您都试图模拟关系数据库中的指针,其中:

  • 无法通过数据库约束轻松执行。例如,您无法以声明方式保证 version_control_first_versionfirst_version 确实指向第一个版本或 previous_version code> 不形成分支或循环。
  • 不太适合索引的工作方式。例如,遍历 previous_version 的“链表”将需要递归 CTE 或重复查询。 ˙first_version` 在这方面更好,但仍然不必要地复杂。

IMO,最好将版本表设为 weak entity :

CREATE TABLE Data_Table (
id INT PRIMARY KEY
-- Other fields...
);

CREATE TABLE Data_Version_Control_Table (
id INT REFERENCES Data_Table,
version_number INT,
PRIMARY KEY (id, version_number)
-- Other fields...
);

然后:

  • 通过查找给定 idMIN(version_number) 可以有效地识别第一个版本。 MIN/MAX 在 B 树中查找的效率很高,本质上相当于索引查找。
  • 也可以有效地找到以前的版本(通过搜索以前的version_number)。这只是一个索引查找。
  • 通过搜索对象的 id 可以有效地找到同一对象的所有版本。这只是索引范围扫描,不需要“列表遍历”(而且作为奖励,版本已经处于正确的顺序)。

关于mysql - 数据库设计: Storing previous version versus storing first version in version control systems,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54069583/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com