从表中移动记录

时间:2012-03-26 08:49:10

标签: sql-server-2008 batch-file logging identity foreign-key-relationship

我对两个表的设计有疑问。

表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'

2 个答案:

答案 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填充已删除的行,应该非常简单。