如何管理同一条记录的多个版本

2024-02-05

我正在为一家公司做短期合同工作,该公司试图为其数据库记录实施签入/签出类型的工作流程。

这是它应该如何工作的......

  1. 用户在应用程序中创建一个新实体。除了主实体表之外,还将填充大约 20 个相关表。
  2. 创建实体后,用户会将其标记为主实体。
  3. 另一个用户只能通过“签出”实体来对主实体进行更改。多个用户可以同时结帐该实体。
  4. 一旦用户对实体进行了所有必要的更改,他们就会将其置于“需要批准”状态。
  5. 授权用户审查实体后,他们可以将其提升为主实体,这会将原始记录置于逻辑删除状态。

他们当前完成“签出”的方式是复制所有表中的实体记录。主键包括 EntityID + EntityDate,因此它们使用相同的 EntityID 和更新的 EntityDate 复制所有相关表中的实体记录,并为其赋予“已签出”状态。当记录进入下一个状态(需要批准)时,重复会再次发生。最终它将被提升为master,此时最终记录被标记为master,而原始master被标记为死亡。

这个设计对我来说似乎很可怕,但我理解他们为什么这样做。当有人从应用程序内查找实体时,他们需要查看该实体的所有当前版本。这是实现这一目标的一种非常简单的方法。但它们在同一个表中多次表示同一实体的事实并不适合我,而且它们复制每条数据而不是仅存储增量的事实也不适合我。

我很想听听您对设计的反应,无论是积极的还是消极的。

我也将不胜感激您可以向我指出的任何资源,这些资源可能有助于了解其他人如何实现这种机制。

Thanks!
Darvis


我曾经开发过这样的系统,该系统支持一家非常大的银行的静态交易数据。在这种情况下,静态数据是交易对手的详细信息、标准结算指令、货币(不是外汇汇率)等。数据库中的每个实体都是版本化的,更改实体涉及创建新版本、更改该版本并获取版本已批准。然而,他们并没有让多人同时创建版本。

这导致数据库极其复杂,每个连接都必须考虑版本和批准状态。事实上,我为他们编写的软件是中间件,它将复杂的版本化数据抽象为最终用户应用程序可以实际使用的东西。

唯一可能使情况变得更糟的是存储增量而不是完整的版本化对象。所以这个答案的要点是——不要尝试实现增量!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何管理同一条记录的多个版本 的相关文章

  • 删除或更改 ETL 中的记录

    我有一个表 我在上面构建了 ETL 服务 货物记录 到达 离开 进入表格 我已经这样做了 我的桌子将被删除 当项目标识符第二次到达数据库时 两条记录都被删除 label cost time x2 29 14 5 2020 01 00 00
  • SQL 中的代码重用和模块化

    代码重用和模块化对于 SQL 存储过程编程来说是一个好主意吗 如果是这样 将这些功能添加到 SQL 存储过程代码库的最佳方法是什么 我通常为常见且重复的任务创建标量值函数 我发现它不仅可以简化与现有程序类似的新程序的开发 而且还有助于错误跟
  • Oracle中如何选择前100行?

    我的要求是获取每个客户的最新订单 然后获取前100条记录 我编写了一个如下查询来获取每个客户的最新订单 内部查询工作正常 但我不知道如何根据结果获得前 100 名 SELECT FROM SELECT id client id ROW NU
  • 随机排列每行的列值

    我正在使用 C NET 开发多项选择题考试生成器 每次做出报告时 都会在数据库中随机挑选问题 并随机调整选项 我可以做随机问题部分 但我不能做选择的洗牌 我有一张表 其中一行如下 question answer distractor1 di
  • 在 git 中管理 schema.rb 的首选方法是什么?

    我不想添加schema rb to gitignore 因为我希望能够从该文件加载新的数据库架构 然而 保持检查状态会导致各种虚假冲突 而这些冲突很容易通过新的解决方案解决 db migrate reset 基本上我想要一种方法 将 sch
  • JbdcTemplate - 带有动态 SQL 查询的PreparedStatements

    I know jdbcTemplate可以用来创建PreparedStatements如果你这样设置 i e private JdbcTemplate jdbcTemplate String sqlQuery Select from tab
  • TSQL:无法对 COUNT(*) 执行聚合函数 AVG 来查找一天中最繁忙的时间

    考虑一个保存日志数据的 SQL Server 表 重要的部分是 CREATE TABLE dbo CustomerLog ID int IDENTITY 1 1 NOT NULL CustID int NOT NULL VisitDate
  • 法语和西班牙语的特殊字符可以保存在 varchar 中吗?

    法语和西班牙语中有普通英语中不使用的特殊字符 重音元音等 varchar 是否支持这些字符 或者我需要一个 nvarchar 吗 注 我愿意NOT希望讨论我是否应该使用 nvarchar 还是 varchar 您在谈论什么 SQL 实现 我
  • VIEW for 表结合 UNION ALL 的 MySQL 性能

    假设我有 2 张桌子MySQL create table persons id bigint unsigned not null auto increment first name varchar 64 surname varchar 64
  • 在bigquery中比较两个表的有效方法

    我有兴趣比较两个表是否包含相同的数据 我可以这样做 standardSQL SELECT key1 key2 FROM SELECT table1 key1 table1 key2 table1 column1 table2 column1
  • 如何显示 RSpec 测试生成的 SQL 查询日志?

    我正在为我的 Rails 3 应用程序编写规范 我想测试数据库事务是否真的有效 如果能够看到我的应用程序在规范驱动下生成的 sql 查询 这将非常有帮助 有没有办法像在 Rails 控制台中一样查看查询 我正在使用 Rails 3 0 9
  • If Else 条件的 SQLite 语法

    我正在使用 SQLite 数据库 我的表有一个名为 密码 的文本列 早些时候 为了检索我用来执行简单操作的值select from myTable询问 但现在的要求是 如果Password值不是NULL那么我需要将其显示为 是 或 否 它是
  • 如何限制两个表之间一对多关系中的多个数量?

    我有一个带有两个 MySql 表的 MySQL 数据库 第一个是第一个表 表 A 有一列具有唯一值 从值 从 1 到 n 在第二个表 2 表 B 中 我有两列 在第一个表中我有一个名称 在第二个我的值从 1 到 n 如果我在 中添加一个值
  • SQL Server查询麻烦,多对多关系

    不知道如何用一行字来表达这个问题 对标题表示歉意 我的数据库中有3个表 例如 Shop Item 商店库存 Shop 和 Item 具有多对多关系 因此 ShopStock 表将它们链接起来 ShopStock 中的字段是 ID ShopI
  • MySQL如何根据字段是否存在来插入新记录或更新字段?

    我正在尝试实现一个评级系统 在数据库表中保留以下两个字段 评级 当前评级 num rates 迄今为止提交的评分数量 UPDATE mytable SET rating rating num rates theRating num rate
  • SQL 更新数据集中的位置

    id1 id2 bool 1 1 F 1 2 F 2 1 F UPDATE table name SET bool T WHERE id1 id2 IN 1 1 2 1 Need work here 所以基本上我想选择条件为 id1 id2
  • 插入后触发更新表列?

    在同一个表中添加任何记录后 我需要更新表中的列 这是我的sql代码 CREATE TRIGGER dbo EmployeeInsert ON dbo APP Employees AFTER INSERT AS BEGIN SET NOCOU
  • SQL 用新值替换旧值

    我有一个名为tbl Products 其中有一列名为articlenumber并且充满了像这样的数字s401 s402 etc 我生成了一个包含新商品编号的列表 它将替换旧的商品编号 s401 I00010 s402 I00020 s403
  • 使用另一个表中的数据查找并替换 MySQL 中的字符串

    我有两个 MySQL 表 我想使用另一个表中的数据查找和替换一个表中的文本字符串 Table texts messages thx guys i think u r great thx again u rock Table dictiona
  • 为什么 sql 字段名称中不应该包含逗号?

    人们一直告诉我列名中不应包含空格 我只是想知道 这是为什么 这是我为学校创建的一些数据库表遇到的问题 字段名称包括 Preble 和 Darke 相反 它们需要是 普雷布尔县 俄亥俄州 和 达克县 俄亥俄州 如果它们是行名称 我只需创建一个

随机推荐

  • xCode 中存在重复符号,但不存在重复符号

    问题Xcode 版本 4 6 1 4H512 抱怨重复符号问题 重复符号 OBJC METACLASS PacksStoreHelper 位于 Users shannoga Library Developer Xcode DerivedDa
  • 如何在 flutter 中使用展示案例视图?

    I use 展示案例查看 https github com simformsolutions flutter showcaseview打包在我的应用程序中 并想展示一次 就在第一次启动之后 我怎样才能只执行一次而不在下次启动时显示它 ove
  • MapViewOfFile 返回什么? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么加载程序无法加载到所需位置 https stackoverflow com questions 9698496 why wont the loader load at the desired l
  • 为什么当列包含空字符串时bcp输出null,当列包含空字符串时bcp输出空字符串?

    这让我觉得非常奇怪的行为 在发现这个之前我花了一段时间检查代码中的错误 out 从数据库表或视图复制到文件 如果指定现有文件 则该文件将被覆盖 提取数据时 请注意 bcp 实用程序将空字符串表示为 null 将 null 字符串表示为空字符
  • Excel 搜索包含子字符串的多行

    我有一个包含 2 张纸的 Excel 文件 第一个获得了列中的关键字列表 第二个在一个列上有句子 在另一列上有一个 id 因此 这两张纸看起来像这样 Sheet 1 Sheet 2 A A B the 15587 The cat is wa
  • Gomock无法使用类型map[string]*mockFoo作为map[string]foo

    我正在使用 gomock 并且我有一段希望测试的示例代码 type StructA struct client map string Foo type Foo interface foo methodFoo string func a st
  • 如何从 S3 存储桶中递归删除文件

    我在 S3 中有以下文件夹结构 有没有办法递归删除某个文件夹下的所有文件 比如foo bar1 or foo or foo bar2 1 foo bar1 1 foo bar1 2 foo bar1 3 foo bar2 1 foo bar
  • OnsenUi Angular 和登录

    我正在尝试使用 onsen cordova 开发移动应用程序 我需要的是 当应用程序启动时 它会加载login html页面 如果应用程序检测到用户已登录 则会重定向到 home html 对于每个 受保护的页面 我想调用一个检测用户是否已
  • Mac 版 Java 中的文件输入

    我们现在正在编程课上学习文件输入和输出 但我有一台 Macbook Pro 我了解如何执行此操作 并且可以在 Windows 上执行此操作 但我无法找到如何在 Mac 上执行此操作 我只是似乎不知道在 File Fred new File
  • 如何从 Java 调用 .NET 代码?

    我并不是在寻找像网络服务这样的常见答案 我正在寻找在同一台机器上运行的轻型解决方案 编辑 我正在寻找 Java 中调用 NET 方法的方法 我是作者jni4net http jni4net sf net JVM和CLR之间的开源进程间桥梁
  • 将 AppCompat 主题应用于 PreferenceFragment 中的个人首选项

    我一直在努力争取我的PreferenceFragment与我的应用程序的其余部分具有相同的基于材质的主题和样式 通过 AppCompat 这PreferenceFragment我用来管理所有应用程序设置的工具如下所示 正如您从上面的屏幕截图
  • 如何在布局中包含布局?

    如何在Android布局中包含布局 我正在创建通用布局 我想将该布局包含在另一个页面中 Edit 正如评论中正确要求的更多信息 使用include tag
  • JavaScript 中的匿名函数命名有何不同?

    我正在分析 John Resig 网站上的以下两个 url 但我不明白为匿名函数命名有何不同 我的理解是 赋予匿名函数的名称只能在函数定义内部使用 而不能在函数定义之外使用 但在以下链接中它会产生巨大的差异 http ejohn org a
  • 核心数据:迁移后,额外的迁移代码

    我希望从版本 1 数据模型迁移到版本 2 但迁移完成后我希望执行一些自定义迁移代码 我如何知道迁移是否 何时发生 是否有migrationHasCompleed委托方法或通知 为了兴趣 我希望执行调整数据库中 png 大小的自定义迁移代码
  • 包括函数已知参数的不确定性,以在 python 中使用 curve_fit 进行拟合

    我在Python中使用不确定性包 我有一个像 A x N 这样的函数 其中 N 是一个具有不确定性的固定参数 例如 N 1 0 0 1 我想通过将方程拟合到数据集 y 来获得参数 A 但有错误 yerr 我尝试使用 uncertaintie
  • 两个java库互相导入?

    我正在开发一个遗留框架 显然有两个相互依赖的库 我的意思是libA进口于libB and libB进口于libA 首先我认为这是一个糟糕的设计 但为什么有人会这样做呢 相反 哪些条件可以导致某人写下此内容 edit 每个库都依赖于另一个库中
  • ListTile 的 SelectedTileColor 不起作用

    我有一个ListView其中包含ListTile被选中时会改变颜色 然而 在下面的代码中 当有中间时Container or SizedBox在 之间ListView和Scaffold SelectedTileColor不起作用 我跟着这个
  • Flink 中复杂拓扑(多输入)的集成测试

    我需要为 flink 流拓扑编写单元测试 这基本上是一个CoFlatMapFunction 并且它有 2 个输入 我尝试从这个页面中获得一些灵感 https ci apache org projects flink flink docs s
  • 如何将依赖项传递给@auth0-angular-jwt?

    所以 我正在迁移使用的 旧 代码HttpModule and angular2 jwt lib 以前 我可以做angular2 jwt使用以下配置 export function authHttpServiceFactory http Ht
  • 如何管理同一条记录的多个版本

    我正在为一家公司做短期合同工作 该公司试图为其数据库记录实施签入 签出类型的工作流程 这是它应该如何工作的 用户在应用程序中创建一个新实体 除了主实体表之外 还将填充大约 20 个相关表 创建实体后 用户会将其标记为主实体 另一个用户只能通