CN100517334C - 用于在关系数据库中表示组分级结构的方法和设备 - Google Patents

用于在关系数据库中表示组分级结构的方法和设备 Download PDF

Info

Publication number
CN100517334C
CN100517334C CNB2007101361238A CN200710136123A CN100517334C CN 100517334 C CN100517334 C CN 100517334C CN B2007101361238 A CNB2007101361238 A CN B2007101361238A CN 200710136123 A CN200710136123 A CN 200710136123A CN 100517334 C CN100517334 C CN 100517334C
Authority
CN
China
Prior art keywords
group
dynamic
given group
membership qualification
nested
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CNB2007101361238A
Other languages
English (en)
Other versions
CN101110082A (zh
Inventor
J·P·维格尔斯沃思
P-V·塔塔武
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of CN101110082A publication Critical patent/CN101110082A/zh
Application granted granted Critical
Publication of CN100517334C publication Critical patent/CN100517334C/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

一种用于管理数据库的计算机实现的方法、设备和系统。该过程接收对所述数据库中给定对象组的成员列表的请求。该过程基于所述数据库中成员资格表中的记录集,为所述给定组标识静态成员集。所述静态成员集包括所述给定组的所有直接静态成员以及所有间接静态成员。该过程基于所述数据库中组表中的参考,为所述给定对象组标识动态成员集。所述动态成员集包括所述给定组的所有直接动态成员以及所述给定组的所有间接动态成员。该过程生成所述成员列表。

Description

用于在关系数据库中表示组分级结构的方法和设备
技术领域
本申请一般涉及一种改进的数据处理系统,并且特别涉及一种用于管理数据库的方法和设备。更具体而言,本申请涉及一种用于在既支持静态组又支持动态组的关系数据库中表示组分级结构(group hierarchystructure)的计算机实现的方法、设备、系统和计算机可用程序产品。
背景技术
关系数据库是这样的数据库,即其中数据存储在一个或多个相关的数据库表中。每个数据库表均包括列和行。列,文中称为字段,其是预定义的数据类别。例如,具有市政居民的信息的数据库表可以包括以下信息类别的字段:姓名、地址以及电话号码。
数据库表的各行,文中称为记录,其含有对于由列所定义的类别的数据的唯一实例。在以上例子中,用于市政当局的数据库表中的记录可以包括以下信息:Joe Smith,111大街,(555)555-5555。该记录包括对应于数据库表中一个或多个预定义类别的数据库表的给定行中的所有数据。
单个关系数据库系统可以散布于几个数据库表上。当前的关系数据库可以包括大约从一个到超过一千个数据库表的数目。例如,用于市政当局的关系数据库可以包括用于市政停车罚款的另一表格。用于停车罚款的表格可以包括姓名、欠费额以及到期日的字段。
数据库管理器是管理存储在一个或多个数据库表的集合中的数据集合的软件。数据库管理器可以基于数据的关系从表格检索数据。关系是组织数据以允许对数据进行灵活和变化的操作的一种方式。换句话说,响应于用户查询,可以以很多不同的方式访问或重新装配数据,而不必重新组织在一个或多个关系数据库表格的集合中的数据。数据库管理器通常允许用户基于任何字段对关系数据库中的数据进行分类和/或生成仅包括来自一个或多个记录的某些字段的结果。
在以上例子中,用户可以对市政当局关系数据库查询接收到违规停车罚单(parking ticket)的所有居民的邮递列表。该关系数据库可以提供包括来自该停车罚款表的名称字段的居民姓名以及来自居民信息表的地址在内的查询结果。
经常使用对象组来实现关系数据库。对象组包括任何对象集合。通常,使用组表(group table)和成员资格表来实现关系数据库中的对象组。如文中所使用的,组表是在关系数据库中定义的所有组的表格。组表含有关于组的信息,例如组的名称和/或组的主关键字(primary key)。成员资格表是包括关于组表中每个组的每个成员的信息的表格。组中的每个成员在成员资格表中均有记录。
因而,如果市政当局具有作为组“居民”的所有成员的两百零五个居民,则组表将包括该“居民”组的一个记录。成员资格表将包括该“居民”组的两百零五个记录,其中会用“居民”组主关键字标记每个记录。
然而,用户经常需要利用嵌套组(nested group)。嵌套组是其本身是具有成员的组的组成员。例如,组“A”可以包括成员1、2和3。成员3本身可以是具有成员B1和B2的组。当嵌套组以这种方式是其它组的成员的时候,该嵌套组的成员就被认为是容纳组(containing group)的间接成员。换句话说,在该例中,成员B1和B2被认为是组“A”的成员。
为了确定在这种情况下的组成员资格,数据库管理器必须进行多个查询以完成嵌套组的整个分级。在以上例子中,需要检查提供成员1、2和3的第一查询的结果,以便确定是否有任何成员是嵌套组。对于是组的每个成员,例如成员3,必须执行另一查询以确定嵌套组的成员资格。该过程继续递归直到不再发现有作为组的成员。确定组成员资格的该系统(其中利用了嵌套组的分级)是低效率的。
此外,依赖于在成员资格表中定义组成员的组实现意味着组的成员资格必须全部是静态成员。静态成员是这样的组成员,即在成员资格表中其必须被手动添加到组或者被从组中删除以便改变组成员资格。这一要求造就了对用户的诸多维护。
可选的组实现是这样一种实现,即其中由公共属性集而不是由成员资格表中的记录来定义组成员。这些是动态组,因为它们不需要成员资格列表维护。如果数据库中的对象具有与动态组成员资格所要求的那些相匹配的属性,则该对象自动成为该动态组的一部分。
用户既需要静态组也需要动态组来解决商业问题。然而,当前的关系数据库系统不支持对单个组分级结构中结合在一起的静态组和动态组二者的利用。另外,通常需要多个查询以便在关系数据库系统中标识利用嵌套组作为组成员的组成员。
发明内容
本发明不同的说明性实施例提供了一种计算机实现的方法、设备和系统,其用于管理在数据库的单个组分级结构中对结合在一起的静态组和动态组二者进行利用。该过程接收对与所述数据库关联的给定对象组的成员列表的请求。该过程基于所述数据库中成员资格表中的记录集为所述给定对象组标识静态成员集。所述给定对象组的静态成员集包括所述给定组的所有直接静态成员以及所述给定组的所有间接静态成员。
该过程基于所述数据库中组表中的参考为所述给定对象组标识动态成员集。所述动态成员集包括所述给定组的所有直接动态成员以及所述给定组的所有间接动态成员。该过程生成所述成员列表。所述成员列表包括所述静态成员集和所述动态成员集。
附图说明
在所附权利要求中陈述了被认为是本发明特色的新颖的特征。然而,当结合附图阅读时,通过参照以下对说明性实施例的详细描述,将最好地理解本发明本身的实施例以及优选的使用模式、其进一步的目的及优点,其中:
图1是可以在其中实现说明性实施例的数据处理系统的网络的图形表示;
图2是可以在其中实现说明性实施例的数据处理系统的框图;
图3是依照说明性实施例的现有技术组表定义的框图;
图4是依照说明性实施例的现有技术成员资格表定义的框图;
图5是依照说明性实施例说明了关系数据库系统的框图;
图6是依照说明性实施例说明了关系数据库系统中组分级结构的框图;
图7是依照说明性实施例说明了关系数据库的框图;
图8是依照说明性实施例说明了组成员资格表的框图;
图9是依照说明性实施例说明了组表定义的框图;
图10是依照说明性实施例说明了用于请求组的成员资格列表的过程的流程图;
图11是依照说明性实施例说明了用于将成员添加到组的过程的流程图;
图12是依照说明性实施例说明了用于将成员从组移除的过程的流程图;以及
图13是依照说明性实施例说明了用于创建对象组的过程的流程图。
具体实施方式
现参照附图,并且特别参照图1-2,其提供了可以实现说明性实施例的数据处理环境的示例图。应该理解图1-2仅是示例性的,并不旨在断言或暗示关于其中可以实现不同实施例的环境的任何限制。可以对所描述的环境进行很多修改。
现参照附图,图1描述了可以在其中实现说明性实施例的数据处理系统的网络的图形表示。网络数据处理系统100是其中可以实现实施例的计算机网络。网络数据处理系统100含有网络102,其是用于在网络数据处理系统100内连在一起的各种设备和计算机之间提供通信链路的介质。网络102可以包括诸如有线、无线通信链路或光缆的连接。
在所描述的例子中,服务器104和服务器106与存储单元108一起连接至网络102。另外,客户机110、112和114连接至网络102。这些客户机110、112和114可以是例如个人计算机或网络计算机。在所描述的例子中,服务器104向客户机110、112和114提供诸如引导文件、操作系统映像以及应用这样的数据。在该例中,客户机110、112和114是服务器104的客户机。网络数据处理系统100可以包括附加的服务器、客户机和未示出的其它设备。
在所描述的例子中,网络数据处理系统100是具有网络102的因特网,网络102代表使用传输控制协议/网际协议(TCP/IP)协议组相互通信的全球网络和网关集合。处于因特网核心的是主节点或主计算机之间的高速数据通信线路的主干线,其包括路由数据和消息的成千上万的商业、政府、教育和其它的计算机系统。当然,网络数据处理系统100还可以实现为许多不同类型的网络,举例来说,例如内联网、局域网(LAN)或广域网(WAN)。图1意在举例,并不作为对不同实施例的结构限制。
现参照图2,示出了可以在其中实现说明性实施例的数据处理系统的框图。数据处理系统200是诸如图1中的服务器104或客户机110的计算机的例子,可以在其中安置说明性实施例的实现过程的计算机可用代码或指令。
在所描述的例子中,数据处理系统200使用包括北桥和存储控制器集线器(MCH)202以及南桥和输入/输出(I/O)控制器集线器(ICH)204在内的集线器体系结构。处理器206、主存储器208以及图形处理器210耦合于北桥和存储控制器集线器202。举例来说,图形处理器210可以通过加速图形端口(AGP)耦合于MCH。
在所描述的例子中,局域网(LAN)适配器212耦合于南桥和I/O控制器集线器204,并且音频适配器216、键盘和鼠标适配器220、调制解调器222、只读存储器(ROM)224、通用串行总线(USB)端口和其它通信端口232,以及PCI/PCIe设备234通过总线238耦合于南桥和I/O控制器集线器204,并且硬盘驱动器(HDD)226和CD-ROM驱动器230通过总线240耦合于南桥和I/O控制器集线器204。PCI/PCIe设备可以包括,例如以太网适配器、附加卡(add-in cards)以及用于笔记本计算机的PC卡。PCI使用卡式总线控制器,而PCIe并不使用。ROM 224可以是,例如闪速二进制输入/输出系统(BIOS)。硬盘驱动器226和CD-ROM驱动器230可以使用,例如集成驱动器电子电路(IDE)或串行高级技术配件(SATA)接口。超级I/O(SIO)设备236可以耦合于南桥和I/O控制器集线器204。
操作系统在处理器206上运行,并且协调和提供对图2中数据处理系统200内的各种组件的控制。操作系统可以是市场上可买到的操作系统,例如
Figure C20071013612300121
XP(Microsoft和Windows是微软公司在美国、其它国家或二者的商标)。面向对象的编程系统,例如JavaTM编程系统,可以结合操作系统运行并且从在数据处理系统200上执行的Java程序或应用向操作系统提供调用(Java以及所有基于Java的商标是SunMicrosystems公司在美国、其它国家或二者的商标)。
用于操作系统、面向对象的编程系统的指令,以及应用或程序位于诸如硬盘驱动器226的存储设备上,并且可以被加载到主存储器208由处理器206执行。使用计算机实现的指令(举例来说,其可以位于诸如主存储器208、只读存储器224的存储器中,或者位于一个或多个外围设备中),可以由处理器206来实现说明性实施例的过程。
图1-2中的硬件可以取决于实现而变化。除了图1-2中所描述的硬件之外,或者代替图1-2中所描述的硬件,可以使用其它的内部硬件或外围设备,例如闪速存储器、等效非易失性存储器或光盘驱动器等。此外,说明性实施例的过程可以应用于多处理器数据处理系统。
在一些说明性例子中,数据处理系统200可以是个人数字助理(PDA),其通常被配置具有闪速存储器,以便提供用于存储操作系统文件和/或用户产生的数据的非易失性存储器。总线系统可以包括一个或多个总线,例如系统总线、I/O总线和PCI总线。当然,可以使用在附于构造或体系结构的不同组件或设备之间提供数据传递的任何类型的通信构造或体系结构来实现总线系统。通信单元可以包括用于发送和接收数据的一个或多个设备,例如调制解调器或网络适配器。存储器可以是,例如主存储器208或诸如可以在北桥和存储控制器集线器202中找到的高速缓存。处理单元可以包括一个或多个处理器或CPU。图1-2中所描述的例子以及上述例子并不意味着暗示体系结构限制。例如,数据处理系统200除了采取PDA的形式之外,还可以是平板计算机(tablet computer)、膝上型计算机或电话设备。
关系数据库是这样的数据库,即其中数据存储在一个或多个相关的数据库表中。每个数据库表均包括列和行。列,文中称为字段,其是预定义的数据类别。各行,文中称为记录,其含有对于由字段所定义的类别的数据的唯一实例。记录包括数据库表的给定行中的所有数据。
单个关系数据库系统可以散布于存储在一个或多个数据库中的几个表格上。当前的关系数据库可以包括大约从一个到超过一千个数据库表的数目。
数据库管理器是用于管理存储在一个或多个数据库表的集合中的数据集合的软件。数据库管理器可以基于存储在数据库中数据的关系从关系数据库检索数据。因而,响应于用户查询,可以以很多不同的方式访问或重新装配数据,而不必重新组织在关系数据库表中的数据。与关系数据库系统关联的数据库管理器通常允许用户基于任何字段对一个或多个数据库中的数据进行分类和/或生成仅含有来自一个或多个记录的某些字段的结果。
经常使用对象组来实现关系数据库。对象组包括任何对象集合。通常,使用组表和成员资格表来实现关系数据库中的对象组。组表是用于保存用于查找组成员的主关键字值的表格。每个组在组表中均有记录。
成员资格表是包括关于组表中每个组的每个成员的信息的表格。组的每个直接成员在成员资格表中均有记录。例如,组“A”可以包括成员1、2和3。成员1、2和3是组A的直接成员。
当定义嵌套组的分级以便组可以是其它组的成员的时候,嵌套组的成员被认为是容器组(container group)的间接成员。嵌套组是其本身是另一对象组的成员的对象组。
例如,在具有成员1、2和3的组“A”中,成员3本身可以是具有成员B1和B2的组。成员B1还可以是具有成员C1和C2的组。在这种情况下,组A是容器组。组3和组B1是嵌套组。成员B1和B2是组A的间接成员。成员C1和C2也是组A的间接成员。
然而,在现有技术中,成员资格表仅提供关于组的直接成员的信息。因此,为了确定这样的组的成员资格,即在该组中组的成员是嵌套组,数据库管理器执行多个查询以便完成嵌套组的分级。例如,关于组A的成员资格的第一查询的结果将提供成员1、2和3。对成员资格表进行第二查询将是必要的,以便确定嵌套组成员3的成员资格。然后将进行对成员资格表的第三查询以确定嵌套组成员B1的成员资格。因而,评估每个成员以确定该成员是否是嵌套组。对于是嵌套组的每个成员,执行另一查询以确定该组的成员资格。该过程继续递归直到不再发现有作为组的成员。
另外,成员资格表仅提供关于相对于动态成员是静态成员的组成员的信息。组的静态成员是这样的组成员,即其必须被手动添加到组或者被从组删除以便改变组成员资格。这一要求造就了对用户进行诸多维护。
可选的组实现是这样一种实现,即其中由公共属性集而不是由成员资格表中的记录来定义组成员。这些是动态组,因为它们不需要成员资格列表维护。如果数据库中的对象具有与组成员资格所要求的那些相匹配的属性,则其自动成为该组的一部分。然而,关系数据库系统的当前实现不允许一起利用静态组和动态组这二者。例如,静态组的成员本身不可以是动态组。
现转至图3,其示出了现有技术组表定义的框图。成员资格表中相同组的所有成员均具有相同的组主关键字(primary key)。这样,单个查询可以用于通过组主关键字来高效率地找到与给定组关联的组的所有成员。接着又可以通过其自己的成员主关键字唯一地标识每个成员。
在这些说明性例子中,记录310和320是对组表变量的定义。记录310是对变量“Group_ID(组_标识符)”的定义,以保存与关系数据库中给定组关联的组主关键字的值。“Group_ID”变量是整型变量。
记录320是对变量“DESCRIPTION(描述)”的字符型(CHAR)定义。“DESCRIPTION”变量用于保存对组的文本描述。例如,如果组是居民组,则“DESCRIPTION”变量可以包括以下文本:“currentresidents(当前居民)”。
参照图4,其描绘了现有技术成员资格表定义的框图。成员资格表是这样的数据库表,即其包括对应于组表中所表示的每个组的成员的信息。成员资格表仅包括关于组表中所参考的每个组的直接成员的信息。记录410、420和430是对成员资格表的变量定义。
记录410是对整型的标识符“ID”变量的定义。标识符ID唯一地标识成员资格表中的记录。
记录420是整型的组标识符“Group_ID”的变量。“Group_ID”变量是组表中所表示的给定组的组主关键字。因而,基于“Group_ID”变量中的组主关键字值,可以将成员资格表中的每个成员标识为特定组的成员。
记录430是成员标识符“Member_ID”的变量,用于唯一地标识给定组的每个成员。记录430中的“Member_ID”定义是对整型变量的定义。组成员资格表定义可以用于建立当前组成员资格表。
因而,在关系数据库系统的现有技术实现中,数据库管理器进行多个查询以确定在支持嵌套组的分级的关系数据库系统中组的成员资格。此外,现有技术的关系数据库系统不支持在组的分级中利用具有静态和动态组二者的组。
说明性实施例认可用户既需要静态组也需要动态组来解决商业问题。说明性实施例还认可在利用嵌套组的分级的情况下,利用多个查询来确定组成员资格是低效率的。因此,不同的说明性实施例提供了一种改进的计算机实现的方法、设备、系统和计算机可用程序产品用于管理数据库。
说明性实施例提供了组表,该组表提供了可空关键字参考(nullablekey reference)变量,其指示表中所参考的组是否是动态组。如果可空关键字参考变量是空值或空,则该组不是动态组。然而,如果可空关键字参考含有值或指向定义了组成员资格的属性的对象的指示器,那么该组是动态组。说明性实施例执行定义了组属性的对象以确定动态组的成员资格。
说明性实施例提供了改进的成员资格表,该改进的成员资格表提供关于组的间接成员以及组的直接成员的信息。因而,数据库管理器可以基于对成员资格表的单个查询生成组的所有直接和间接成员的列表。另外,说明性实施例在成员资格表中提供嵌套变量,其指示组的成员是否是嵌套组。如果成员是嵌套组,则数据库管理器将检查组成员资格表,以便基于可空关键字参考来确定组成员是否是动态组。
因而,依照说明性实施例,当该过程接收对与数据库关联的给定对象组的成员列表的请求时,该过程基于数据库的成员资格表中的记录集为给定对象组标识静态成员集。该给定对象组的静态成员集包括该给定组的所有直接静态成员以及该给定组的所有间接静态成员。因而,该过程可以基于单个数据库查询标识静态参考集。
该过程基于数据库的组表中的参考为给定对象组标识动态成员集。该组表中的参考是对这样的查询对象的参考,即该查询对象定义了给定组的动态成员的属性。该动态成员集包括该给定组的所有直接动态成员以及该给定组的所有间接动态成员。该过程生成成员列表,其中该成员列表包括该静态成员集以及该动态成员集。
由数据库管理器和/或用户使用成员列表来管理数据库。管理数据库包括但不限于:创建新的对象组、将初始成员集添加到新的对象组、将一个或多个新成员添加到现存的对象组、从关系数据库系统中的现存对象组删除一个或多个成员、更新数据库表和/或响应于用户查询关系数据库系统而生成结果。如文中所使用的,成员集可以包括单个成员以及两个或更多的成员。
该过程提供了用于维护组成员资格列表的方法,其包括以下方法:添加和移除静态组的成员,以及指定公共属性用于确定动态组的成员资格。
图5是依照说明性实施例说明了关系数据库系统的框图。关系数据库系统500是这样的数据库系统,即其包括具有存储在数据库表中的数据的一个或多个关系数据库。关系数据库系统是数据处理系统,例如图1中的数据处理系统100以及图2中的数据处理系统200。
在说明性实施例中,关系数据库系统500包括计算机505。计算机505是图1和图2中所示的任何已知或可用的计算设备,其包括但不限于:客户计算机、服务器计算机、膝上型计算机、平板PC或个人数字助理(PDA)。
用户510请求来自关系数据库系统500的查询的结果。来自用户的查询可以包括通过用户接口515请求对象组的成员列表、请求将成员添加到关系数据库中的组和/或从关系数据库中的组删除成员。用户接口515是用于向计算机505提供输入和/或从计算机505接收输出的任何类型的已知或可用接口,其包括但不限于:图形用户接口(GUI)、菜单驱动接口和/或命令行接口。
在这些例子中,数据库管理器520是用于管理关系数据库系统500的关系数据库管理系统软件组件。在该说明性例子中,数据库管理器520使用结构化查询语言(SQL)来从关系数据库标识和检索信息,以及更新数据库表。然而,可以使用用于实现数据库管理系统的任何已知或可用的方法来实现数据库管理器520,其包括但不限于分级数据库管理系统以及面向对象的数据库管理系统。
数据库管理器520管理存储在关系数据库(例如与计算机505关联的关系数据库530)中的表格中的数据。管理表格中的数据包括但不限于:创建新的组、将新成员添加到组、从组删除成员、更新数据库表中的信息,以及生成用户查询的结果用于向用户显示。在该说明性实施例中,与关系数据库530关联的关系数据库表位于单个数据库组件上。然而,依照另一说明性实施例,关系数据库表位于与计算机505关联的两个或更多的数据库组件上。
另外,数据库管理器520还管理存储在远程关系数据库(例如远程关系数据库540)上的关系数据库表中的数据。远程关系数据库540是用于存储并不位于计算机505上的数据集合的任何类型的数据库。在该说明性例子中,远程关系数据库540位于服务器550上。关系数据库530和远程关系数据库540形成了数据库集。
服务器550是任何类型的服务器,例如图1中的服务器104和106。服务器550可以是诸如图1中所描述的网络102这样的网络上的服务器。计算机505通过网络设备560经网络连接访问服务器550上的远程关系数据库540。
网络设备560是已知或可用于允许计算机505访问网络的任何类型的网络访问软件。网络设备560连接至诸如图1中的网络102的网络连接。网络连接允许访问任何类型的网络,例如局域网(LAN)、广域网(WAN)或因特网。
关系数据库530和远程关系数据库540为组对象存储组表和成员资格表,包括对静态组和动态组二者的嵌套组的分级。嵌套组是这样的组成员,即其本身是具有成员的组。嵌套组的每个成员均被认为是容器组的成员。容器组是包括嵌套组的组。换句话说,嵌套组的成员被认为是容器组的内含成员(inclusive member)。然而,容器组的成员不一定是嵌套组的成员。
图6是依照说明性实施例说明了关系数据库系统中组分级结构的框图。组A 610是具有如下三个成员的组:M1 612、M2 614以及组B 616。组B 616是具有成员的嵌套组。组B 616的成员如下:M3 620和M4 622。在该例中,组A是具有三个直接成员,即M1 612、M2 614和组B 616的容器组。作为容器组,组A 610也被认为具有嵌套组B的所有成员的成员。因此,组A还具有两个间接成员,即M3 620和M4 622。
在该例中,如果M3 620也是具有成员C1、C2和C3的嵌套组,那么组A还将被认为具有通过组B 616和组M3 620的间接成员C1、C2和C3。
在该说明性例子中,组A 610的所有成员都是静态成员。静态成员是由用户从成员资格组明确地添加或删除的成员。在这些例子中,用户从组成员资格表手动添加或删除静态成员,以便改变组的组成员资格。
相比之下,基于成员对象的当前属性而将组的动态成员标识为组的成员。换句话说,给定组的组成员可以由组表中的可空外部关键字(foreignkey)参考字段所指向的对象定义为具有欠款属性的任何对象。每次数据库管理器查询数据库表以确定组的成员资格,就会相对于数据库系统执行查询对象以搜索与应付帐目、到期金额或者所欠款的其它字段或指示器相关联的、关系数据库中的所有对象。
例如,如果组B 616是欠图书馆罚款的成员的动态组,则将执行查询对象以确定与当前欠图书馆钱的图书馆顾客相关联的成员对象。今天,组B 616中的成员可能包括三个图书馆顾客。然而,明天如果三个顾客之一在此期间交付了其图书馆罚款,则组B616可能仅包括两个图书馆顾客。
由于动态组成员资格可以基于动态属性经常改变这一事实,对象的动态组不要求成员资格表提供关于该组的成员的信息。因而,动态组成员资格可以基于改变成员对象的属性而改变,而不要求用户手动变更与成员组关联的成员资格表中的记录。
说明性实施例认可用户在关系数据库内的组分级中既需要静态组又需要动态组,以便解决商业问题。因此,说明性实施例为关系数据库提供了一种改进的组表和成员资格表。该成员资格表含有关于组表中每个组的所有直接和间接成员的信息。该成员资格表还指示每个直接以及每个间接成员是否是嵌套组。对于是嵌套组的每个成员,数据库管理器检查由说明性实施例所提供的组表可空外部关键字参考字段,以确定该嵌套组是否是动态组。如果该组是动态组,则数据库管理器执行相对于数据库系统定义了动态组的属性的对象,以获得该动态组的当前成员。以这样的方式,如果所有的成员都是静态成员,则可以利用单个查询来确定组的成员资格。通过在组表中提供可空外部关键字参考来指示组是静态的还是动态的,说明性实施例还使得动态组能够成为静态组的成员。如果组是静态的,则组表中的可空外部关键字参考将是空值或空。因而,说明性实施例的关系数据库支持其中成员可以包括静态成员以及动态成员二者的组分级。
现参照图7,其依照说明性实施例示出了说明关系数据库的框图。关系数据库700是诸如图5中的关系数据库530和远程关系数据库540的关系数据库。关系数据库700存储诸如组表710的一个或多个组表。关系数据库700还存储诸如成员资格表720的一个或多个成员资格表。
组表710是用于由组名称字段730所标识的成员组的组定义表。组名称字段730可以包括标识给定组的主关键字。
描述字段732提供存储组的文本描述的地方。组定义表710还包括定义了动态组的属性的查询对象的可空外部关键字参考字段734。出现对查询对象的参考指示组是动态组。动态组的成员是通过相对于数据库系统中的数据库执行查询对象来确定的。数据库可以是或可以不是含有该组表的相同的数据库。在该例中,查询对象是SQL查询。然而,查询对象还可以作为属性列表或者定义了用于标识组成员的属性的任何其它对象来实现。动态组允许用户快速形成共享公共属性的对象组并且允许这些组保持当前情况,而不需要用户必须在成员资格表中明确地添加或删除组的成员。
成员资格表720是提供关于组的成员的信息的成员资格表。成员资格表720提供关于给定组的间接和直接成员二者的信息。在该说明性例子中,并不在成员资格表中标识动态组的成员,因为动态组成员资格取决于数据库系统中改变的对象属性。通过相对于数据库系统执行由可空外部关键字参考字段734所参考的查询对象来标识动态成员。换句话说,可空外部关键字参考734指示组是否是动态组。
组名称字段740基于对应于组表710中的组名称字段730的组名称来标识给定组。组名称可以包括给定组的主关键字。组名称字段740用于标识组以形成被标识组。
成员名称字段742标识被标识的成员组中的给定成员以形成被标识成员。具有公共组名称字段的成员资格组中的每个成员都是被标识组的成员集中的成员。
直接/间接字段744指示被标识成员是组的直接成员还是间接成员。因而,数据库管理器利用对成员资格表的单个查询可以获得给定的被标识组的所有直接和间接成员的列表。因而,数据库管理器可以检查成员资格表中该直接/间接字段,以便确定给定组的成员是该组的直接静态成员还是该组的间接静态成员。
嵌套字段746指示给定对象组的被标识成员是否是嵌套组。如果被标识成员是嵌套组,则该嵌套组的成员将是被标识组的间接成员。在成员资格表的直接/间接字段744中指示被标识组的静态间接成员。将该信息放入成员资格表使得有可能简单并高效地确定哪些成员是组,而不需要返回查阅组表并搜索成员名称。因而,数据库管理器可以使用或检查成员资格表中的该嵌套字段以确定给定组的成员是否是嵌套组。
此外,作为嵌套组的组成员可以是静态嵌套组或动态嵌套组。在成员资格表720中提供静态嵌套组的间接成员。然而,执行定义了动态组的属性的查询对象以确定动态组的成员资格。因而,响应于基于嵌套字段746确定对象组的成员是嵌套成员,数据库管理器为该嵌套组检查组表710的可空外部参考字段734,以便确定该嵌套组是否是动态组以形成动态嵌套组。组表中的可空外部关键字参考是对这样的查询对象的参考,即该查询对象定义了给定组的动态成员的属性。
如果该组是动态嵌套组,则执行该动态嵌套组的查询对象以标识该动态嵌套组的成员集以形成动态成员集。该动态嵌套组的成员是对象组的间接动态成员。如此,由数据库管理器基于单个数据库查询来标识该动态嵌套组的成员集。
由于分级组结构的特性,间接成员有可能是通过几个关联的间接成员。为了避免具有重复的间接成员资格记录,参考计数字段748提供指示器来跟踪每个间接成员的间接成员资格。参考计数字段748指示给定组成员的若干间接成员。因而,如果成员B1是组A的间接成员并且是组M3的间接成员,则成员B1的参考计数字段将具有值“2”以指示B1是对于组A的组分级中的两个组的间接成员。
在该说明性实施例中,成员资格表提供关于静态组的所有直接和间接成员的信息。因此,数据库管理器可以利用单个查询来确定被标识组的所有直接和间接成员。如此,数据库管理器可以避免进行多个查询来循环确定每个嵌套组的成员资格直到发现不再有作为组的成员。因而,依照说明性实施例的成员资格表允许数据库管理器更快速有效地进行成员资格搜索。
图8是依照说明性实施例说明了组成员资格表的框图。成员资格表定义800是对诸如图7中的成员资格表720这样的成员资格表的变量的定义。记录810是对用于标识成员组的变量的变量“Group_ID”的定义,例如图7中的组名称字段740。记录810是整型变量。
记录820是用于变量“Member_ID”的整型变量。记录820“Member_ID”变量标识给定成员组中的成员,例如图7中的成员名称字段742。
记录830是对用于变量“IS_DIRECT_MEMBER”的字符型变量的定义。变量“IS_DIRECT_MEMBER”指示给定成员是成员组的直接成员还是间接成员(由于组的分级结构),例如图7中的直接/间接字段744。因而,通过检查该直接/间接字段744,数据库管理器可以确定给定组的成员是该组的直接静态成员还是该组的间接静态成员。
记录840是对字符型变量“IS_NESTED_GROUP”的定义。变量“IS_NESTED_GROUP”指示成员组的给定成员是否是嵌套组,例如图7中的嵌套字段746。对于组可以被嵌套的深度或程度没有设置任何限制。特定对象有可能由于几个关联而成为一个组的间接成员。
记录850是对整型变量“INDIRECT_MEMBER_REF_COUNT”的定义。变量“INDIRECT_MEMBER_REF_COUNT”用于跟踪出现给定组成员的次数(由于通过各种关联的给定组成员的间接成员资格的多个实例),例如图7中的参考计数字段748。当将成员添加到作为嵌套对象的被标识成员的时候,新成员也作为间接成员被添加到当前组是其成员的所有其它的组。例如,返回参照图6,如果将新成员M5添加到组B,那么相同的对象M5也被添加作为组A的间接成员。
然而,在该例中,如果对象M5通过组成员资格分级中的另一关系已经是组A的间接成员,则简单地逐一递增或增加现有的间接成员M5的参考计数。在这种情况下并不创建新的数据库记录,因为M5的间接成员资格数据库记录已经存在于组A。
同样,当从组移除组成员的时候,那么也移除了此组成员的所有间接成员资格。再次参照图6,如果从组A 610移除组B 616,那么也从组A 616移除了M3 620和M4 622的间接成员资格。
现转至图9,其依照说明性实施例示出了说明组表定义的框图。组表定义900是对诸如图7中的组表710这样的组表中的变量的定义。
记录910是对整型的组标识符“GROUP_ID”变量的定义。变量“GROUP_ID”标识给定组。“GROUP_ID”变量可以包括用于标识组的主关键字或组名称,例如图3中的组名称730。
参考920是对字符型(CHAR)的变量“DESCRIPTION”的定义。“DESCRIPTION”保存文本描述以便对组进行描述,例如图7中的描述字段732。
参考930是对整型的变量“QUERY_OBJECT_ID”的定义。“QUERY_OBJECT_ID”是查询对象的可空外部关键字参考的变量,例如图7中的可空外部关键字参考字段734。出现查询对象的参考指示该组是动态组。通过执行相对于数据库的参考查询来确定动态组的成员。这可以是其中存储了组表和成员资格表的相同的数据库,例如图5中的关系数据库530,或者其可以是能够存储位于不同计算机上的数据集合的远程关系数据库,例如图5中的远程关系数据库540。数据库可以是或可以不是含有组表的相同数据库。
组成员资格表并不包括动态组的成员的记录。然而,动态组可以是静态组的成员。在搜索静态组的成员期间,当遇到动态组作为静态组的嵌套组成员的时候,通过数据库管理器评估该动态组的查询来确定其成员。将结果添加到已标识的成员结果集。该结果集存储在存储器中,直到完成确定成员资格列表的过程,并且然后将该结果集返回给请求者。
图10是依照说明性实施例说明了用于请求组的成员资格列表的过程的流程图。在图10中所描绘的例子中,在诸如图5中的数据库管理器520这样的软件组件中实现该过程。
该过程通过请求成员组“G1”的成员资格列表而开始(步骤1002)。“G1”是该成员组的组名称。“G1”是用于标识给定组的任何的任意标识符。“G1”是可以包括任意数目的直接和间接成员以及任意数目的静态和动态嵌套组的组。
该过程将结果集初始化为空集(步骤1004)。换句话说,该过程为尚未被确定的组“G1”的成员创建结果集或占位符。该过程从成员资格表获得组“G1”的所有直接和间接成员资格记录的列表(步骤1006)。该过程将直接和间接成员列表中所有的成员添加到结果集(步骤1008)。
该过程获得在成员资格表中具有组“G1”的直接或间接成员资格记录的所有动态组的列表(步骤1010)。尽管由于动态组成员资格的变化特性,成员资格表不具有动态组的成员的记录,然而成员资格表却包括作为“G1”的动态组成员的成员的记录。该过程对动态组的列表是否为空进行确定(步骤1012)。如果该列表为空,则该过程返回成员组“G1”的成员的结果集(步骤1014),并且此后该过程终止。如果“G1”的直接或间接成员都不是动态组,则动态组的列表为空。通过检查组表中给定嵌套组的可空外部关键字参考字段,例如图7中的可空外部关键字参考734,可以对作为嵌套组的“G1”的直接或间接成员是否也是动态嵌套组进行确定。如果嵌套组的可空外部关键字参考是空值或空,那么该嵌套组不是动态组。
现在返回步骤1012,如果该过程对动态组的列表不为空进行了确定,则该过程从动态成员的列表中获取下一项(步骤1016)。动态成员的列表中的项目是组名称、主关键字或动态成员的其它组标识符。
该过程基于由动态组的查询对象所指示的属性来计算动态组的成员资格列表,并且将具有所期望的属性的所有成员都添加到结果集(步骤1018)。由组表的可空外部关键字参考字段指向动态组的查询对象。执行该查询对象以确定动态组的成员列表。
该过程从结果集移除任何的重复项(步骤1020)。重复项可能出现在其中成员是多于一个动态组的成员的结果集中。重复项还可能出现在其中成员既是静态组又是一个或多个动态组的成员的地方。
该过程然后返回步骤1012来确定动态组的列表是否含有该过程尚未为其计算动态组的成员资格列表的任何另外的动态组。当该过程确定以下情况的时候,即动态组的列表为空或者已经计算了列表中所有动态组的成员资格并将其添加到结果集(步骤1012),该过程返回结果集(步骤1014),并且此后该过程终止。
在已经确定了给定成员组的成员资格之后,用户可以要求向该组添加成员或者从该成员组移除成员。
现转至图11,其依照说明性实施例示出了说明用于将成员添加到组的过程的流程图。在图11的该例中,该过程是在诸如图5中的数据库管理器520这样的软件组件中实现的。
该过程通过将成员“M1”添加到组“G1”而开始(步骤1102)。“M1”是任意的成员名称,例如在图7的成员名称字段742中所找到的。成员名称是用于标识给定对象组中唯一成员的任何名称或标识符。
该过程对组“G1”是否是动态组进行确定(步骤1104)。通过参考组表中“G1”的可空外部关键字参考,例如图7中的可空外部关键字参考字段734,该过程确定“G1”是否是动态组。如果该过程确定组“G1”是动态组,则该过程就提供该过程不能够明确地将成员添加到动态组“G1”的通知(步骤1106),并且此后该过程终止。
现在返回步骤1104,如果该过程确定组“G1”不是动态组,则该过程将直接成员资格记录添加到用于“M1-G1”关系的成员资格表(步骤1108)。换句话说,对于给定组的附加成员,将成员资格记录添加到成员资格表。
该过程得到其中“G1”是间接或直接成员的所有组的列表(步骤1110)。该过程可以通过对成员资格表进行查询来获得所有直接和间接成员的列表。成员资格表标识给定组(例如组“G1”)的所有直接和间接成员。
该过程对其中“G1”是直接或间接成员的所有组的列表是否为空进行确定(步骤1112)。如果该过程确定列表不为空,则该过程从列表获取下一组项(步骤1114)。该过程对“M1”是否具有该组项的间接成员资格记录进行确定(步骤1116)。换句话说,该过程想要知道“M1”的记录是否已经存在于成员资格组中。在这样的情况下,将不需要创建“M1”的记录的另外的重复副本。
如果该过程确定“M1”的记录作为该组的间接成员而存在,则该过程在用于“M1”组项关系的成员资格表中增加对间接成员资格记录的参考计数(步骤1118),并且该过程返回步骤1112,以确定是否有任何另外的项保留在其中“G1”是成员的组的列表中。
如果该过程确定“M1”不具有该组项的间接成员资格记录,则该过程将“M1”的间接成员资格记录添加到该组项的成员资格表中,并且“M1”的参考计数上的初始计数是“1”(步骤1120)。该过程然后返回步骤1112以确定在列表中是否发现其中“G1”是间接或直接成员的任何另外的组。
如果该过程确定其中“G1”是直接或间接成员的组的列表不含另外的条目,则该过程对“M1”是否是组进行确定(步骤1122)。换句话说,该过程确定“M1”本身是否是具有成员的嵌套组。如果该过程确定“M1”不是嵌套组,则此后该过程终止。
返回步骤1122,如果该过程确定“M1”是具有成员的嵌套组,则该过程将“M1”的成员资格表中所有直接和间接成员资格记录的“IS_NESTED_GROUP”属性变量设置为“true(真)”(步骤1123)。换句话说,更新成员资格表中的嵌套字段以指示附加成员是嵌套组。
接下来,该过程得到嵌套组“M1”的所有直接和间接成员的列表(步骤1124)。该过程对嵌套组“M1”的直接和间接成员的列表是否为空进行确定(步骤1126)。如果该过程确定成员列表为空,则此后该过程终止。换句话说,如果“M1”的嵌套组不含成员,则不要求进一步的处理。
返回步骤1126,如果该过程确定“M1”的成员列表不为空,则该过程从列表获取标识“M1”的成员的下一项(步骤1128)。该过程对该项是否对“G1”已经存在间接成员资格记录进行确定(步骤1130)。如果该过程确定不存在间接成员资格记录,则该过程将该项的间接成员资格记录添加到组“G1”的成员资格表,并且将“M1”的初始参考计数设置成“1”(步骤1132)。如此,“M1”的间接成员资格对组“G1”的任何将来的出现均会导致将计数器增加到“2”而不是为“M1”创建另一重复的成员资格记录。该过程然后返回步骤1126以确定在“M1”的直接和间接成员的列表中是否列出了任何另外的成员。该过程继续循环处理该列表中的每一项,直到所有直接和间接成员的成员资格记录都出现在“M1”的成员资格表中。
返回步骤1130,如果该过程确定“M1”的间接成员资格记录已经出现在成员资格表中,则该过程将逐一增加用于“M1-G1”关系的成员资格表中间接成员资格记录的参考计数(步骤1134),而不是为“M1”创建重复的成员资格记录。换句话说,响应于确定嵌套组成员的给定成员的记录出现在组“G1”的成员资格表中,该过程将增加该嵌套组成员的给定成员的参考计数。该过程返回步骤1126并且继续处理“M1”的成员列表中的项目,直到该列表为空,并且此后该过程终止。
图12是依照说明性实施例说明了用于从组移除成员的过程的流程图。在该例中,在图12中,该过程是在诸如图5中的数据库管理器520这样的软件组件中实现的。
该过程通过从组“G1”移除成员“M1”而开始(步骤1202)。通过参考对应于组表中的组“G1”的可空外部参考关键字,该过程对“G1”是否是动态组进行确定(步骤1204)。如果该过程确定“G1”是动态组,则该过程向用户提供不能够明确地从动态组移除成员的通知(步骤1206)。
返回步骤1204,如果该过程确定“G1”不是动态组,则该过程从根据“M1-G1”关系的成员资格表移除直接成员资格记录(步骤1208)。该过程得到其中“G1”是间接或直接成员的所有组的列表“L1”(步骤1210)。
接下来,该过程对列表“L1”是否为空进行确定(步骤1212)。如果该过程确定列表“L1”为空,则此后该过程终止。换句话说,如果“G1”不具有直接或间接成员资格,则不要求进一步的处理。然而,如果该过程确定“L1”不为空,则该过程从列表“L1”获取下一组项(步骤1214)进行处理。
该过程减少“L1”项和“M1”的间接成员资格记录的参考计数器(步骤1216),以便反映已经从与“G1”关联的嵌套组的一个实例中移除了“M1”的事实。该过程然后对参考计数器的值是否等于零进行确定(步骤1218)。如果参考计数器等于零,则另一嵌套组中不存在“M1”的更多实例。因此,该过程移除用于“M1-L1项”关系的成员资格表中的间接成员资格记录(步骤1220)。
接下来,该过程对“M1”本身是否是具有成员的嵌套组进行确定(步骤1222)。通过检查用于“G1-M1”关系的成员资格表中的嵌套字段,例如图7中的嵌套字段746,该过程确定“M1”是否是嵌套组。如果“M1”不是组,则此后该过程终止。然而,如果“M1”是嵌套组,则该过程得到“M1”的所有直接和间接成员的列表“L2”(步骤1224)。
该过程然后对列表“L2”是否为空进行确定(步骤1226)。如果列表“L2”为空,则此后该过程终止。
如果该过程确定列表“L2”不为空,则该过程从列表“L2”获取下一项(步骤1228)。该过程减少“L1项-L2”项的间接成员资格记录的参考计数器(步骤1230),以便反映移除了L2项的间接成员资格的实例。换句话说,响应于确定被移除成员是嵌套组,对于其中被移除成员是直接成员或间接成员的所有组,减少间接成员资格记录中的参考计数。
如以上所讨论的,当移除了作为容器组的嵌套组的给定成员时,也从该容器组的间接成员资格中移除了该嵌套组的所有成员。因此,减少参考计数以反映从容器组成员资格中移除了“L2项”的间接成员资格。
该过程对参考计数的值是否等于零进行确定(步骤1232)。如果参考计数等于零,则该过程从用于“L1-L2”项关系的成员资格表移除间接成员资格记录(步骤1234)。移除间接成员资格记录是因为给定的“L2项”的实例都不是通过任何其它嵌套组的间接成员。因此,不再需要给定的“L2项”的间接成员资格记录。该过程返回步骤1226,在这里该过程将继续循环处理列表“L2”中的每一项,直到该列表为空,并且此后该过程终止。
图13是依照说明性实施例说明了用于创建对象组的过程的流程图。在图13的该例中,该过程是在诸如图5中的数据库管理器520这样的软件组件中实现的。
该过程通过接收用户请求创建新组“G1”而开始(步骤1302)。该过程在组表中创建名为“G1”的条目(步骤1304)。该过程对“G1”是否是动态组进行确定(步骤1306)。如果该过程确定“G1”不是动态组,则该过程对用户是否为新组“G1”提供初始成员列表进行确定(步骤1308)。如果用户没有为“G1”提供成员列表,则此后该过程终止。
如果该过程确定用户为“G1”提供了初始成员列表,则该过程迭代循环将每一项添加到组“G1”(步骤1310),并且此后该过程终止。依照图11中所示出的用于将成员添加到组的过程,该过程将每个成员都添加到组“G1”。
返回步骤1312,如果该过程确定“G1”是动态组,则该过程从用户得到组属性表信息(步骤1312)。该过程将参考添加到“G1”的组表的变量“QUERY_OBJECT_ID”列中的组属性信息(步骤1314),该变量指示用于确定动态组成员资格的查询对象,并且此后该过程终止。
因而,说明性实施例允许关系数据库在组分级结构中利用静态和动态组成员资格二者,同时最小化获得组成员资格结果集所需要的查询数。
说明性实施例提供了这样的组表,即该组表提供了指示该表中所参考的组是否是动态组的可空关键字参考变量。如果可空关键字参考变量为空值或空,则该组不是动态组。然而,如果可空关键字参考含有这样的值或指示器,即该值或指示器指向定义了组成员资格的属性的对象,那么该组就是动态组。说明性实施例执行定义了组属性的对象以确定动态组的成员资格。
说明性实施例提供了一种改进的成员资格表,该成员资格表提供关于组的间接成员以及组的直接成员的信息。因而,数据库管理器可以基于对成员资格表的单个查询生成组的所有直接和间接成员的列表。另外,说明性实施例在成员资格表中提供了指示组成员是否是嵌套组的嵌套变量。如果成员是嵌套组,则数据库管理器将检查组成员资格表以基于可空关键字参考来确定组成员是否是动态组。
因而,依照说明性实施例,当该过程接收对与数据库关联的给定对象组的成员列表的请求时,该过程基于数据库中成员资格表中的记录集为给定对象组标识静态成员集。该给定对象组的静态成员集包括该给定组的所有直接静态成员以及该给定组的所有间接静态成员。
该过程基于数据库中组表中的参考为给定对象组标识动态成员集。组表中的参考是对查询对象的参考。该动态成员集包括该给定组的所有直接动态成员以及该给定组的所有间接动态成员。该过程生成成员列表,其中该成员列表包括静态成员集以及动态成员集。因而,基于对数据库的成员资格表的单个查询,数据库管理器可以获得组的所有直接和间接静态成员的列表。另外,基于对组表的单个查询,数据库管理器可以获得动态组的成员。
由数据库管理器和/或用户使用成员列表来管理数据库。管理数据库包括但不限于:创建新的对象组、将初始成员集添加到新的对象组、将一个或多个新成员添加到现存的对象组、从关系数据库系统中现存的对象组删除一个或多个成员、更新数据库表和/或响应于用户对关系数据库系统的查询生成结果。
附图中的流程图和框图说明了根据本发明的各种实施例的系统、方法和计算机程序产品的可能实现的体系结构、功能性和操作。就此而言,流程图或框图中的每个块均可以表示模块、区段或代码的一部分,其包括用于实现指定逻辑功能的一个或多个可执行指令。还应当注意到,在一些可选的实现中,块中所指出的功能可以不按照图中所指出的顺序实现。例如,以连续方式示出的两个块,实际上,可以在实质上并行地执行,或者有时可以以相反的顺序执行这些块,这取决于所涉及的功能性。还可以注意到,框图和/或流程图说明中的每个块,以及框图和/或流程图说明中块的结合,可以通过执行指定功能或作用的专用的基于硬件的系统,或者专用硬件和计算机指令的结合来实现。
本发明可以采取全硬件实施例、全软件实施例或者既含有硬件元素又含有软件元素的实施例的形式。在优选的实施例中,以软件实现本发明,其包括但不限于固件、常驻软件、微码等。
此外,本发明可以采取可访问于计算机可用或计算机可读介质的计算机程序产品的形式,该计算机可用或计算机可读介质提供由计算机或任何指令执行系统使用的或者与计算机或任何指令执行系统结合使用的程序代码。对于本说明书来说,计算机可用或计算机可读介质可以是能够容纳、存储、通信、传播或传送由指令执行系统、装置或设备使用的或者与指令执行系统、装置或设备结合使用的程序的任何有形装置。
介质可以是电子、磁性、光学、电磁、红外或半导体系统(或装置或设备)或者传播介质。计算机可读介质的例子包括半导体或固态存储器、磁带、可装卸计算机磁盘、随机访问存储器(RAM)、只读存储器(ROM)、硬磁盘和光盘。光盘的当前的例子包括压缩磁盘-只读存储器(CD-ROM)、压缩磁盘-读/写(CD-R/W)和DVD。
适于存储和/或执行程序代码的数据处理系统可以包括通过系统总线直接地或间接地耦合于存储元件的至少一个处理器。存储元件可以包括在程序代码的实际执行期间所使用的局部存储器、大容量存储器,以及为了减少在执行期间必须从大容量存储器检索代码的次数而提供对至少一些程序代码的临时存储的高速缓冲存储器。
输入/输出或I/O设备(包括但不限于键盘、显示器、指点设备等)可以直接地或者通过插入I/O控制器耦合于系统。
网络适配器也可以耦合于系统,从而使得数据处理系统能够适于通过介入专用或公用网络耦合于其它的数据处理系统或远程打印机或存储设备。调制解调器、电缆调制解调器和以太网卡正是几种当前可用类型的网络适配器。
已经出于说明和描述的目的给出了对本发明的描述,且并不旨在以所公开的形式穷举或限制本发明。对本领域的普通技术人员来说,很多修改和变型是显而易见的。选择和描述实施例是为了最好地解释本发明的原理、实际应用,以及使本领域的普通技术人员能够针对适于预期的特定用途的各种实施例及各种修改来理解本发明。

Claims (32)

1.一种用于管理数据库的计算机实现的方法,所述计算机实现的方法包括:
接收对与所述数据库关联的给定对象组的成员列表的请求;
基于所述数据库中成员资格表中的记录集,为所述给定对象组标识静态成员集,其中所述给定对象组的静态成员集包括所述给定组的所有直接静态成员以及所述给定组的所有间接静态成员;
基于所述数据库中组表中的参考,为所述给定对象组标识动态成员集,其中所述动态成员集包括所述给定组的所有直接动态成员以及所述给定组的所有间接动态成员;以及
生成所述成员列表,其中所述成员列表包括所述静态成员集和所述动态成员集,并且其中,所述成员列表用于管理所述数据库。
2.根据权利要求1的计算机实现的方法,其中所述成员资格表包括嵌套字段,所述嵌套字段指示所述给定对象组的成员是否是嵌套组。
3.根据权利要求2的计算机实现的方法,其进一步包括:
响应于确定所述给定对象组的成员是嵌套成员,检查所述组表中的参考,以便确定所述给定对象组的嵌套成员是否是动态组以形成动态嵌套组。
4.根据权利要求3的计算机实现的方法,其进一步包括:
执行所述动态嵌套组的查询对象,以便标识所述动态嵌套组的成员集以形成所述给定对象组的间接动态成员。
5.根据权利要求4的计算机实现的方法,其中基于单个数据库查询,标识所述动态嵌套组的成员集。
6.根据权利要求1的计算机实现的方法,其进一步包括:
检查所述成员资格表中的字段,以便确定所述给定组的成员是否是所述组的直接静态成员以及所述组的间接静态成员中的一个。
7.根据权利要求1的计算机实现的方法,其中所述组表中的参考是对查询对象的参考,所述查询对象定义了所述给定组的动态成员的属性。
8.根据权利要求7的计算机实现的方法,其进一步包括:
执行相对于所述数据库的所述查询对象,以便标识所述给定组的动态成员集以形成所述动态成员集。
9.根据权利要求1的计算机实现的方法,其中基于单个数据库查询,标识所述静态成员集。
10.根据权利要求1的计算机实现的方法,其进一步包括:
响应于接收到将成员添加到所述给定组以形成附加成员的请求,将直接成员资格记录添加到所述给定组的附加成员的成员资格表以形成附加成员。
11.根据权利要求10的计算机实现的方法,其进一步包括:
响应于确定所述附加成员是嵌套组,在所述成员资格表中设置字段,以便指示所述附加成员是嵌套组以形成嵌套组成员。
12.根据权利要求11的计算机实现的方法,其进一步包括:
响应于确定所述嵌套组成员的给定成员的记录出现在所述给定组的成员资格表中,增加所述嵌套组成员的给定成员的参考计数。
13.根据权利要求11的计算机实现的方法,其进一步包括:
响应于确定所述嵌套组成员的给定成员的记录并未出现在所述给定组的成员资格表中,在所述给定组的成员资格表中添加所述嵌套组成员的给定成员的间接成员资格记录。
14.根据权利要求1的计算机实现的方法,其进一步包括:
响应于接收到从所述给定组移除成员的请求,从被移除成员的成员资格表移除直接成员资格记录以形成被移除成员。
15.根据权利要求14的计算机实现的方法,其进一步包括:
响应于确定所述被移除成员是嵌套组,减少其中所述被移除成员是直接成员或间接成员的所有组的间接成员资格记录中的参考计数。
16.根据权利要求1的计算机实现的方法,其中由数据库管理器进行:接收对成员列表的请求、标识静态成员集、标识动态成员集,以及生成权利要求1中所述的成员列表。
17.一种用于管理数据库的设备,所述设备包括:
接收装置,所述接收装置用于接收对与所述数据库关联的给定对象组的成员列表的请求;
第一标识装置,所述第一标识装置用于基于所述数据库中成员资格表中的记录集,为所述给定对象组标识静态成员集,其中所述给定对象组的静态成员集包括所述给定组的所有直接静态成员以及所述给定组的所有间接静态成员;
第二标识装置,所述第二标识装置用于基于所述数据库中组表中的参考,为所述给定对象组标识动态成员集,其中所述动态成员集包括所述给定组的所有直接动态成员以及所述给定组的所有间接动态成员;
生成装置,所述生成装置用于生成所述成员列表,其中所述成员列表包括所述静态成员集和所述动态成员集,并且其中,所述成员列表用于管理所述数据库。
18.根据权利要求17的设备,其中所述成员资格表包括嵌套字段,所述嵌套字段指示所述给定对象组的成员是否是嵌套组。
19.根据权利要求18的设备,其进一步包括:
检查装置,其用于响应于确定所述给定对象组的成员是嵌套成员,检查所述组表中的参考,以便确定所述给定对象组的嵌套成员是否是动态组以形成动态嵌套组。
20.根据权利要求19的设备,其进一步包括:
执行装置,其用于执行所述动态嵌套组的查询对象,以便标识所述动态嵌套组的成员集以形成所述给定对象组的间接动态成员。
21.根据权利要求20的设备,其中所述动态嵌套组的成员集是基于单个数据库查询而被标识的。
22.根据权利要求17的设备,其进一步包括:
检查装置,其用于检查所述成员资格表中的字段,以便确定所述给定组的成员是否是所述组的直接静态成员以及所述组的间接静态成员中的一个。
23.根据权利要求17的设备,其中所述组表中的参考是对查询对象的参考,所述查询对象定义了所述给定组的动态成员的属性。
24.根据权利要求23的设备,其进一步包括:
执行装置,其用于执行相对于所述数据库的所述查询对象,以便标识所述给定组的动态成员集以形成所述动态成员集。
25.根据权利要求17的设备,其中所述静态成员集是基于单个数据库查询而被标识的。
26.根据权利要求17的设备,其进一步包括:
第一添加装置,其用于响应于接收到将成员添加到所述给定组以形成附加成员的请求,将直接成员资格记录添加到所述给定组的附加成员的成员资格表以形成附加成员。
27.根据权利要求26的设备,其进一步包括:
设置装置,其用于响应于确定所述附加成员是嵌套组,在所述成员资格表中设置字段,以便指示所述附加成员是嵌套组以形成嵌套组成员。
28.根据权利要求27的设备,其进一步包括:
增加装置,其用于响应于确定所述嵌套组成员的给定成员的记录出现在所述给定组的成员资格表中,增加所述嵌套组成员的给定成员的参考计数。
29.根据权利要求27的设备,其进一步包括:
第二添加装置,其用于响应于确定所述嵌套组成员的给定成员的记录并未出现在所述给定组的成员资格表中,在所述给定组的成员资格表中添加所述嵌套组成员的给定成员的间接成员资格记录。
30.根据权利要求17的设备,其进一步包括:
移除装置,其用于响应于接收到从所述给定组移除成员的请求,从被移除成员的成员资格表移除直接成员资格记录以形成被移除成员。
31.根据权利要求30的设备,其进一步包括:
减少装置,其用于响应于确定所述被移除成员是嵌套组,减少其中所述被移除成员是直接成员或间接成员的所有组的间接成员资格记录中的参考计数。
32.根据权利要求17的设备,其中由数据库管理器进行:接收对成员列表的请求、标识静态成员集、标识动态成员集,以及生成权利要求17中所述的成员列表。
CNB2007101361238A 2006-07-21 2007-07-18 用于在关系数据库中表示组分级结构的方法和设备 Active CN100517334C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/491,427 US10503736B2 (en) 2006-07-21 2006-07-21 Representing a group hierarchy structure in a relational database
US11/491,427 2006-07-21

Publications (2)

Publication Number Publication Date
CN101110082A CN101110082A (zh) 2008-01-23
CN100517334C true CN100517334C (zh) 2009-07-22

Family

ID=38972633

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB2007101361238A Active CN100517334C (zh) 2006-07-21 2007-07-18 用于在关系数据库中表示组分级结构的方法和设备

Country Status (2)

Country Link
US (2) US10503736B2 (zh)
CN (1) CN100517334C (zh)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2216695B1 (de) * 2009-02-09 2013-03-27 Siemens Aktiengesellschaft Verfahren zum Betrieb eines Automatisierungssystems, korrespondierendes Computerprogramm und System oder Gerät, das nach dem Verfahren arbeitet
EP2221679B1 (de) * 2009-02-11 2012-06-06 Siemens Aktiengesellschaft Verfahren zur logischen Verschaltung von Sicherheitskreisen in einer industriellen Automatisierungsordnung und Projektierungseinrichtung zur Durchführung des Verfahrens
US8290900B2 (en) 2010-04-24 2012-10-16 Research In Motion Limited Apparatus, and associated method, for synchronizing directory services
CN108055196B (zh) * 2018-01-09 2020-01-31 论客科技(广州)有限公司 基于即时通讯创建讨论群的方法、装置及系统
CN112231367B (zh) * 2020-12-14 2021-03-09 腾讯科技(深圳)有限公司 基于人工智能的业务处理方法、装置及电子设备
CN113204564B (zh) * 2021-05-20 2023-02-28 山东英信计算机技术有限公司 一种数据库高频sql查询方法、系统和存储介质

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7801913B2 (en) * 1998-12-07 2010-09-21 Oracle International Corporation System and method for querying data for implicit hierarchies
US20020049705A1 (en) * 2000-04-19 2002-04-25 E-Base Ltd. Method for creating content oriented databases and content files
US6782379B2 (en) * 2000-12-22 2004-08-24 Oblix, Inc. Preparing output XML based on selected programs and XML templates
US7085834B2 (en) * 2000-12-22 2006-08-01 Oracle International Corporation Determining a user's groups
US6816871B2 (en) * 2000-12-22 2004-11-09 Oblix, Inc. Delivering output XML with dynamically selectable processing
US6768988B2 (en) * 2001-05-29 2004-07-27 Sun Microsystems, Inc. Method and system for incorporating filtered roles in a directory system
US6785686B2 (en) * 2001-05-29 2004-08-31 Sun Microsystems, Inc. Method and system for creating and utilizing managed roles in a directory system
US20050027721A1 (en) * 2002-04-03 2005-02-03 Javier Saenz System and method for distributed data warehousing
US8271530B2 (en) * 2002-04-08 2012-09-18 Oracale International Corporation Method and mechanism for managing and accessing static and dynamic data
US7146367B2 (en) * 2002-05-14 2006-12-05 Advectis, Inc. Document management system and method
US7136873B2 (en) * 2002-07-20 2006-11-14 Microsoft Corporation Dynamic filtering in a database system
US7668885B2 (en) * 2002-09-25 2010-02-23 MindAgent, LLC System for timely delivery of personalized aggregations of, including currently-generated, knowledge
US20060004690A1 (en) * 2004-05-21 2006-01-05 Bea Systems, Inc. Systems and methods for dynamic configuration of a collaboration
US7499939B2 (en) * 2004-10-18 2009-03-03 International Business Machines Corporation Method for efficiently managing membership in a hierarchical data structure
US8412750B2 (en) * 2005-09-26 2013-04-02 Research In Motion Limited LDAP to SQL database proxy system and method
US20070218900A1 (en) * 2006-03-17 2007-09-20 Raj Vasant Abhyanker Map based neighborhood search and community contribution
US20070156736A1 (en) * 2006-01-05 2007-07-05 International Business Machines Corporation Method and apparatus for automatically detecting a latent referential integrity relationship between different tables of a database
US10666714B2 (en) * 2017-04-04 2020-05-26 International Business Machines Corporation Data integration application execution management

Also Published As

Publication number Publication date
CN101110082A (zh) 2008-01-23
US10503736B2 (en) 2019-12-10
US20080021913A1 (en) 2008-01-24
US20200073870A1 (en) 2020-03-05

Similar Documents

Publication Publication Date Title
US7672966B2 (en) Adding extrinsic data columns to an existing database schema using a temporary column pool
US6594665B1 (en) Storing hashed values of data in media to allow faster searches and comparison of data
US20200073870A1 (en) Method and Apparatus for Representing a Group Hierarchy Structure in a Relational Database
CN101606174B (zh) 管理针对异构资源域的分类系统的技术
US8112448B2 (en) Table classification device, table classification method, and table classification program
US20040133581A1 (en) Database management system, data structure generating method for database management system, and storage medium therefor
US20080243778A1 (en) Cube faceted data analysis
US6697822B1 (en) Method of maintaining database records
US20070266023A1 (en) Reviewing user-created content before website presentation
CN101183379A (zh) 用于检索数据的方法和系统
US7313572B2 (en) Attribute partitioning for user extensibility
CN101192237A (zh) 查询多方面信息的方法和系统
US20060069672A1 (en) Query forced indexing
EP1116140A1 (en) Data retrieval method and apparatus with multiple source capability
CN102016849A (zh) 为移动计算设备提供搜索结果
JP2010520549A (ja) データの記憶および管理の方法
US20040002983A1 (en) Method and system for detecting tables to be modified
KR100538547B1 (ko) 복수의소스능력을가진데이터검색방법및장치
US11609897B2 (en) Methods and systems for improved search for data loss prevention
US20210216553A1 (en) Dashboard loading using a filtering query from a cloud-based data warehouse cache
CN108304291B (zh) 测试输入信息检索装置和方法
CN115080684B (zh) 网盘文档索引方法、装置、网盘及存储介质
US6535885B1 (en) Multikeyed table implementable on a personal digital assistant
US7996366B1 (en) Method and system for identifying stale directories
JP4152107B2 (ja) データベース更新情報の反映システムおよびそのためのプログラム

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant