0

我有两个表的设计问题。从表中移动记录

表1:主表,称为批处理。从解析文件中添加值。表2:该表的工作原理与日志表类似,每一行从表1中删除。

表1

ID text 
1 'bla1' 
2 'bla2' 
3 'bla3' 

删除行其中id是2和3

表2

ID text 
2 'bla2' 
3 'bla3' 

问题:

如果我插入ID2和3再次在表1中删除它?表2将具有相同的数据。我怎样才能解决这个问题?我应该只是让ID也是标识列吗?所以,当我加2点的记录会是这样(额外的问题我怎么保持如果我删除整个表1计算):

表1

ID 
4 'Bla3' 
5 'Bla4' 

回答

0

只是对表1的唯一标识符,该标识符应该是唯一的这个表,而不是你加载的数据。然后,您可以加载ID 100从源文件多次,只要你想,就应在表1

一个标识列似乎适合你这方面的要求得到一个唯一的标识符。我会研究更多的审计数据,也许存储它来自哪个文件,何时加载,谁加载它等。

至于填写日志表,您可以在表上附加触发器1使用删除行填充表2,应该非常简单。

+0

其实我有三张表,但我想要的解决方案是ID总是增加,即使我删除表,没有柜台重置。 我试着避免这个问题: 当我从表1中删除(触发器插入到表2)所有的行。然后我再次填充表中解析文件得到的值。 我不希望ID从1开始,因为当我删除它(触发器插入表2)时,表2中会出现错误(int 1的重复ID)。 – Danny 2012-03-26 11:15:35

+0

这就是IDENTITY列的用途。只要保持独立,它就会不断增加。从你的'INSERT'语句中排除它,把它留给SQL Server来填充它。 – cairnz 2012-03-26 11:21:41

+0

傻我,是的,我用truncate而不是delete。谢谢。标记为答案。 – Danny 2012-03-26 11:35:02

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) 
) 
+0

感谢您的日期时间提示,我其实已经有了一个,但为了清楚起见,我省略了它。 – Danny 2012-03-26 11:11:04