我对两个表的设计有疑问。
表1:主表,称为Batch。这里从解析文件中添加值。
表2:此表的作用类似于日志表,从表1中删除的每一行都在这里。
实施例
表1
ID text
1 'bla1'
2 'bla2'
3 'bla3'
删除id为2和3的行
表2
ID text
2 'bla2'
3 'bla3'
问题:
如果我在表1中再次插入ID 2和3并将其删除怎么办?表2将具有相同的数据。我怎样才能解决这个问题?我是否应该只将ID设为身份栏?所以当我添加2条记录时就是这个(另外一个问题,如果我删除整个表1,我该如何继续计算?):
表1
ID
4 'Bla3'
5 'Bla4'
答案 0 :(得分:0)
在您的设计中,似乎表1使用surrogate key。在这种情况下,您还应该为您的目的定义natural key。然后表2将包含表1清除数据的自然键和值。
因为你可以多次删除一些数据,所以你应该在你的表2中添加一个时间戳字段。
create table table1 (
id int identity primary key,
[text] varchar(50) not null unique,
... other data ...
)
create table table2 (
[text] varchar(50) not null,
erased datetime not null,
... other data ...
constraint table2_pk
primary key ( [text], erased )
)
答案 1 :(得分:0)
只需拥有表1的唯一标识符。此标识符对于此表应该是唯一的,而不是您加载的数据。然后,您可以根据需要多次从源文件加载 id 100,它们应该在表1中获得唯一标识符。
标识栏似乎符合您的要求。我也会查看更多的审计数据,也许会存储它来自哪个文件,何时加载,加载谁等等。
至于填充日志表,你可以在表1上附加一个触发器,用表2填充已删除的行,应该非常简单。