唯一索引创建和唯一性查询方法及装置
技术领域
本发明涉及信息技术,尤其涉及一种唯一索引创建和唯一性查询方法及装置。
背景技术
随着信息技术的不断发展,在线服务内容不断丰富,一个在线服务商旗下可能会包含服务内容各有侧重的多种产品。为了维护注册账户信息的准确性,需要确保在同一种产品中,也称为一个域中,各账户所关联的如手机号或邮箱等用户信息,必须是具有唯一性的,不能出现不同账户所关联的用户信息相同的情况。这是由于在针对某一账户的用户发送隐私信息时,若不能保证例如手机号这种用户信息的唯一性,可能出现由于两账户关联的手机号的重复,导致将一个账户的隐私信息发送至给另一账户的用户。
使用唯一索引是确保这种唯一性的有效方法,该唯一索引需要在同一张表上才能够生效。但由于在实际场景中,记录手机号等用户信息的字段和记录账户所属域的字段分别处于多个业务表中,图1为需进行唯一性查询的各业务表的示意,如图1所示确保唯一性的字段分别在不同的业务表中。因此,为了使用唯一索引查询唯一性,需要对业务表进行冗余,图2和图3分别提供了两种冗余后的业务表的示意,从而使得确保唯一性的全部字段在同一张业务表中,便可以满足唯一索引表的要求。进而针对这张冗余后的业务表,利用唯一索引确定字段的唯一性。
但现有技术中这种建立唯一索引方式,使得业务表中无论是增加字段,还是记录条数增加,均会破坏原有的业务表,导致维护、查询效率降低。
发明内容
本发明提供一种唯一索引创建和唯一性查询方法及装置,用于解决现有技术中由于破坏原有的业务表所导致的维护、查询效率降低的技术问题。
为达到上述目的,本发明的实施例采用如下技术方案:
第一方面,提供了一种唯一索引创建方法,包括:
根据至少两张业务表中的目标字段,建立独立于各业务表的目标表;
根据所述目标表建立唯一索引。
第二方面,提供了一种唯一性查询方法,包括:
根据至少两张业务表中的目标字段,建立独立于各业务表的目标表;
将所述目标字段作为索引项,根据所述目标表建立唯一索引;
根据所述唯一索引的建立是否成功,查询所述目标字段中的记录的唯一性。
第三方面,提供了一种唯一性查询方法,包括:
当对业务表进行针对目标字段的写操作时,对独立于所述业务表的目标表进行所述写操作;其中,所述目标表是根据所述业务表中的所述目标字段建立的;
根据所述目标表的唯一索引是否存在索引冲突,查询所述目标字段中的记录的唯一性。
第四方面,提供了一种唯一索引创建装置,包括:
表建立模块,用于根据至少两张业务表中的目标字段,建立独立于各业务表的目标表;
索引建立模块,用于根据所述目标表建立唯一索引。
第五方面,提供了一种唯一性查询装置,包括:
建立模块,用于根据至少两张业务表中的目标字段,建立独立于各业务表的目标表;
索引模块,用于将所述目标字段作为索引项,根据所述目标表建立唯一索引;
查询模块,用于根据所述唯一索引的建立是否成功,在所述目标字段中查询记录的唯一性。
第六方面,提供了一种唯一性查询装置,包括:
操作模块,用于当对业务表进行针对目标字段的写操作时,对独立于所述业务表的目标表进行所述写操作;其中,所述目标表是根据所述业务表中的所述目标字段建立的;
查询模块,用于根据所述目标表的唯一索引是否存在索引冲突,在所述目标字段中查询记录的唯一性。
本发明实施例提供的唯一索引创建和唯一性查询方法及装置,通过根据至少两张业务表中的目标字段,建立独立于各业务表的目标表,从而基于目标表建立唯一索引,由于目标表与各业务表之间相互独立,无需对业务表进行修改,解决了现有技术中由于破坏原有的业务表所导致的维护、查询效率降低的技术问题。同时,利用基于目标表所建立的唯一索引,还能够实现对字段中记录的唯一性查询。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1为需进行唯一性查询的各业务表的示意;
图2为冗余后的业务表的示意之一;
图3为冗余后的业务表的示意之二;
图4为本发明实施例一提供的一种唯一索引创建方法的流程示意图;
图5为建立索引表的示意之一;
图6为本发明实施例二提供的一种唯一索引创建方法的流程示意图;
图7为建立索引表的示意之二;
图8为本发明实施例三提供的一种唯一性查询方法的流程示意图;
图9为本发明实施例四提供的一种唯一性查询方法的流程示意图;
图10为本发明实施例五提供的一种唯一性查询方法的流程示意图;
图11为本发明实施例六提供的一种唯一索引创建装置的结构示意图;
图12为本发明实施例六提供的另一种唯一索引创建装置的结构示意图;
图13为本发明实施例七提供的一种唯一性查询装置的结构示意图;
图14为本发明实施例八提供的一种唯一性查询装置的结构示意图;
图15为本发明实施例八提供的另一种唯一性查询装置的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
下面结合附图对本发明实施例提供的唯一索引创建和唯一性查询方法及装置进行详细描述。
实施例一
图4为本发明实施例一提供的一种唯一索引创建方法的流程示意图,本实施例所提供的方法用于针对多个业务表创建唯一索引,这里所说的业务表是指对业务信息进行记录的数据库表,在每个业务表中包括有至少一个字段。本实施例所提供的方法,可以由对多个业务表进行的维护的数据库管理系统执行,如图4所示,唯一索引创建方法包括:
步骤101、根据至少两张业务表中的目标字段,建立独立于各业务表的目标表。
具体的,可以将进行唯一性查询所涉及的字段作为目标字段,并从各个业务表中获取这些目标字段中的全部记录,将所获取到的目标字段的记录合并到目标表中。这里目标字段包括待查询唯一性的第一目标字段,还可以进一步包括指示唯一性查询范围的第二目标字段。
作为一种可能的实现方式,可以将从业务表中所获取到的一个目标字段作为目标表中的一个字段,将所获取到的目标字段的记录存储到目标表中。
在将所获取到的目标字段中的各条记录存储到目标表中的过程中,若一个目标字段的至少一条记录与另一目标字段的至少两条记录相对应,则需要将这两个目标字段的相对应记录的全部取值组合均记录到目标表中,具体参见下表1至表3。其中,表1和表2为业务表,表3为目标表,目标表中包括表1的所属域和表2的手机号。表1中的记录“123,支付宝”对应表2中的两条记录,分别为“123,138****1234”和“123,139****1234”,因此,手机号和所属域的组合有两个即“138****1234,支付宝”和“139****1234,支付宝”,将全部组合均记录到表3中。
表1
表2
表3
需要说明的是,在不同业务表以及目标表中,记录的对应关系可以通过不同表之间所具有的相同字段进行确定,具体来说,在不同表中,在相同字段上取值相同的两条记录具有对应关系。
步骤102、根据目标表建立唯一索引。
将目标字段作为索引项,建立唯一索引。在唯一索引中,各条记录的索引项的取值应各不相同,也就是具有唯一性。由于在目标字段为多个时,也就是索引项包括多个目标字段的情况下,只有不同记录中全部的多个目标字段的取值均相同时,才确定索引项的取值相同,存在重复索引的情况,因此,作为一种可能的实现方式,可以将待查询唯一性的第一目标字段和指示唯一性查询范围的第二目标字段均作为索引项,仅在第二目标字段指示的查询范围内存在重复的第一目标字段时,确定第一目标字段所指示的信息不具有唯一性。
所建立的唯一索引有两种可能的形式,一种是索引,另一种是索引表。
对于索引来说,是在建立目标表之后,单独对目标表建立一个索引,而索引表则是在目标表中,建立唯一索引。索引表与索引相比较,由于索引在物理上所使用的存储空间与数据库表相互独立,而索引表是按照索引来组织的数据库表,从而表和索引在物理上使用同一存储空间,因此,采用索引表无需到数据库表中查询记录,能够提高查询的性能。例如:按照姓名等查询条件查询索引时,如果采用的索引,则首先在索引中找到满足查询条件的记录的位置,再根据该位置在数据库表中找到对应的记录;而如果是索引表,则可以直接可以在索引表中查询到记录,无需对数据库表进行读取。
图5为建立索引表的示意之一,如图5所示,通过根据至少两张业务表中的目标字段,建立独立于各业务表的目标表,从而基于目标表建立唯一索引的索引表,由于索引表与各业务表之间相互独立,无需对业务表进行修改,解决了现有技术中由于破坏原有的业务表所导致的维护、查询效率降低的技术问题。
实施例二
图6为本发明实施例二提供的一种唯一索引创建方法的流程示意图,本实施例所提供的方法可以针对如图1所示需进行唯一性查询的各业务表建立唯一索引。
如图6所示,方法包括:
步骤201、从至少两张业务表中,分别获取需查询唯一性的第一目标字段,以及对第一目标字段进行唯一性查询的查询范围的第二目标字段。
步骤202、对第一目标字段和第二目标字段进行合并。
具体的,可以将从第一业务表中获取的待查询唯一性的第一目标字段,与从第二业务表中获取的指示第一目标字段的唯一性查询范围的第二目标字段合并为一个字段,并在第一目标字段的取值和第二目标字段的取值之间插入分隔符。这里分隔符的作用是划分第一目标字段和第二目标字段的取值,避免合并带来的取值上的混淆。
分隔符具体可以为特殊符号,例如“|”,当第一目标字段中某条记录的取值为1时,第二目标字段中相应记录的取值为23时,若不采用分隔符的情况下,合并后的字段的记录取值为“123”,与第一目标字段取值为12,第二目标字段取值为3时合并所获得的结果相同,从而出现了混淆;反之,采用分隔符的情况下,合并后的字段的记录取值为“1|23”,则能够明确各目标字段取值。
步骤203、将合并后的字段作为索引值(Value),各业务表所具有的相同字段为索引键(Key),建立唯一索引的索引表。
例如:对于如图1中的各个业务表建立索引表,从而获得如图7中所示的索引表,图7中所建立的索引表名称为公共唯一索引表,索引值名称为公共唯一索引值,索引键名称为关联键。
在索引表中将各业务表所具有的相同字段,“用户ID”,为索引键,无论所需查询的记录在哪一个业务表中,均可以基于索引表匹配查询条件进行索引,进而能够直接从匹配的索引值指向所需查询的业务表中的记录,加快的查询速度。另外,通过根据至少两张业务表中的目标字段,建立独立于各业务表的目标表,由于目标表与各业务表之间相互独立,从而基于目标表建立唯一索引时,无需对业务表进行修改,用于解决现有技术中由于破坏原有的业务表所导致的维护、查询效率降低的技术问题。进一步,还可利用唯一索引不允许具有索引值相同的记录这一特性,可以对字段中记录的唯一性进行查询。
实施例三
图8为本发明实施例三提供的一种唯一性查询方法的流程示意图。本实施例所提供的方法可以由数据库管理系统执行。本实施例可以针对数据库中各业务表中已存在的记录,在需保证唯一性的字段上进行记录的唯一性查询。如图8所示,包括:
步骤301、根据至少两张业务表中的目标字段,建立独立于各业务表的目标表。
作为一种可能的实现方式,可以将从业务表中所获取到的一个目标字段作为目标表中的一个字段,将所获取到的目标字段的记录存储到目标表中。
作为另一种可能的实现方式,可以将从第一业务表中获取的待查询唯一性的第一目标字段,与从第二业务表中获取的指示第一目标字段的唯一性查询范围的第二目标字段合并为一个字段记录到目标表中,并在第一目标字段的取值和第二目标字段的取值之间插入分隔符。这里分隔符的作用是划分第一目标字段和第二目标字段的取值,避免合并带来的取值上的混淆。
步骤302、将目标字段作为索引项,根据目标表建立唯一索引。
具体的,目标字段可以为一个或多个,在目标字段为多个的情况下,索引项为多项索引,建立唯一索引表。
需要说明的是,建立唯一索引的方法具体参见实施例一和实施例二中的相关描述本实施例中对此不再赘述。
步骤303、根据唯一索引的建立是否成功,在目标字段中查询记录的唯一性。
具体的,若唯一索引建立成功,确定目标字段中的各条记录均具有唯一性,若唯一索引建立失败,确定目标字段中具有重复记录。
这是由于,唯一索引不允许具有索引值相同的记录,若作为索引项的目标字段中具有重复记录,则建立索引时,在索引项中会出现相同的索引值,唯一索引便会建立失败,据此可以进行唯一性的查询。
实施例四
图9为本发明实施例四提供的一种唯一性查询方法的流程示意图。本实施例所提供的方法可以由数据库管理系统执行。本实施例可以针对数据库中各业务表中需添加的记录,在需保证唯一性的字段上进行记录的唯一性查询。如图9所示,包括:
步骤401、当对业务表进行针对目标字段的写操作时,对独立于业务表的目标表进行写操作。
需要说明的是,写操作包括增加记录、删除记录和修改记录中的至少一个。
其中,可以将进行唯一性查询所涉及的字段作为目标字段,目标字段包括查询唯一性的第一目标字段,还可以进一步包括指示唯一性查询范围的第二目标字段。
另外,目标表是根据业务表中的目标字段建立的。目标表中包括从各业务表中所获取到的目标字段。
具体的,当接收到对业务表进行针对目标字段的写操作的请求时,将对业务表和目标表进行写操作作为一个事务,对该事务进行执行。这里并不限定对业务表执行写操作和对目标表执行写操作的先后顺序。
步骤402、根据目标表的唯一索引是否存在索引冲突,在目标字段中查询记录的唯一性。
其中,目标表的唯一索引可以采用独立于目标表的索引的形式,也可以采用索引表的形式本实施例中对此不做限定。
具体的,在对事务进行执行的过程中,若根据写操作请求的指示在目标表上增加或者修改记录时,导致出现重复记录,则在唯一索引上会出现索引冲突,从而查询出写操作请求所涉及的记录在目标字段中不满足唯一性的要求,事务执行失败。
进而,在事务执行失败时,执行事务回滚,使得业务表和目标表恢复至执行该事务之前的最终状态。
为了清楚说明本实施例,本实施例提供了一种可能的应用场景,支付宝、芝麻信用等域信息作为一个目标字段,手机号作为另一字段,需在域信息内查询手机号的唯一性,也就是在同一个域内,不能存在重复手机号,具体的:
用户A在支付宝成功注册了手机号138****1234,从而在索引表和业务表中生成了相应的记录,具体,在索引表中生成一条记录“用户A,支付宝,138****1234”。
此后,用户B在支付宝提交了注册信息,注册信息为手机号138****1234,与用户A的手机号相同,则业务系统根据注册信息生成增加记录“用户B,支付宝,138****1234”写操作请求。
数据库管理系统接收到该写操作请求之后,生成一个事务,该事务包括对业务表执行该写操作和对索引表执行该写操作。在执行该事务时,可以首先在业务表中增加记录,继而在索引表中增加相应记录,但在索引表中会出现与“用户A,支付宝,138****1234”的记录存在索引冲突的情况,从而事务执行失败,进行事务回滚,对在业务表中所增加的记录进行撤销。保证了“支付宝,138****1234”仅能出现一次。
需要说明的是,建立目标表和目标表的唯一索引的方法具体参见实施例一和实施例二中的相关描述本实施例中对此不再赘述。
实施例五
在上一实施例的基础上,本实施例提供了一种可能的实现方式,图10为本发明实施例五提供的一种唯一性查询方法的流程示意图,如图10所示,包括:
步骤501、数据库管理系统接收操作请求。
具体的,数据库管理系统可以从业务系统获取对注册信息进行添加修改或查询的操作请求。
步骤502、判断操作请求是否为对业务表进行查询的查询请求,若是,则执行步骤503,否则执行步骤504。
步骤503、若为查询请求,则在索引表根据查询请求的查询条件进行查询,确定匹配的索引值,读取该索引值所指向的业务表中的记录,根据所读取到的记录生成操作结果。
其中,索引表是根据至少两张业务表中唯一性查询所涉及的目标字段建立独立于各业务表的目标表之后,在该目标表中,将目标字段作为索引项建立唯一索引所得到的。在索引表中还包括有各业务表所具有的相同字段,这里所说的相同字段用于指向各个业务表的主键,例如图1中的“用户ID”。
具体的,在根据查询请求中所指示的查询条件匹配索引值时,可以直接读取匹配中的索引值,进而还可以根据该记录中指向业务表中主键的字段,在业务表中读取未记录到索引表中的字段上的取值。
例如:需要在如图7所示的索引表上查询138的手机号在支付宝上被哪一个用户注册时,可以在索引表上查询到匹配索引值,及对应的索引键,即用户ID“123”,进而根据用户ID“123”指向的用户信息的业务表中的主键“用户ID”,读取该用户的详细信息。
可见,本实施例中可以首先通过唯一索引表进行查询,进而索引至业务表的主键,通过主键查询到对应的信息,从而无需在图1所示的用户信息表、域信息和手机号信息共三张业务表中进行跨表查询,提高了查询效率。
步骤504、若为写操作请求,则对业务表和索引表进行写操作,判断在索引表上是否存在索引冲突,若存在执行步骤505,否则执行步骤506。
步骤505、若唯一索引存在索引冲突,确定所述目标字段中具有重复记录,撤销已执行的写操作。
步骤506、若唯一索引不存在索引冲突,确定所述目标字段中的各条记录均具有唯一性。
通过根据至少两张业务表中的目标字段,建立独立于各业务表的目标表之后,由于目标表与各业务表之间相互独立,从而基于目标表建立唯一索引,无需对业务表进行修改,用于解决现有技术中由于破坏原有的业务表所导致的维护、查询效率降低的技术问题。在索引表中还包括有各业务表所具有的相同字段,这里所说的相同字段用于指向各个业务表的主键,在根据查询请求中所指示的查询条件匹配索引值时,可以直接读取匹配中的索引值,进而还可以根据该记录中指向业务表中主键的字段,在业务表中读取未记录到索引表中的字段上的取值,因而无需进行跨表查询,提高了查询效率。
实施例六
图11为本发明实施例六提供的一种唯一索引创建装置的结构示意图,如图11所示,包括:表建立模块61和索引建立模块62。
表建立模块61,用于根据至少两张业务表中的目标字段,建立独立于各业务表的目标表。
其中,目标字段用于指示账户所属域和账户关联信息中的至少一个;所述账户关联信息包括邮箱和/或电话号码。
索引建立模块62,用于根据所述目标表建立唯一索引。
具体的,索引建立模块62,具体用于在所述目标表中,将所述目标字段作为索引项建立唯一索引得到索引表。
作为一种可能的实现方式,至少两张业务表包括至少一张第一业务表和第二业务表,基于此,本发明实施例还提供了另一种唯一索引创建装置,图12为本发明实施例六提供的另一种唯一索引创建装置的结构示意图,在图11的基础上,如图12所示,表建立模块61进一步包括:第一获取单元611、第二获取单元612和处理单元613。
第一获取单元611,用于从所述第一业务表中,获取待查询唯一性的第一目标字段。
第二获取单元612,用于从所述第二业务表中,获取指示所述第一目标字段的唯一性查询范围的第二目标字段。
处理单元613,用于将所述第一目标字段和所述第二目标字段记录到所述目标表中。
进一步,处理单元613包括:合并子单元6131和记录子单元6132。
合并子单元6131,用于对所述第一目标字段和所述第二目标字段进行合并。
具体的,合并子单元6131具体用于通过在所述第一目标字段和所述第二目标字段中的相应记录的取值之间插入分隔符进行合并,以得到合并后的字段中的记录。
记录子单元6132,用于将合并后的字段记录到所述目标表中。
具体的,记录子单元6132具体用于将合并后的字段作为索引值记录到所述目标表中;所述索引值对应的索引键为各业务表所具有的相同字段。
本实施例所提供的装置,用于执行实施例一和实施例二所提供的方法,本实施例中各功能模块的具体实现参见前述实施例中的相关描述,本实施例中对此不再赘述。
实施例七
图13为本发明实施例七提供的一种唯一性查询装置的结构示意图,如图13所示,包括:建立模块71、索引模块72和查询模块73。
建立模块71,用于根据至少两张业务表中的目标字段,建立独立于各业务表的目标表。
索引模块72,用于将所述目标字段作为索引项,根据所述目标表建立唯一索引。
查询模块73,用于根据所述唯一索引的建立是否成功,在所述目标字段中查询记录的唯一性。
具体的,查询模块73具体用于若所述唯一索引建立成功,确定所述目标字段中的各条记录均具有唯一性;若所述唯一索引建立失败,确定所述目标字段中具有重复记录。
本实施例所提供的装置,用于执行实施例三所提供的方法,本实施例中各功能模块的具体实现参见前述实施例中的相关描述,本实施例中对此不再赘述。
实施例八
图14为本发明实施例八提供的一种唯一性查询装置的结构示意图,如图14所示,包括:操作模块81和查询模块82。
操作模块81,用于当对业务表进行针对目标字段的写操作时,对独立于所述业务表的目标表进行所述写操作。
其中,所述目标表是根据所述业务表中的所述目标字段建立的。
查询模块82,用于根据所述目标表的唯一索引是否存在索引冲突,在所述目标字段中查询记录的唯一性。
具体的,查询模块82具体用于若所述唯一索引不存在索引冲突,确定所述目标字段中的各条记录均具有唯一性;若所述唯一索引存在索引冲突,确定所述目标字段中具有重复记录。
作为一种可能的实现方式,本实施例中的操作模块81,具体用于将对所述业务表和所述目标表进行所述写操作作为一个事务,执行所述事务。基于此,如图15所示,在图14的基础上,唯一性查询装置进一步包括:回滚模块83。
具体的,回滚模块83,用于若查询出所述目标字段中具有重复记录,针对所述事务进行事务回滚。
本实施例所提供的装置,用于执行实施例四和实施例五所提供的方法,本实施例中各功能模块的具体实现参见前述实施例中的相关描述,本实施例中对此不再赘述。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。