2013-08-22 45 views
0

我有一個FoxPro容器DBC裏面有幾個DBF表。 這些表具有這樣的結構:在foxpro dbf中創建多列索引?

TableA(id, numbers1, numbers2, numbers3) 

numbers1,numbers2和numbers3與數字的字符串逗號分隔是這樣的:在同一行之間並在整個表

numbers1 = '01,02,03,04,05,06,07,08' --> 8 numbers 
numbers2 = '09,10,11,12,13,14,15,16' --> 8 numbers 
numbers3 = '01,02,03,04,05,06,07,08,09,10,11,12,13,14,15' --> 15 numbers 

的數字着重複,所以頂部的數字1不能出現在另一行的數字1或數字2上。

因此,爲了防止這個...我對列應用索引numbersX這樣的:

INDEX ON numbers1 CANDIDATE TAG numbers1 
INDEX ON numbers2 CANDIDATE TAG numbers2 
INDEX ON numbers3 CANDIDATE TAG numbers3 

但這...只有防止出現在同一列中沒有重複..所以:

RowA.numbers1 cant be equal to RowB.numbers1 

但是這可能發生:

RowA.numbers1 = RowB.numbers2 

而且我不希望這樣....

所以我的問題是我該如何解決這個問題?我認爲在兩欄上做一個多重索引,可以做到嗎?我想在MySQL或SQL服務器更多,但我不知道這是否可以在foxpro上工作。

回答

2

由於表格尚未標準化,因此無法以簡單的方式解決此問題。你或許應該有一個對列的是什麼號碼與給定ID

create table tblIDNums (id int, num int) 

上創建NUM列唯一索引,因此不能與任何其他ID除了第一條目相關聯的表就被分配給,除非它被重新分配,只需更新id列。

然後,將你的記錄,例如

insert into tblIDNums (id, num) values (1, 1) 
insert into tblIDNums (id, num) values (1, 2) 
insert into tblIDNums (id, num) values (1, 3) 
insert into tblIDNums (id, num) values (1, 4) 
insert into tblIDNums (id, num) values (1, 5) 
insert into tblIDNums (id, num) values (1, 6) 
insert into tblIDNums (id, num) values (1, 7) 
insert into tblIDNums (id, num) values (1, 8) 
insert into tblIDNums (id, num) values (2, 9) 
insert into tblIDNums (id, num) values (2, 10) 
insert into tblIDNums (id, num) values (2, 11) 
insert into tblIDNums (id, num) values (2, 12) 
insert into tblIDNums (id, num) values (2, 13) 
insert into tblIDNums (id, num) values (2, 14) 
insert into tblIDNums (id, num) values (2, 15) 
insert into tblIDNums (id, num) values (2, 16) 

所以,現在,如果你試圖插入一個ID 3的13值,它會失敗的插入,因爲13與ID 2.你可以用」關聯t只是逗號分開期望的數值,因爲它把它看作是一個完整的字符串,而不是單獨的數值本身,並且知道它們是否是順序的,間隙的,不按順序的等等。

+0

對不起,但我沒有機會爲這個項目創建另一個表...我擁有的選項是修改現有的一個。 –