具有更新批准的数据库中的依赖循环

问题描述 投票:0回答:1

我正在努力解决 SQL 数据库模式中的依赖循环问题。情况是这样的:

我有文档、交易、付款方法和更新交易的表格。

交易链接文档和支付方式,并且它们的状态可以更新。

updated_transactions 表存储对交易的建议更新,引用原始交易以及建议更新的文档和付款方式 ID。 here is the design image

问题是外键关系创建了一个循环: 文档 > 交易 > Updated_transactions 文档 >updated_transactions

并且在

payment_methods > 交易 > 更新的交易

付款方式>更新的交易

这里提供了SQL代码供参考:

CREATE TABLE `documents`(
  `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY
);
CREATE TABLE `transactions`(
  `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `payment_method_id` BIGINT NOT NULL,
  `docment_id` BIGINT NOT NULL,
  `updated_state` BIGINT NOT NULL
);
CREATE TABLE `payment_methodes`(
  `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY
);
CREATE TABLE `updated_transactions`(
  `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `updated_payment_method_id` BIGINT NOT NULL,
  `updated_docment_id` BIGINT NOT NULL,
  `id_transaction` BIGINT NOT NULL
);

有哪些解决方案可以打破这种依赖循环?

sql database database-design relational-database entity-relationship
1个回答
0
投票

对我来说,这看起来像是经典的版本控制问题。

如果我正确理解你的概念描述,那么你的交易条目应该都是不可变的。如果必须将更改应用于事务,则将创建一个新的数据实体。

您的设计看起来比实际情况要复杂一些。

这个怎么样:

  • main_transaction_id
    (BIGINT) 列添加到您的
    transactions
  • version
    (INT) 列添加到您的
    transactions
  • 将 TABLE
    updated_transactions
    的数据迁移到
    transactions
    表中,然后忘记 TABLE
    updated_transactions

调整后的概念如何发挥作用?

每当您在语义上创建新事务时,列

main_transaction_id
都会获得与列
id
相同的值。版本获取值
1

每当您在语义上创建交易的新版本时,您都可以让 AUTO_INCRMENT 设置

id
列的值,但保留
main_transaction_id
字段不变,因为它已在原始交易条目中设置。不要忘记增加您的版本值。 EG

id 主要_交易_id 版本 ...
1 1 1 ...
2 1 2 ...
3 3 1 ...
4 1 3 ...
5 5 1 ...
6 5 2 ...

可选提案

created_at
表添加
transactions
DATETIME 列,因为它将帮助您记录交易的相关时间戳,以防出现投诉或维护问题。

© www.soinside.com 2019 - 2024. All rights reserved.