WCW*_*din 1 sql-server constraints crosstab database-agnostic temporal
我有一个特别困难的业务约束,我想在数据库级别强制执行.这些数据本质上属于财务数据,因此必须保护其不存在与第n度的不一致 - 不要信任业务层.我稍微松散地使用"时间"这个词,这意味着我打算控制一个实体如何能够随着时间而改变.
对细节进行着色,这是设计:
这是一个精简的数据定义:
CREATE TABLE Invoices
(
InvoiceID INT IDENTITY(1,1) PRIMARY KEY,
)
CREATE TABLE Fees
(
FeeID INT IDENTITY(1,1) PRIMARY KEY,
InvoiceID INT REFERENCES Invoices(InvoiceID),
Amount MONEY
)
Run Code Online (Sandbox Code Playgroud)
您会注意到发票的"可锁定"性质未在此处表示; 如何表达它 - 以及它是否需要直接表示 - 仍然是一个悬而未决的问题.
我开始相信这是那些无法转换为域密钥正常形式的安排之一,尽管我可能错了.(毕竟,真的没有办法说出来.)尽管如此,我仍然对高度规范化的解决方案抱有希望.
我碰巧在SQL Server 2008上实现了这个(语法可能是一个暗示),但我是一个好奇的人,所以如果有其他DBMS的解决方案,我也很想听到这些.
我无法想象通过规范化来实现这一目标的方法.但是,如果我想在数据库上限制它,我会做两种方式之一:
首先,我会在Invoices中添加一个"锁定"列,这有点像某种类型,只是一种将其锁定为锁定的方法.
那么,有两种方式:
编辑:我找不到一篇关于如何做其中一篇的MSDN文章,但IBM有一篇在SQL Server中运行良好的文章:http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index .JSP?主题=/sqlp/rbafybeforesql.htm
| 归档时间: |
|
| 查看次数: |
983 次 |
| 最近记录: |