我有一个FoxPro容器DBC,里面有几个DBF表。 表格具有以下结构:
TableA(id, numbers1, numbers2, numbers3)
numbers1,numbers2和number3是以逗号分隔的字符串,如下所示:
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上。
所以,为了防止这种情况......我在列号XX上应用索引,如下所示:
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 server中考虑更多,但我不知道这是否适用于foxpro。
答案 0 :(得分: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 )
所以现在,如果你试图插入一个值为13的ID 3,那么插入将失败,因为13与ID 2相关联。你不能只用逗号分隔预期的数值,因为它看起来像一个整体字符串,而不是单个值本身,知道它们是顺序的,间隙,乱序等等。