2013-08-22 44 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

对不起,但我没有机会为这个项目创建另一个表...我拥有的选项是修改现有的一个。 –