我必须创建一个数据库,并且必须确保我们可以在特定日期加载数据,所以我决定使用元组版本控制.
假设我们有以下两个表:
CREATE TABLE Author
(
Id UNIQUEIDENTIFIER NOT NULL,
Firstname VARCHAR(100) NOT NULL,
Surname VARCHAR(200) NOT NULL,
ValidFrom DATETIME NOT NULL,
ValidUntil DATETIME NULL,
PRIMARY KEY (ID, ValidFrom)
)
CREATE TABLE Book
(
Id UNIQUEIDENTIFIER NOT NULL,
Title VARCHAR(100) NOT NULL,
ISBN VARCHAR(100) NOT NULL,
AuthorId UNIQUEIDENTIFIER NOT NULL,
ValidFrom DATETIME NOT NULL,
ValidUntil DATETIME NULL,
PRIMARY KEY (Id, ValidFrom)
)
Run Code Online (Sandbox Code Playgroud)
当我第一次输入新作者时,我将生成一个新的GUID.我也在书表中使用此GUID来引用作者.
如果作者有更新,我创建一个具有相同GUID的新记录,但将当前日期定义为"ValidFrom",并将"ValidUntil"从原始记录设置为当前日期.
我不必更改book表,因为Author.Id没有改变.
我现在面临的问题是我想在Book.AuthorId = Author.Id上添加一个外键约束.
不幸的是,这不起作用,因为我使用复合主键.我不想将Author.ValidFrom添加到我的Book表中,因为我只想引用最新的而不是特定的版本.
关于如何解决这个问题的任何想法?我想我可以添加一个触发器,确保如果已经记录了一本书就无法删除作者,但我没有允许级联删除的解决方案.
我很感激每一个提示或建议.
我遇到了一个慢速(自定义)BizTalk适配器的问题.
每天晚上,应用程序会在几分钟内向MSMQ发送超过10'000条消息.不幸的是,BizTalk需要几个小时来处理它们.
我没有任何编排,只是将消息路由到多方.对于一方,我们必须开发一个自定义适配器,但这个适配器/接口非常慢.所以我认为BizTalk会自动限制整个应用程序,并且只从队列中读取尽可能多的消息,它可以通过这个慢速适配器发送.
因此,MSMQ为空需要几个小时.
如果我停止这个慢速适配器并且例如只启用写入本地文件系统的文件适配器,则需要几秒钟来处理来自MSMQ的数千条消息.
是否可以调整BizTalk以更快地处理传入的消息,并仅限制此发送端口的传出消息?不幸的是,由于一个缓慢的聚会,所有其他方都必须等待消息.
谢谢你的建议!
最好的问候Michael