【问题标题】:Best practice for data version control in sql and c#sql和c#中数据版本控制的最佳实践
【发布时间】:2024-01-14 11:14:01
【问题描述】:

在这个问题中,我想弄清楚,在 sql 中控制数据版本的最佳做法是什么。我们使用的是关系数据库(Sybase SAP Sql Anywhere)。问题是,我们不知道应该在软件的哪一层实现版本控制系统。我们想编写一个通用系统,以便对所有类型的数据都进行版本控制,而对每种类型(类型:联系人、约会等)进行少量工作。

以下是我们想出的选项: 1. 使用实体框架,计算两个模型的差异。然后将差异保存到数据库 2. 使用触发器,比较新旧数据,并将它们保存在单独的表中 3. 使用程序来证明更改并将它们也保存在单独的表格中

我知道这是一个非常笼统的问题,但也许有人对我们的问题有一个好主意和解决方案。

编辑

重要提示:我想创建数据本身的版本,而不是 sql 架构或某些 sql 代码。

EDIT2

让我们使用以下简单示例。我有一个很小的联系表(不是我们真正的联系表):

CREATE TABLE Contact
(
    "GUID" Uniqueidentifier NOT NULL UNIQUE,
    "ContactId" BIGINT NOT NULL Identity(1,1),
    "Version" INTEGER NOT NULL,
    "FirstName" VARCHAR(100),
    "LastName" VARCHAR(200),
    "Address" VARCHAR(400),
    PRIMARY KEY (ContactId, Version)
);

不,每次有人更改联系人对象时,我都想保存它的新版本。但我正在寻找一个通用的解决方案。这必须为每种类型实现。

谢谢!

【问题讨论】:

  • 相关列表中的前五个问题中有四个 ===>>> 似乎正在讨论这个问题。它们都没有包含有用的信息吗?您提出的问题非常广泛,似乎更像是一个讨论问题而不是一个具体问题。
  • 不,这个问题是关于结构和sql-code的。我想对我的数据本身进行版本控制。
  • 数据?我相信这样做被称为做备份。 :-)
  • 不,我们要记录,哪个人对数据进行了更改。例如更改一个电话号码必须是tracket。所以版本控制看起来像一种日志,或数据历史。如果某些员工犯了错误,客户希望转移到旧数据或恢复版本。这不像是备份。
  • 这是一个审计表。在 数据库审计表 上进行 Google 搜索应该会找到一些信息。您也应该将上次评论中的详细信息放入问题中;这与您在问题中提出的含义完全不同。

标签: c# sql version-control sqlanywhere revision-history


【解决方案1】:

我们有同样的问题,并尝试通过将版本和分支 ID 存储在我们想要关注的每个实体中来解决它。 在不同的表中,我们将版本及其前身版本 id 存储起来,这样我们就可以追踪分支在哪里相遇。 另外,我们有一个带有版本号的审计跟踪。

我想知道这是否具有您需要的相同元素以及自您提出问题和上次编辑以来您是否进步了。

感谢您建议将唯一 ID 和版本号结合起来

【讨论】:

    【解决方案2】:

    作为一个生活和呼吸数据库源代码控制的人(DBmaestro 出色团队的一员),我可以推荐 2 种方法的组合,具体取决于您运行 delta 的方式。

    1. 使用触发器,您应该保存部署所需的所有信息(如果使用缓慢更改维度或整个表格内容)
    2. 使用分析差异并知道生成相关增量脚本的程序

    【讨论】:

      最近更新 更多