我有一张桌子,如:
CREATE TABLE Item (
Id INTEGER NOT NULL PRIMARY KEY IDENTITY(1, 1),
Uid VARCHAR,
Version INTEGER NOT NULL UNIQUE
...
);
' Uid is a GUID
整个想法是对项目进行版本控制。如果用户想要编辑非草稿项目,他只能使用其最新版本进行编辑,在这种情况下,对象被深度克隆,用户可以使用递增版本对其克隆进行处理。
有一种方法可以只选择最新的项目,例如:
SELECT i.* FROM Item AS i
LEFT JOIN Item AS i1 ON i1.Version > i.Version AND i1.Uid = i.Uid
WHERE i1.Id IS NULL
这在EF中很难实现(即使我这样做,它仍然会比其他解决方案更复杂),所以我计划创建一个只包含最新版本项目的表格,例如:
CREATE TABLE NewestItems (
Uid VARCHAR NOT NULL
Version INTEGER NOT NULL );
跟踪最新版本非常简单,因为只有一次,当它发生变化时 - 当用户提交草稿时。但是,我想在数据库中签订合同以确保NewestItems指向实际项目(我确保这些是最新的项目)。
在SQL中,我从pair:Uid和Version创建一个密钥,然后在NewestItems中创建外键。但我先设计数据库代码,我不知道,我该怎么做。
所以问题:如何定义(代码优先)一个由两个字段对组成的密钥,然后是该密钥的外键?
此外:有没有办法从Item创建导航属性到NewestItem(或其他方式),这样我可以轻松选择最新的项目?