我正在尝试将以下实体模型付诸实践:
我们有一个 Payments 列表,每个 Payment 属于某个商店并且属于某种支付类型(例如 Store1 中的 10 欧元维护成本,Store2 中的 20 欧元租金)
付款类型是一个类别,例如(租金、维护、法律费用、许可证),每个类别都分配有一个特定的 account_type (例如,budget_legal、budget_monthly、budget_extraordinary),其中多个付款类型可以具有相同的 account_type
我们有帐户:一个帐户属于某个帐户类型的某个商店。所以 Store1 可以有账户类型budget_legal、budget_monthly,而Store2 有账户类型budget_legal、budget_monthly 和budget_extra
关系模型:
使用http://draw.io/创建的图像
现在我想要一个约束,即每笔付款必须属于现有帐户。我要保证以下几点:
当我更改 Payment_type 的 account_type 时,这种类型的所有付款都将“属于”各个帐户。
如果我删除一个帐户,我想删除该帐户中的所有付款(例如删除外键中的级联)
我只能插入/更新付款,以便每次付款都引用有效的 store_id/account_type,它存在于 accounts 表中。
我尝试过但没有真正起作用的可能解决方案:
我尝试将account_type添加到付款中,但随后我将该字段翻了一番 - 当我更改付款类型时,我将不得不通过触发器更改引用的付款。- 但在最好的情况下,我不希望触发器强制执行数据完整性 - 而且我不希望重复数据存储。
我试图在多个表上创建一个外键约束/一个将支付与 payment_types 连接起来的视图。不幸的是,这在 Oracle DBMS 中似乎是不可能的
我试图在 Payments 上创建一个虚拟列,它从 payment_types 计算值,但虚拟列只能引用同一个表中的列。