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