MXPA01000123A - Base de datos implementada por computadora con conectividad valor caso. - Google Patents

Base de datos implementada por computadora con conectividad valor caso.

Info

Publication number
MXPA01000123A
MXPA01000123A MXPA01000123A MXPA01000123A MXPA01000123A MX PA01000123 A MXPA01000123 A MX PA01000123A MX PA01000123 A MXPA01000123 A MX PA01000123A MX PA01000123 A MXPA01000123 A MX PA01000123A MX PA01000123 A MXPA01000123 A MX PA01000123A
Authority
MX
Mexico
Prior art keywords
case
value
column
elements
values
Prior art date
Application number
MXPA01000123A
Other languages
English (en)
Inventor
Stephen A Tarin
Original Assignee
Required Technologies Inc
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 Required Technologies Inc filed Critical Required Technologies Inc
Publication of MXPA01000123A publication Critical patent/MXPA01000123A/es

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/40Data acquisition and logging
    • 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/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/283Multi-dimensional databases or data warehouses, e.g. MOLAP or ROLAP
    • 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/22Indexing; Data structures therefor; Storage structures
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99932Access augmentation or optimizing
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99933Query processing, i.e. searching
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99933Query processing, i.e. searching
    • Y10S707/99934Query formulation, input preparation, or translation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99943Generating database or data structure, e.g. via user interface
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99941Database schema or data structure
    • Y10S707/99944Object-oriented database structure

Landscapes

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

Abstract

Un invernadero que cosiste de un fondo (23), paredes verticales opacas y aisladas (24) y un techo translucido, caracterizado porque el techo del invernadero (3) consiste de tiras longitudinales (2), casi planas, que son opacas y que pueden girar alrededor de un eje de rotacion dirigido en su direccion longitudinal, mediante lo cual se forma el lado superior del invernadero (3) practicamente hermetico a la luz, cuando los espejos son girados en su posicion horizontal o acostada, y porque se proporcionan medios (27-30) para hacer girar estas tiras (2).

Description

BASE DE DATOS IMPLEMENTADA POR COMPUTADORA CON CONECTIVIDAD VALOR-CASO CAMPO DE LA INVENCIÓN La presente invención se refiere generalmente a bases de datos implementadas en computadora y particularmente, la presente invención se refiere a una representación eficiente, ordenada, con espacio reducido de datos ultidimensionales . ANTECEDENTES DE LA INVENCIÓN Los sistemas de administración de bases de datos (DBMS s) de la técnica anterior, como los archivos de datos subyacentes a partir de los cuales y sobre los cuales crecieron históricamente, siguen almacenando y manipulando datos de una manera que refleja estrechamente la concepción que los usuarios tienen de los datos. Los usuarios consideran típicamente los datos como una secuencia de registros (o bien "tupias"), cada uno compuesto lógicamente de un número fijo de "campos" (o bien "atributos") que contienen un contenido específico sobre la entidad descrita por este registro. Esta perspectiva es naturalmente representada por una estructura de tabla lógica (o bien "relación") (se conoce a continuación como "tabla basada en registro", como por ejemplo un cuadriculado rectilineal en donde las filas representan dos registros y las columnas representan los campos. La existencia durante largo tiempo de tablas basadas en registro y su correspondencia con una opinión convencional de los usuarios, en ausencia de inconvenientes generalmente reconocidos, ha provocado su aceptación casi universal como la mejor representación interna subyacente de base de datos.
Sin embargo, las tablas basadas - en registros contienen debilidades estructurales importantes que incluyen altos niveles de desorden y redundancia que han sido tradicionalmente considerados como inevitables. Por ejemplo, tales tablas pueden ser clasificadas o agrupadas (es decir, el posicionamiento contiguo de valores idénticos) con base en por lo menos un criterio (con base en valores de columna o alguna función de valores de . columna o valores de columnas múltiples) . Esta limitación vuelve complicado y con alto v requerimiento de recursos funciones esenciales de bases de datos, por ejemplo petición y actualización, en todos los criterios otros que el privilegiado. Las deficiencias arriba mencionadas inherentes en las propiedades fundamentales de la estructura de tabla con base en registro, en particular, el requerimiento de que la colocación de cada campo sea hecha co-lineal con todos los otros campos en el mismo registro. Ésta colocación arbitraria de los campos en estructuras de tabla con base en registro excluye todos los otros arreglos. Por ello obscurece las relaciones de datos latentes naturales y explotables que son revelados por arreglos de datos más ordenados, condensados y eficientes. Adicionalmente, la inhabilidad de tablas con base en registro para agrupar efectivamente y ordenar datos conduce a características negativas de estado del arte DBMS tal como desorden, redundancia, torpeza, ineficiencias algorítmicas e inestabilidades de funcionamiento. La investigación de bases de datos proporciona paliativos para estos problemas, pero no descubre o enfrenta la causa subyacente (siendo esto, la dependencia en estructuras de tabla con base en registros) . Por ejemplo, la inhabilidad de representar un agrupamiento natural, multi-dimensional dentro de una estructura de tabla con base en registros ha llevado a la creación de estructuras de datos con base en índice. Estas estructuras suplementarias son inherentemente y con frecuencia masivamente redundantes, pero establecen agrupamientos y órdenes que no pueden ser representados directamente usando una tabla convencional. Las estructuras con base en índice crecen típicamente hasta un gran tamaño, complicados y difíciles de mantener, optimizar y especialmente actualizar. Ejemplos de índices comunes son árboles-b, árboles-t, índices-estrella y varios mapas de bits . Otras estructuras suplementarias desarrolladas en el arte anterior tienen diferentes desventajas. Por ejemplo, tablas mezcladas pueden proporcionar búsqueda rápida de elementos de datos individuales, pero su falta de ordenamiento las hacen inadecuadas para búsquedas de rango o para cualquier otra operación que requiere del retorno de datos en un orden específico. La habilidad para mantener un conjunto de datos ordenado, no redundante, multi-dimensional, usando clasificación flexible y/o criterios de agrupamiento, es extremadamente útil para el manejo de bases de datos. Datos clasificados hace la búsqueda rápida y la actualización posible por medio de, por ejemplo, algoritmos de búsqueda binarios y búsquedas de inserción. Los datos agrupados permite condensación que reduce los requerimientos de espacio e incrementa adicionalmente la velocidad de, por ejemplo, la búsqueda y la actualización. Un sistema de almacenamiento de datos en donde la mayoría o la totalidad de una tabla de datos puede ser almacenada en orden agrupado y/o clasificada es por consiguiente extremadamente deseable. Estudios previos han investigado "bases de datos totalmente invertidas", que indexan cada columna a través de métodos convencionales, conservando la totalidad de los inconvenientes de registros e índices. Además, los requerimientos de almacenamiento inflados necesarios para dar cabida a una indexación completa tienden a hacer que las bases de datos totalmente invertidas no sean prácticas, especialmente, en bases de datos de memoria principal, pero no solamente en ellas.
COMPENDIO DE LA INVENCIÓN Es por lo tanto un objeto de la presente invención proporcionar una base de datos totalmente o parcialmente ordenada (ejemplo, agrupada y/o clasificada) sin las deficiencias características del arte anterior, como se menciona arriba. Brevemente, en lugar de estructurar una base de datos como tabla en la cual cada fila es un registro y cada columna contiene campos en el registro, como en las bases de datos anteriores, la presente invención permuta o modifica las columnas para proporcionar una ventaja en, por ejemplo, uso de espacio y/o velocidad de acceso, de modo que las filas no necesariamente corresponden a registros individuales. Por ejemplo, una de dichas modificaciones es la de condensar la columna eliminando valores redundantes (los cuales reducen la utilización de memoria) ; otra es la de ordenar la columna por clasificación, asegurando que los grupos de valores aparecerán siempre en un orden particular (el cual reduce grandemente el tiempo requerido para buscar en una columna un valor particular) ; aún otra es condensar y clasificar una columna. Otras permutaciones y modificaciones con otras ventajas también son posibles. La tabla de valores permutados/modificados es referida en la presente invención como la "tabla de valores". Lógicamente, aunque no necesariamente estructuras de datos separadas físicamente proporcionan la información necesaria para reconstruir los "registros" en la base de datos. En particular, proporcionan información de "casos" y "conectividad", en donde la información de casos identifica los casos de cada valor en el campo que está en un registro y la información de conectividad asocia cada caso con un caso específico de un valor en otro campo cuando menos. En una modalidad de la presente invención, tanto el caso y la información de conectividad son proporcionadas en una tabla, referida como "tabla de casos". Cada columna en la tabla de casos corresponde a un atributo de los registros en la base de datos y está asociada con una columna en la tabla de valores que contiene los valores de ese atributo (y posiblemente otros atributos) . Cada celda (locación de fila/columna) en la tabla de casos tiene una posición (en una incorporación de la presente invención, su número de fila) y un valor de caso (el contenido de la celda) . Una celda asociada en la columna asociada de la tabla de valores es derivada de cada posición de celda del caso. También, una celda de caso asociada en otra columna de la tabla de casos que pertenece al mismo registro es derivada de cada valor de caso del caso de celda. Por ello, en ésta incorporación, la posición de una celda de caso identifica el valor el cual es un caso de celda y el contenido de una celda de caso proporciona la información de conectividad que asocia el caso con otra celda de caso en otro campo. Entonces se puede reconstruir un registro iniciando en una celda en la tabla de casos derivando, a partir de la posición de la celda, la celda de valor asociado en la tabla de valor y, del valor de caso de la celda, la posición de la celda de caso asociada, repitiendo éste proceso en la celda de caso asociada y así sucesivamente, con una última celda en la cadena proporcionando, en una incorporación, la posición correspondiente de la celda inicial. Si una columna de la tabla de valores es ordenada pero no condensada, la columna de la tabla de valor y la columna asociada en la tabla de casos tiene, en una incorporación de la presente invención, el mismo número de filas. Una celda de valor asociada con el caso de celda es, en ésta incorporación, la celda de valor en la columna de tabla de valor asociado que tiene el mismo número de fila en la celda de caso. Una celda de caso asociada con el caso de celda (siendo esto, una celda en otra columna de la tabla de casos perteneciendo al mismo registro) es la celda en una columna especificada que tiene un número de fila dado en el valor de caso de la columna de casos. En una incorporación, la columna especificada es la siguiente columna en la tabla de casos con la última columna refiriéndose a la primera columna. Por ejemplo, si la columna 1 de la tabla de valores no está condensada y, después de la permutación, la columna 1, fila 2 y columna 2 fila 5 de la tabla de valores pertenecen al mismo registro y un caso de la columna 2, fila 5 es a la columna 1, fila 2 contendrá el número 5 (indicando que la fila 5 de la siguiente columna pertenece al mismo registro) . Si la columna de la tabla de valor está condensada, ya no existe una correspondencia de uno a uno entre esa columna y una columna de tabla de casos que está asociada con ella. En éste caso, una tabla, referida en la presente como "tabla de desplazamiento", es proporcionada, en una incorporación de la presente invención, tiene una columna para cada tabla de casos asociada con una columna de tabla de valor condensado y especifica el rango de números de fila de tabla de casos asociados con cada fila de la columna de tabla de valor. La celda de valor asociada con una celda de caso es determinada por medio de la columna de tabla de desplazamiento correspondiente basada en la posición de la celda de caso (número de fila) . En una incorporación, una columna de tabla de desplazamiento tiene el mismo número de filas que una columna de tabla de valor ccr. cada celda en la tabla de desplazamiento proporcionando el primer número de fila en el rango de números de fila de tabla de casos asociada con la celda de valor correspondiente. Alternativamente, en cada celda en la tabla de desplazamiento podría, por ejemplo, proporcionar el último número de fila en el rango de números de fila de la tabla de casos, el número total de filas en el rango, o algún otro valor del cual es posible derivar el rango de números de fila de casos asociados con cada celda de valor (siendo esto, el caso de cada valor) . Una desventaja de la tabla de desplazamiento, con se describió, es que buscar la tabla de desplazamiento para la celda de valor correspondiente a una celda de caso fomenta la reconstrucción del registro. Ésta desventaja es atacada en otra incorporación de la presente invención en la cual el valor de caso de una celda de caso cuya celda de caso asociada está en una columna que tiene una columna de v desplazamiento fijada a la posición de la celda de valor asociada con la celda de caso asociada (en oposición a la posición de la celda de caso asociada misma, como en la incorporación descrita arriba) . El valor de la celda de caso asociada es directamente obtenible sin una búsqueda de la tabla de desplazamiento. En ésta incorporación, una tabla, referida en la presente invención como "tabla de ocurrencia", proporciona información para determinar la celda de caso asociada. En una incorporación de la tabla de ocurrencia, cada columna en la tabla de caso que tiene celdas con valores de caso como se describió tiene una columna asociada en la tabla de ocurrencia que tiene el mismo número de filas. Una celda en la tabla de ocurrencia está asociada con una celda en la tabla de caso con base, en ésta incorporación, en su posición y especifica una desviación. La desviación es agregada al primer número de fila en el rango de números de la tabla de caso asociados con la celda de valor que llegan a la celda de caso asociada. El primer número de fila es derivado de la tabla de desplazamiento con base en el valor de caso de la celda de caso. La información de conectividad para una celda de caso es por ello proporcionada en ésta incorporación por el contenido de la celda de caso, la tabla de ocurrencia y la tabla de desplazamiento. Las estructuras de datos descritas en la presente invención pueden ser, pero no necesariamente, totalmente RAM o distribuidos a través de una red comprendida de una pluralidad de procesadores de datos. También pueden estar implementados en una variedad de formas y la presente invención de ninguna manera está limitada a los ejemplos dados de la implementaciones particulares. Por ejemplo una incorporación puede involucrar almacenar parcialmente el conjunto de datos usando la base de dazos implementada por la computadora y los métodos descritos en la presente invención, con el restante almacenado usando los métodos con base en tabla tradicionales. La información puede ser almacenada en varios formatos y la presente invención no está limitada a ningún formato en particular. El contenido de columnas particulares puede estar representado por funciones o por funciones en combinación con otra información almacenada o por información almacenada en cualquier forma, incluyendo mapas de bits. Más generalmente, mientras que el • valor, caso, desplazamiento y tablas de ocurrencia han sido descritas como "tablas" que tienen filas, columnas y celdas, la presente invención no está limitada a dichas estructuras. Cualquier estructura de datos computarizada para almacenar información en éstas tablas puede ser usado. Por ejemplo, la tabla de valor arriba descrita es un ejemplo específico de ün "almacenaje de valor" (siendo esto, que almacena valores de datos que representan los valores de caso de usuario de información en la base de datos) ; la tabla de caso es un ejemplo específico de un "almacenaje de caso" y un "almacenaje de conectividad" (siendo esto, identifica casos de elementos de datos en el almacenaje de valor y representa relaciones entre casos de elementos de datos en el almacenaje de valor) ; y la tabla de desplazamiento es un ejemplo específico de un "almacenaje de cardinalidad" (siendo esto, que representa la frecuencia de ocurrencia de casos iguales de valores de datos) . Las columnas de una tabla son ejemplos específicos de una "lista" o, más generalmente, un "conjunto", para propósitos de la presente invención, comprende uno o más "elementos", cada uno teniendo un valor o valores y una "posición", en donde la posición especifica la locación del elemento dentro del conjunto. En la discusión de arriba, una "celda" en una columna de una tabla es un ejemplo de un "elemento" y su posición en el conjunto es su número de fila. Adicionalmente, aunque las incorporaciones descritas en la presente invención se refieren a y manipulan "registros" tradicionales, la presente invención no está limitada a registros y es aplicable generalmente para representar relaciones entre valores de datos. Todas dichas variaciones son incorporación alternas de la presente invención. Típicas operaciones de base de datos soportadas por el sistema de base de datos de la presente invención incluyen, pero no están limitados a: 1) reconstruir registros físicos, 2) encontrar registros que se ajustan a criterios de búsqueda, 3) unir tablas de formas estándar, 4) eliminara y/o agregar registros, 5) modificar registros existentes, y 6) combinaciones de estos y otras operaciones de bases de datos estándar para llevar a cabo funciones útiles. La presente invención proporciona una forma nueva y eficiente de estructurar bases de datos permitiendo una búsqueda eficiente y procesamiento de actualización, requerimientos de almacenaje de base de datos reducidos, y organización y mantenimiento de bases de datos simplificadas. En lugar de obtener ordenamiento a través del incremento de redundancia (siendo esto, sobreponer una representación de datos ordenados sobre la representación desordenada original de los mismos datos) , la presente invención elimina la redundancia en un nivel fundamental. Esto reduce los requerimientos de almacenaje, permitiendo a su vez que más datos sean almacenados concurrentemente en RAM (mejorando la operación de la aplicación y reduciendo los costos de hardware) y acelera la transmisión de bases de datos a través de redes de comunicación, haciendo que las bases de datos de memoria principal más prácticas para un amplio espectro de aplicaciones de negocios y científicas. El procesamiento de búsqueda rápida es posible sin el sobregiro encontrado en una base de datos totalmente invertida (tal como un uso excesivo de memoria) . Adicionalmente, con estructuras de datos de la presente invención, los datos son más fácilmente manipulados que en las bases de datos tradicionales, requiriendo con frecuencia que solo ciertas entradas en la tabla de caso sean cambiadas, sin copiado de datos. Las operaciones de bases de datos en general son por ello más eficientes usando la presente invención. Además, ciertas operaciones tales como análisis histográficos, compresión de datos y ordenamientos múltiples, los cuales son computacionalmente intensivos en estructuras orientadas a registros, son obtenibles inmediatamente de las estructuras descritas en la presente invención. La invención también proporciona procesamiento mejorado en ambientes de computación paralelos. El sistema de base de datos de la presente invención puede ser usado como extremo posterior para una base de datos eficiente compatible con cualquier base de datos de extremo anterior que emplea middleware estándar (ejemplo: Conectividad de Base de Datos Abierta de Microsoft (ODBC) o Objetos de Datos Activos X de Microsoft (ADO) ) y proporcionará compatibilidad casi de depósito con el cuerpo grande de software para base de datos existente. Alternativamente, una máquina independiente nativa puede ser implementada directamente, por medio de, por ejemplo, funciones++, plantillas y/o bibliotecas clase. Implementadas ya sea como extremo posterior para middleware o como máquina independiente, ésta invención proporciona una base de datos que parece familiar al usuario, pero la cual es manejada internamente de una forma novedosa y eficiente. BREVE DESCRIPCIÓN DE LOS DIBUJOS La FIGURA 1 es un diagrama de bloque de una incorporación de la presente invención. La FIGURA 2 ilustra una topología de anillo simple.
La FIGURA 3 ilustra una topología que tiene subanillos con un campo puente. La FIGURA 4 ilustra una topología "estrella". La FIGURA 5 es un diagrama de flujo que ilustra una rutina que encuentra la celda de tabla de valor asociada con una celda de tabla de caso. La FIGURA 6 ilustra una rutina que determina la fila de la siguiente columna en donde la columna actual es fraccionada V/O. La FIGURA 7 es un diagrama de flujo que ilustra el diagramado de la topología de un registro de datos en un arreglo lineal. La FIGURA 8 es un diagrama de flujo que ilustra el proceso de escribir una topología de registro linearizado en una tabla de caso. La FIGURA 9 es un diagrama de flujo que ilustra el intercambio de celdas de dos registros en la tabla de caso.
La FIGURA 10 es un diagrama de flujo que ilustra el intercambio de una celda viva y una celda eliminada. La FIGURA 11 es un diagrama de flujo que ilustra encontrar la celda no eliminada (si la hay) inmediatamente junto a celdas eliminadas (si las hay) para celdas de caso de valor dadas en la tabla de caso. La FIGURA 12 es un diagrama de flujo que ilustra mover una celda libre (caso eliminad) en la tabla de caso de su valor original asociado al valor inmediatamente precedente. La FIGURA 13 es un diagrama de flujo que ilustra mover una celda libre (caso eliminado) en la tabla de caso de su valor asociado original al valor siguiente inmediato. La FIGURA 14 es un diagrama de flujo que ilustra determinar el número total de casos (incluyendo casos eliminados) para un valor dado. La FIGURA 15 es un diagrama de flujo que ilustra la eliminación de una celda de caso previamente vivo en la tabla de caso. La FIGURA 16 es un diagrama de flujo que ilustra la inserción de un valor nuevo en una columna de valor, cuando v los punteros en esa columna no están fraccionados V/O. La FIGURA 17 es un diagrama de flujo que ilustra la inserción de un valor nuevo en una columna de valor, cuando los punteros en esa columna están fraccionados V/O. La FIGURA 18 es un diagrama de flujo que ilustra la asignación de una celda de caso libre (eliminada) a un valor dado en la tabla de valor. La FIGURA 19 es un diagrama de bloque que ilustra los pasos en una operación de eliminar un registro. La FIGURA 20 es un diagrama de bloque que ilustra los pasos en una operación de agregar registro. La FIGURA 21 es un diagrama de bloque que ilustra los pasos en una operación de modificar registro.
La FIGURA 22 es un diagrama de bloque que ilustra los pasos en una operación de búsqueda. La FIGURA 23 es un diagrama de bloque que ilustra los pasos en una operación de unión. DESCRIPCIÓN DETALLADA La FIGURA 1 ilustra el arreglo de hardware básico de una incorporación de la presente invención. El almacén de programa 4 es un dispositivo de almacén, tal como un disco duro, conteniendo el software que lleva a cabo las funciones del sistema de base de datos de la presente invención, éste software incluye, por ejemplo, las rutinas para generar las estructuras de datos de la base de datos subyacente y para v refor atear bases de datos legado, tal como aquellos archivos orientados a registro, en aquellas estructuras de datos. Además, el software incluye las rutinas para manipular el acceso de la base de datos, tal como rutinas de búsqueda, eliminar, agregar, modificar y unir. Archivos de datos son . almacenados en el dispositivo almacén 2 y contienen los datos asociados con una o más bases de datos. Los archivos de datos pueden ser formateados como imágenes binarias de las estructuras de datos en la presente o como archivos orientados a registro. El almacén de programa 4 y el dispositivo de almacén 2 pueden ser partes diferentes de un solo dispositivo almacén. El software en el almacén de programa 4 es ejecutado por el procesador 5, teniendo memoria de acceso aleatorio (RAM) 7. La selección de los trabajos a ser efectuados por el sistema de base de datos son determinados por un usuario en la estación de usuario 6. En la siguiente discusión, el término "puntero" es usado en sentido general para incluir el significado de lenguaje C/C++ (una variable conteniendo un domicilio de memoria) y, más generalmente, cualquier tipo de datos son usados para describir una locación en el almacén, ya sea que ese almacén sea RAM, disco, etc. Un puntero implementado como una desviación entera desde el inicio de una estructura de datos dada llevará a cabo la misma función que un puntero C/C++ requiriendo ventajosamente menos almacenaje. Los términos memoria y almacenaje, usados en la presente, significan cualquier medio electrónico, óptico u otro para almacenar datos. El término multi-dimensional es usado en la presente en sentido matemático o casi matemático para referirse a una vista de los datos en la cual una tabla con base en registro de n columnas es considerada que ocupa un espacio vectorial n-dimensional . No es usado en su sentido más estrecho, en ocasiones usado en almacenamiento de datos en un Procesamiento Analítico En Línea (OAP) , en donde multi-dimensional se refiere a múltiples capas de análisis de datos. Estructura de Base de Datos Básica Tablas basadas en registro, en las cuales cada fila represente u registro y cada columna es un campo en el registro, son usadas comúnmente en bases de datos de punta. Una base de datos de acuerdo con la presente invención difiere de ésta estructura conocida. En una incorporación, la base de datos está dividida en dos estructuras de datos básicas; una tabla de valor no condensados y una tabla de casos. La tabla de valor contiene los mismos casos de datos que las bases de datos del arte anterior, pero cada columna puede ser permutada o cambiada y por ello una fila no necesariamente corresponde a un registro en particular. De acuerdo con ésta incorporación, la tabla de caso proporciona los medios para reconstruir los registros de la tabla de valor. Específicamente, en una incorporación, la tabla de caso tiene el mismo número de filas y columnas como la tabla de valor no condensado y cada celda (siendo esto, locación de fila/columna) en la tabla de caso contiene el número de fila del siguiente campo en el mismo registro ("siguiente" se define abajo) . Por ello, el valor del siguiente campo del registro que contiene Tabla_valores (r, c) , en donde r y c son la fila y la columna de una locación particular en la tabla de valor, es Tabla_valores (Tabla_casos (r, c) , siguiente (c) ) , en donde Tabla_casos (r, c) es el número de fila del siguiente campo. La función siguiente (c) obtiene la siguiente columna de la actual. En una incorporación de la presente invención usando una topología de anillo, siguiente (c) = ((c+1) mod n) , en donde n es el número de columnas y las columnas están numeradas del 0 al n-l (Índice con base cero) . En una incorporación alternativa (columnas numeradas 1 a n) , siguiente (c) = c mod n+1. una amplia variedad de topologías son posibles, cada una teniendo una función siguiente (c) correspondiente. Por ejemplo, abajo está una base de datos en el formato estándar de un registro por fila, con numeración de fila con base 1: BASE DE DATOS DE LA TÉCNICA ANTERIOR: lia # INGLÉS ESPAÑOL ALEMN IPO PARIDAD (columna (columna (columna (columna (columna 0) 1) 3) 4) 5) 1 One uno Eins unidad impar 2 Two dos Zwei prima par 3 Three tres Drei prima impar 4 Four cuatro Vier potencia2 par 5 Five cinco Fuenf prima impar 6 Six seis Sechs compues par Las tablas de valor y caso arregladas de acuerdo con una incorporación específica de la presente invención son: TABLA DE VALORES Fila # INGLÉS ESPAÑOL ALEMÁN TIPO PARIDAD (columna (columna (columna (columna (columna 0) 1) 3) 4) 5) 1 Five" cinco5 Drei3 compues6 par2 2 Four" cuatro4 Eins1 potencia24 par 4 3 OneJ dos2 Fuenf5 prima2 par6 4 Sixe seis6 Sechs6 prima3 impar1 5 Three" tres3 Vier4 prima5 impar 6 Two¿ uno1 Zwei2 unidad1 impar: TABLA DE CASO ia # INGLÉS ESPAÑOL ALEMÁN TIPO PARIDAD (columna (columna (columna (columna (columna 0) 1) 2) 3) 4) 1 1 3 4 3 6 2 2 5 6 2 2 3 6 6 5 1 4 4 4 4 1 5 3 5 5 1 2 6 5 6 3 2 3 4 1 La tabla de valor mostrada arriba es creada clasificando cada columna, en éste caso, en orden alfabético. Con el propósito de explicar solamente, se ha colocado un superíndice junto a cada valor para indicar su número de registro en la base de datos original. Después de clasificar las columnas, una fila de la tabla de valor no corresponderá generalmente a un solo registro en la base de datos original. La tabla de caso proporciona sin embargo la información necesaria para reconstruir aquellos registros a la vista de registro externo tradicional. Específicamente, cada celda (siendo esto, locación de fila/columna) en la tabla de caso es asociada, en la incorporación de arriba, con un solo registro. La celda con la misma locación de fila/columna en la tabla de valor contiene el valor del registro para el campo asociado con la columna. La celda de tabla de caso misma contiene el número de fila del siguiente campo del registro. Por ejemplo, suponer que el registro que contiene la fila 1 de la columna "Inglés" (columna 0) de la tabla de caso debe ser reconstruido. La celda asociada en la tabla de valor (siendo esto, fila 1, columna 0) contiene el valor "Cinco".
Tomando los otros campos (o columnas) en orden, se determina la primera fila de la columna "Español" (columna 1) perteneciente al mismo registro que la fila 1 en la columna "Inglés" (columna 0) . La información es proporcionada por la tabla de caso en la fila 1/columna 0, la cual en éste caso contiene el número 1, significando fila "1" de la columna Español está en el mismo registro que la fila "1" de a columna Inglés. Después, para determinar la fila de la columna "Alemán" (columna 2) del mismo registro que la fila "1" déla columna Español (columna 1), la fila 1/columna 1 en la tabla de caso es leída, la cual contiene el número 3, significando fila "3" que la columna "Alemán" es del mismo registro. Rastreando éste registro, la fila 3 de la columna "Alemán" (columna 2) en la tabla de caso proporciona la fila de la columna "Tipo" (columna 3) en el mismo registro y contiene el número 5, significando fila "5" de la columna "Tipo" que es del mismo registro que la fila 3 de la columna "Alemán". La fila 5 de la columna "Tipo" (columna 3) indica que la fila correspondiente en la columna "Paridad" (columna 4) es la fila 6. Finalmente, la fila 6 de la columna "Paridad" (columna 4) en la tabla de caso, la cual es la última columna en la tabla, indica que la fila correspondiente déla columna "Inglés", la primera columna en la tabla (columna 0) , es fila 1, la cual es en donde el v proceso inició. Esto se debe a la tipología de anillo usada en éste ejemplo. Por ello, de acuerdo con la incorporación ilustrada arriba, cada locación de fila/columna en la tabla de caso contiene el número de fila en la siguiente columna la cual pertenece al mismo registro, con la última columna conteniendo el número de fila del mismo registro en la primera columna. Los enlaces entre las locaciones de fila/columna perteneciendo al mismo registro podrían, en ésta incorporación, formar un anillo a través de la tabla de caso, como se ilustra en la FIGURA 2. Al ser atravesado éste anillo, las locaciones directamente correspondientes de fila/columna en la tabla de valor permite recuperación de cada valor de campo.
Topologías diferentes a la de anillo pueden ser usadas en incorporaciones alternativas de la presente invención. Generación de Tablas de Caso y Valor de Datos Orientados a Registro Las tablas de valor e caso pueden ser generadas de acuerdo con la presente invención usando los datos en un formato de base de datos orientadas a registro del arte anterior. Primero, la tabla de valor es creada permutando o cambiando los datos en cada columna de la base de datos original. Ejemplos de cambios en la columna de la tabla de valor es ordenar los datos y agrupar valores similares juntos.
Diferentes columnas pueden ser permutadas o cambiadas v diferentemente. Un orden de clasificación debe ser seleccionado con base en su utilidad para propósitos de despliegue o recuperación en aplicaciones reales. Los requerimientos para un urden de clasificación potencial es que tengan un predicado conmutable el cual ordena los valores. Algunas columnas pueden permanecer sin clasificación. En el ejemplo de arriba, todas las columnas fueron clasificadas en orden alfabético. En una incorporación, durante el primer paso, se verá una tabla intermedia temporal que facilita la generación de la tabla de caso en el segundo paso abajo. La tabla intermedia, en ésta incorporación, tiene filas que corresponden a registros, como en la base de datos del arte anterior original, y columnas que indican la posición permutada del campo correspondiente en la tabla de valor. La tabla intermedia del ejemplo de arriba (en la cual las permutaciones son ordenamientos por clasificación) es como sigue: TABLA i: NTERMEDIA Fila # INGLÉS ESPAÑOL ALEM N IPO PARIDAD (columna (columna (columna (columna (columna 0) 1) 2) 3) 4) 1 3 6 2 6 4 2 6 3 6 3 1 3 5 5 1 4 5 V 4 2 2 5 2 2 5 1 1 3 5 6 6 4 4 4 1 3 Por ello, por ejemplo, la tabla intermedia indica que el campo "Inglés" del registro original 5 está en la fila 1 de la tabla de valor, el campo "Español" para el registro 5 está en la fila 1 de la tabla de valor, el campo "Alemán" para el registro 5 está en la fila 3 de la tabla de valor, el campo "Tipo" para el registro 5 está en la fila 5 déla tabla de valor y el campo "Paridad" para el registro 5 está en la fila 6 del la tabla de valor. De acuerdo con ésta incorporación, la tabla de caso se determina como sigue: Tabla_casos (Tabla_Intermedia (r, c) , c) = Tabla_Intermedia (r, siguiente (c) ) , Para cada fila r y columna c en la tabla intermedia y en donde siguiente (c) está definida arriba. En otras palabras, cada celda en la tabla intermedia especifica una fila de la columna correspondiente en la tabla de caso; esa fila en la tabla de caso recibe el valor en la siguiente columna de la tabla intermedia. Por ejemplo, con referencia al registro número 5 en el ejemplo de arriba, el campo "Inglés" (columna 0) en la tabla intermedia contiene el número 1 y el siguiente campo, "Español" (columna 1) también contiene el número 1. Con base en ésta información, el valor 1 (siendo esto, el número de fila del campo "Español" del registro 5 en la tabla de valor clasificada) es colocado en la fila 1 de la tabla de caso (siendo esto, la locación del campo "Inglés" del registro 5 en la tabla de valor clasificada) . La fila 1 del campo "Español" en la tabla de caso está fijada al valor en el campo "Alemán" (columna 2) del registro número 5 en la tabla intermedia (siendo esto, el valor 3) , el cual corresponde al número de fila del campo "Alemán" en la tabla de valor clasificada. Éste proceso se repite para cada campo, nuevamente con el último campo envolviéndose en torno al primer campo . Una persona con habilidad en el arte reconocerá que hay algoritmos equivalentes, algunos posiblemente evitan el uso de una tabla intermedia, para generar la tabla de caso, y la presente invención no está limitada al algoritmo mostrado aquí, Tabla de Valor Condensada En ciertas situaciones, los datos en la tabla de valor pueden ser presentados más eficientemente en términos de espacio (ejemplo, uso de memoria o disco) si ciertas columnas son condensadas eliminando valores redundantes. Por ejemplo, en la tabla de valor de arriba, el campo "Paridad" solo tiene dos diferentes valores ("Par" o "Non") y el campo "Tipo" solo tiene cuatro valores diferentes ("Compos", Power2", "Primo" y "Unidad") . (El número de valores únicos para un campo dado es llamado "cardinalidad") . De conformidad, en una incorporación preferente de la presente invención, se puede eliminar la redundancia construyendo una tabla de valor condensada, la cual para el ejemplo de arriba es como sigue: TABLA DE VALOR CONDENSADA: Fila # INGLÉS ESPAÑOL ALEMÁN TIPO PARIDAD (columna (columna ((ccoolluummnna (columna (columna 0) 1) 2) 3) 4) 1 Five cinco Drei compues par 2 Four cuatro Eins potencia2 impar 3 One dos Fuenf prima 4 Six seis Sechs unidad 5 Three tres Vier 6 Two uno Zwei Para llevar a cabo éste ahorro de espacio, el almacenaje para la tabla de valor debe ser asignado de manera apropiada; por ejemplo, asignando cada columna como un vector separado o lista al contrario de asignar la tabla como un arreglo bidimensional. Además, los cambios aplicados a las columnas deben agrupar valores iguales juntos. A fin de conservar la información original de la tabla -de valor condensada, una estructura adicional, referida en la presente como una tabla de "desplazamiento", es proporcionada en una incorporación preferente. En una incorporación de la presente invención, la tabla de desplazamiento proporciona ya sea el primer o el último número de fila en el cual cada valor único en una columna ocurre en la tabla de valor no condensada original (referida en la presente como formato de "primer número de fila" y "ultimo número de fila", respectivamente) . Por ejemplo, la tabla de desplazamiento para la tabla de valor condensada arriba es como sigue (en formato de "primer número de fila") : TABLA DE DESPLAZAMIENTO: Fila # INGLÉS ESPAÑOL ALEMN TIPO PARIDAD 1 (ausencia de condensación, por 1 1 2 consiguiente ausencia de columnas 2 3 de tabla de desplazamientos para 3 4 INGLÉS, ESPAÑOL, o ALEM N) 6 5 6 La columna "Paridad" de la tabla de desplazamiento indica que el valor en la primera fila de la tabla de valor condensada (siendo esto, "Par") estaba en la fila 1 de la tabla de valor no condensada (esto es, el valor "Par" apareció primero en la fila 1) y el valor en la segunda fila de la tabla de valor condensada (siendo esto, "Non") apareció primero en la fila 4 de la tabla de valor no condensada. Alternativamente, los conteos de registro para cada valor pueden ser almacenados en la tabla de desplazamiento con la primera fila para cada valor siendo derivada aritméticamente, o se puede usar alguna combinación aritmética del conteo y desplazamiento. Una columna que tenga un ancho de campo de bytes y una cardinalidad C (siendo esto, valores C únicos) está representada por una columna de valores únicos "condensados", junto con una tabla de desplazamiento de valores enteros (número de filas) de tamaños de P bytes en W*C + P*C bytes de RAM, en donde el almacenaje de la columna no condensada requiere de W*N bytes (en donde N es el número de registros) . Por ello, en donde W*C + P*C < *N. o C < N/(l + P/W) , este tipo de compresión es benéfica. Las columnas condensadas en ésta incorporación generalmente destruyen la correspondencia uno a uno entre celdas (siendo esto, locaciones de fila/columna) de la tabla de casos y las celdas de la tabla . de valor. Por ello, durante la reconstrucción de registros, el valor para una celda no puede ser recuperado cuando se atraviesa la tabla de casos simplemente viendo al valor en la tabla de valor en la misma locación de fila/columna. Por ejemplo, ya no hay una celda en la tabla de valor en la misma locación de fila/columna como columna 3 ("Tipo") , fila 5 de la tabla de casos en el ejemplo de arriba. En su lugar, de acuerdo con la incorporación preferente, el valor del campo asociado con la Tabla_Casos (r, c) , en donde c es la columna condensada, está dado por Tabla_Valor (disp_fila_num, c) , en donde disp_fila_num es el número de fila de la celda en la tabla de desplazamiento para la columna c~r' para la cual Tabla_Desplazamiento (disp_fila_num, c) <= r < Tabla_Desplazamiento (disp_fila_num+l, c) , En donde la prueba de límite superior no es llevada a cabo si disp_fila_num+l no existe (siendo esto, si disp_fila_num es la última fila Tabla Desplazamiento para columna c) (para formato de Tabla_Desplazamiento de "primer número de fila") , o Tabla_Desplazamiento (disp_fila_mum-l) < r <= Tabla_Desplazamiento (disp_fila_num, c) En donde la prueba de límite inferior no es llevada a cabo si disp_fila_num-l no existe. (para formato de Tabla_Desplazamiento de "último número de fila") . Nuevamente con referencia al ejemplo de arriba, para encontrar el valor en la tabla de valor asociada con la fila de la columna 3, se localiza la fila en la columna 3 de la tabla de desplazamiento que tiene el valor más grande no mayor que 5. Esto es fila 3 en la tabla de desplazamiento de arriba (fila 4 que tiene el valor de 6, la cual es mayor que 6) . Por ello, la fila 3 de la columna 3 tiene el valor en la tabla de valor asociada con la fila 5 de la columna 3 en la tabla de casos. Técnicas Ahorradoras de Espacio Aplicables a Ciertos Tipos de Datos De acuerdo con una incorporación específica, los campos con datos que tiene ciertas propiedades pueden ser incorporados en el sistema de base de datos de la presente invención sin usar algunas de las estructuras descritas arriba (siendo esto, tablas de desplazamiento y/o de casos) . Éste es el caso en donde la información que estaría contenida en éstas estructuras ya está presente en el sistema de manera implícita; siendo esto, la información es deducible de características de los datos u otra información que esté presente. Por ejemplo, si una columna de la tabla de valores no condensada contiene los números desde 1 a N, no hay necesidad de almacenar ésta información en la tabla de valor, debido a que la información está implícitamente en la tabla de casos (fila 1 de la tabla de casos corresponde a el valor 1, y así sucesivamente) . Cada descriptor de columna (campo) establece información cuyas estructuras están implícitas para ese campo y en donde y como obtener los datos implícitos. En el ejemplo presentado, el descriptor de columna para la tabla de casos indicará que el valor correspondiente a cada fila es el número de fila. Estos datos pueden ser usados entonces en los algoritmos descritos en la presente, o en otras implementaciones de los algoritmos. Cuando existen circunstancias especiales en donde estructuras "implícitas" pueden ser' usadas, se puede obtener ahorro de espacio. Ejemplos de dichas circunstancias incluyen, pero no están limitadas a, las siguientes: 1) un campo que tiene valores únicos no requiere lista de desplazamiento ya que cada valor en la lista de valores de campo aparece solo una vez en la lista de casos. 2) Un campo que tiene valores contiguos, únicos, enteros que tienen el mismo rango que las filas de la tabla de valor no requiere de lista de valor y no requiere de lista de desplazamiento. Estos valores se clasificarán de modo que su valor sería igual a su posición en la lista de valor, la cual sería también su posición en la lista de casos. Por ello, su valor es igual a su posición (fila) en la lista de casos, por lo que no se requiere de una lista de valor separada. Ya que estos valores son únicos, tampoco se requiere de una lista de desplazamiento. 3) Un campo que tiene valores que son los valores de salida de una función de los valores de entrada enteros contiguos no requiere de lista de valor si la función produce salidas ordenadas dadas entradas ordenadas (como sería el caso, por ejemplo, para una función monotónica) . Los valores son computados aplicando la función a la posición (fila) de una celda en la lista de casos. Ya que las posiciones son enteros contiguos ordenados, la salida de la función también estará ordenada. Por ello, no se requiere de lista de valor ya que los valores pueden ser computados de la lista de casos. Ya que los- valores de salida de las funciones siempre son únicos para entradas únicas, tampoco es necesaria un alista de desplazamiento. 4) Un campo que tiene valores que -son aproximados por los valores de salida de una función de valores de entrada enteros contiguos se puede implementar con una lista de valor de espacio reducido si la función produce salidas ordenadas dadas entradas ordenadas (como sería el caso, por ejemplo, para una función monotónica) . La lista de valor en éste caso solo requiere contener la desviación de la salida de la función, en lugar del valor completo, y está arreglada de modo que la desviación más las salidas de la función produce valores ordenados . 5) Una secuencia de elementos de lista de casos contiguos todos asociados con el mismo valor de dato y todos teniendo elementos de lista de casos asociados (ejemplo, next) asociados con el mismo valor de dato pueden ser representados por una sola entrada que identifica, por ejemplo, el valor de dato asociado, la posición del elemento de caso asociado con el valor de dato y el número de elementos de caso en la secuencia, con la lista de desplazamiento ajustada apropiadamente. Además, técnicas conocidas de compresión y reducción de espacio pueden ser aplicadas al valor y tablas de casos (y otras estructuras) . Por ejemplo, los valores pueden ser representados empleando métodos de tipo diccionario, incluyendo métodos que hacen corresponder patrones de bitios que son inferiores a la longitud total de un valor. Un efecto de esta compresión y de las técnicas de compresión anteriores es la producción de más patrones de bitios aleatorios, lo que a su vez mejora el desempeño de claves.
Además, la tabla de valores, tabla de casos y otras estructuras pueden ser comprimidas, por ejemplo, empleando métodos que se aprovechan de patrones de bitios repetidos, como por ejemplo codificación de longitud completa, y compactación de palabras (es decir, valores de paquetes en unidades de almacenamiento de datos físicos cuando existe una falta de correspondencia entre el tamaño del valor y la unidad de almacenamiento física) . La tabla de casos puede ser comprimida adicionalmente por ejemplo, mediante el reordenamiento de las posiciones relativas de las columnas y de los casos dentro de las columnas, en caso permisible, para optimizar el desempeño de las técnicas de compresión antes mencionadas. Tabla de casos alternativa con tabla de valores condensada La tabla de desplazamientos comentada arriba disminuye la reconstrucción de registro puesto que los valores provenientes de columnas condensadas pueden ser obtenidos solamente después de la búsqueda de la tabla de desplazamientos. Una configuración alternativa empleada • en otra modalidad de la presente invención es la modificación de la tabla de casos, de tal manera que las entradas en una columna que apunta a una columna condensada apunte al contrario directamente hacia la tabla de valores. Una tabla adicional es después proporcionada, que se conoce aquí como la tabla de "ocurrencias", la cual contiene información a través de la cual el número de filas de la siguiente columna en la tabla de casos puede calcularse. La tabla de "ocurrencia" contiene el número de ocurrencias del valor particular indicado por la celda correspondiente en la tabla de casos. Específicamente, en una modalidad en la cual la tabla de desplazamiento se encuentra en el formato de "primer número de fila", los números de fila en la tabla de casos se basan en 1, y la tabla de ocurrencias se basa también en 1, el número de fila de tabla de casos del siguiente campo es igual a Tabla_ocurrencia (r, c) + tabla_desplazamiento (tabla_casos (r, c) , lado (c) ) - 1 Variantes de esta modalidad incluyen, sin limitarse a esto, numeración de fila basada en cero en las varias estructuras, y/o numeración de ocurrencias basada en cero en la tabla de ocurrencias, y/o formato de "último número de fila" para las entradas en la tabla de desplazamientos. Tales variantes afectan la fórmula arriba para determinar el número de fila de tabla de casos del siguiente campo. Por ejemplo, en el caso de la numeración de fila basada en cero en las tatlas de ocurrencias y de casos, la numeración de ocurrencias basadas en cero y el formato de "último número de filas" en la tabla de desplazamientos, el número de fila de tabla de casos del siguiente campo es: Para tabla casos (r, c) = 0, Tabla_ocurrencias (r, c) y para tabla_casos (r, c) > 0 : tabla__ocurrencias (r, c) + tabla_desplazamientos ( tabla_casos ( r, c ) -l , siguiente (c) ) +l (puesto que tabla_desplazamiento (tabla_casos (r, c)-l, siguiente (c) ) es el último número de fila para el valor previo) . En todas estas modalidades, las tablas de casos y ocurrencias deben combinarse en una tabla que tiene elementos de dos partes . En el ejemplo anterior, la columna TIPO apunta hacia la columna PARIDAD de la tabla de casos y la columna de PARIDAD en la tabla de valores es condensada. De conformidad con esta modalidad alternativa, las tablas de casos y ocurrencias son de conformidad con lo siguiente: Tabla de casos alternativa: Fila # INGLÉS ESPAÑOL ALEMÁN TIPO PARIDAD 1 1 3 4 1 6 2 2 5 6 1 2 3 6 6 5 1 4 4 4 4 1 2 3 5 5 1 2 2 5 6 3 2 3 2 1 Tabla de ocurrencia: Fila # INGLÉS ESPAÑOL ALEMÁN TIPO PARIDAD 1 3 J* 2 2 3 1 4 2 5 3 6 1 Así, la columna TIPO de la tabla de casos apunta ahora directamente a la fila asociada en la tabla de valores de la columna PARIDAD. Por ejemplo, la columna TIPO en la fila 5 de la tabla de casos arriba contiene 2, lo que significa que la fila 2 de la columna de PARIDAD en la tabla de valores contiene el valor de PARIDAD para el mismo registro asociado con la fila 5 de la columna de TIPO. En este caso, la fila 2 de la columna de PARIDAD contiene el valor "extraño". La fila asociada de la columna de PARIDAD en la tabla de casos es el valor en la fila 5 de la columna de TIPO de la tabla de ocurrencias más el valor en la fila 2 de la columna de PARIDAD de la tabla de desplazamientos menos 1; lo que es 3 + 4 - 1 o 6. Las tablas de valores, casos, desplazamientcs y ocurrencias han sido descritas arriba como tablas almacenadas separadamente. Sin embargo, en modalidades alternativas, esto no tiene que ser el caso. Por ejemplo, los elementos de tablas de valores y desplazamientos pueden ser almacenados adyacentemente, y los elementos de tablas de casos y ocurrencias pueden también ser almacenados adyacentemente en estas columnas con tablas de valores condensadas. Esto puede reducir las faltas de caché de almacenamiento mientras se están recuperando filas de datos a partir de la base de datos, y esto reduce también el tiempo de búsqueda de operandos permitiendo que los elementos adyacentes compartan la misma dirección de almacenamiento de base. O bien ordenamiento anidado Para una tabla de valores y desplazamientos dada, existen muchas tablas posibles de casos y ocurrencias que generan el mismo conjunto de registros. Esto se debe al hecho que en el caso de un valor que tiene varias ocurrencias, las ocurrencias del valor pueden ser asignadas a los registros físicos que tienen este valor en un orden arbitrario. En general, el producto de los factores de las varias multiplicidades de valores proporciona el número de tablas de casos/ocurrencias que generan el mismo conjunto físico de registros. (Existen por consiguiente 414,720 (3!*1!*3!*1!*2!*1!*2!*1!*5!*2!*1!*3!*2!*1!*) tablas de casos/ocurrencias diferentes que generan los registros de la base de datos SPJm?d proporcionada abajo) . En una topología de anillo, existe una representación de casos/ocurrencias única que almacena simultáneamente N órdenes "léxicos" de claves múltiples (en donde N es el número de atributos en la base de datos) sin más carga general que lo que se requiere para almacenar las columnas clasificadas individuales (una característica que se conoce aquí como "dispersión") . Cada columna C define uno de estos órdenes de tal manera que la columna se tome como el atributo más significativo en la clave, con siguiente C como el siguiente atributo más significativo, etc., ha=ta la columna prev(C), como el atributo menos significativo en la clave (en donde prev(c) es la columna previa en la estructura de anillo) . El orden se conoce como "léxico" aquí puesto que es el mismo tipo de orden empleado para clasificar palabras alfabéticamente, es decir, las palabras son clasificadas con base en la primera letra, después las palabras con la misma primera letra son clasificadas con base en la segunda letra etc. La dispersión se ilustra a continuación empezando con una tabla de la técnica anterior marcada SPJmod (tomada de C. J. Date, Introduction to Datábase Systems (Introducción a sistemas de bases de datos) , sexta edición, forro de cubierta (1995) ) : i> ¡kJmod • # de registro S# P# J# CANTIDAD 0000 S2 P3 J2 200 0001 S2 P3 J5 600 0002 S2 P5 J2 100 0003 S3 P4 J2 500 0004 S5 P2 J2 200 0005 S5 P5 J5 500 0006 S5 P6 J2 200 Las tablas condensadas de valores y desplazamientos, de conformidad con las modalidades descritas arriba, para SPJm?d son: Tabla de valores: Fila # S# P# J# CANTIDAD 0000 S2 P2 J2 100 0001 S3 P3 J5 200 0002 S5 P4 500 0003 P5 600 V 0004 P6 • 0005 0006 Tabla de desplazamientos : Fila # S# P# J# CANTIDAD 0000 0 0 0 0 0001 3 1 5 1 0002 4 3 •-t 0003 4 6 0004 6 0005 0006 Tres tablas alternat:ivas de casos/ocurrencias se presentan a continuación, cada una reproduciendo el conjunto físico de registros de SPJm?d. Las tablas de casos y ocurrencias se muestran como una tabla única combinada con entradas de la forma casos/ocurrencias. Cada valor en la tabla de valores corresponde a un bloque contiguo de celdas en la tabla de casos/ocurrencias, que es definido por las entradas de la tabla de desplazamientos para este valor. Estos bloques han sido identificados a través del sombreado en las tablas de casos/ocurrencias impresas a continuación. Casos/ocurrencias (versión 1): Fila # S# P# J# CANTIDAD 0000 3/0 0/2 0/0 0/0 0001 1/0 0/1 1/0 0/1 0002 1/1 1/1 1/1 2/0 0003 2/0 0/4 1/2 2/1 0004 0/0 0/0 2/0 1/0 0005 4/0 1/0 2/1 2/2 0006 3/1 0/3 3/0 0/2 Casos/ocurrencias (versión 2) Fila # S# P# J# CANTIDAD 0000 1/0 0/3 1/0 0/2 0001 1/1 0/0 0/0 0/0 0002 3/0 1/0 2/0 2/0 0003 2/0 0/2 1/1 2/2 0004 0/0 0/1 1/2 1/0 0005 3/1 1/1 3/0 2/1 0006 4/0 0/4 2/1 0/1 Casos/ocurrencias (versión 3) Fila # S# P# J# CANTIDAD 0000 1/0 0/2 0/0 0/2 0001 1/1 0/1 1/0 0/0 0002 3/0 1/1 1/1 2/0 0003 2/0 0/4 1/2 2/2 0004 0/0 0/0 2/0 1/0 0005 3/1 1/0 2/1 2/1 0006 4/0 0/3 3/0 0/1 En la versión 3, las entradas con cada bloque de valor se encuentran en orden clasificado con base en su caso y ocurrencia. Los N (aquí, 4) órdenes de claves múltiples naturalmente definidos por SPJm?d son: (S#, P#, J#, CANTIDAD), (P#, J#, CANTIDAD, S#) , (J#, CANTIDAD, S#, P#), y (CANTIDAD, S#, P#, J#), en donde los campos son ordenados desde la izquierda hacia la derecha en orden descendiente de importancia. En una base de datos estructuradas de tabla de tipo registro de la técnica anterior para reconstruir los registros en cualesquiera de estos órdenes, existe una compensación espacio-tiempo. Si los registros deben ser producidos rápidamente, y en tiempo lineal, se requieren de 4 índices separados, especificando los cuatro órdenes de especificación diferentes. Para evitar este uso redundante del espacio, se requiere de una búsqueda que requiere de tiempo cada vez que se cambia el orden léxico empleado. La tabla dispersa de casos de ocurrencias elimina esta compensación. Cualesquiera de los órdenes léxicos naturales pueden ser producidos en tiempo lineal. Por ejemplo, para reproducir el orden de (P#, J#, CANTIDAD, S#) , las celdas en la columna P# son procesadas de arriba hacia abajo, reconstruyendo en los registros que corresponde a cada una de estas celdas. Estos registros se encontraron en el orden léxico deseado. Para el artículo de ilustración, los registros que corresponden a las celdas 0000 a 0006 de la columna P# son los siguientes: Celda 0000 de columna P# -> S5 P2 J2 200 Celda 0001 de columna P# -> S2 P3 J2 200 Celda 0002 de columna P# -> S2 P3 J5 600 Celda 0003 de columna P# -> S3 P4 J2 500 Celda 0004 de columna P# -> S2 P5 J2 100 Celda 0005 de columna P# -> S5 P5 J5 500 Celda 0006 de columna P# -> S5 P6 J2 200 De manera similar registros pueden ser reproducidos en cualesquiera de los N ordenes léxicos mediante el procesamiento linealmente descendente a través de las celdas de la columna más significativa de este orden léxico seleccionado. Si las columnas de la tabla de valores son clasificadas y condensadas, de conformidad con lo descrito arriba, se forma una tabla dispersa de casos de ocurrencias mediante la creación de un ordenamiento léxico de claves múltiples empezando en cualquier columna. Los demás N-l órdenes léxicos de claves múltiples se obtiene automáticamente. CONSERVACIÓN DE FORMATOS DE BASES DE DATOS ESTÁNDARES DENTRO DEL SISTEMA DE BASE DE DATOS' DE LA PRESENTE INVENCIÓN La presente invención permite la opción de mantener porciones de una base de datos en forma convencional sin provocar una carga general adicional importante. Esto puede ser deseable, por ejemplo, en el caso en el cual una columna no puede ser comprimida y no será solicitada. Una modalidad ilustrativa se ilustra a continuación. Para los propósitos de esta ilustración, una columna Francés, que no tiene que ser trasladada en las estructuras de datos de la presente invención se agrega a la base de dacos original de la técnica anterior como se muestra a continuación: BASE DE DATOS DE LA TÉCNICA ANTERIOR: Registro # INGLÉS ESPAÑOL ALEMÁN TIPO PARIDAD FRANCÉS 1 One Uno Eins Unidad Impar Un 2 Two Dos Zwei Prima Par Deux 3 Three Tres Drei Prima Impar Trois 4 Four Cuatro Vier Potencia2 Par Quatre 5 Five Cinco Fuenf Prima Impar Cing 6 Six Seis Sechs Compues Par Six En vez de crear columnas separadas en las tablas de desplazamiento, casos y ocurrencias para la columna de Francés, la columna Francés es "adjunto" a una de las demás columnas cuyas tablas de desplazamientos, casos y ocurrencias fueron registradas arriba. Primero, una columna se selecciona sobre la cual se fija "adjunta" la columna Francés; cualquier columna en la base de datos puede ser seleccionada para este propósito. En este ejemplo, la columna PARIDAD, ha sido seleccionada. Cuando se reconstruyen los registros en la base de datos, el valor apropiado para el atributo "FRANCÉS" es recuperado mientras se determina el valor "PARIDAD" para este registro. Con el objeto de adjuntar la columna FRANCÉS antes que "condensación de tabla de valores" las celdas FRANCÉS en la tabla de valores son clasificadas en el mismo orden que las celdas PARIDAD. Conforme se efectúa está operación durante la construcción de las estructuras de datos de conformidad con la presente invención, se requiere de una cantidad insignificante de esfuerzo adicional. La columna de FRANCÉS clasificada es después anexada a la tabla de valores condensada, como se muestra a continuación: Tabla de valores: Fila # INGLÉS ESPAÑOL ALEMÁN TIPO PARIDAD FRANCÉS 1 Five cinco Drei Compues Par Deux 2 Four cuatro Eins Potencia2 Impar Quatre 3 One dos Fuenf Prima Six 4 Six seis Sechs Unidad Un 5 Three tres Vier Trois 6 Two uno Zwei Cinq Las tablas de desplazamientos, casos y ocurrencias son, en una modalidad, de la siguiente manera: Tabla de desplazamiento: Fila # INGLÉS ESPAÑOL ALEMÁN TIPO PARIDAD 1 1 1 2 2 4 3 3 4 6 5 6 Tabla de casos: Fila # INGLÉS ESPAÑOL ALEMN TIPO PARIDAD 1 1 3 3 1 6 2 2 5 4 1 2 3 6 6 3 2 4 4 4 4 1 2 3 5 5 1 2 1 5 6 3 2 3 2 1 Tablai de ocurrencia ' Fila # INGLÉS ESPAÑOL ALEMÁN TIPO PARIDAD 1 1 3 2 1 2 3 2 2 4 1 3 5 1 1 6 3 1 Ahora, a título de ej emplo, se reconstruye en el registro que corresponde a la solicitud INGLÉS "Three" . Este registro, en la base de datos de la técnica anterior, se ofrece a través de : Registro # INGLÉS ESPAÑOL ALEMÁN TIPO PARIDAD FRANCÉS 3 Three Tres Drei Prima Impar Trois Para reconstruir este registro a partir de las estructuras de datos arriba, primero se encuentra el valor "Three" en la columna INGLÉS de la tabla de valores y después los atributos restantes en los registros son reconstruidos trazana; a través de la tabla de casos. En la celda de cado para la columna de PARIDAD, el valor "FRANCÉS" que corresponde al registro es el valor en la celda correspondiente de la columna de FRANCÉS en la tabla de valores. En el ejemplo, la entrada en la fila 5 de la columna de PARIDAD de la tabla de casos es asociada con el registro en reconstrucción. Así, el valor "FRANCÉS" se encuentra en la fila 5 de la columna "FRANCÉS" de la tabla de valores, dicho valor es "Trois". Alternativamente, una columna no clasificada puede estar incluida en las estructuras de datos de la presente invención mediante el uso de la permutación de identidad como la permutación para esta columna (es decir, la tabla de valores no será reordenada de ninguna manera) . Compresión de fusión de columna De conformidad con una modalidad adicional de la presente invención, columna separadas de tablas de valores pueden ser unidas en una columna única que se conoce aquí como una "columna de unión", con columnas de vista de desplazamiento separadas para cada una de las columnas originales. Esto tiene las ventajas potenciales de presentar una tabla de valores más pequeña, datos preunidos que agilizan las operaciones de unión y velocidad de actualización mejorada. Un valor que no está presente en una columna original particular es limitado en la columna de tabla de desplazamiento por un rango nulo para este valor. Por ejemplo, (considerando una tabla de desplazamiento con formato de "primer número de filas") , si la columna original no tenía el valor en la fila "r" de la columna combinada, la tabla de desplazamiento para esta columna tendría el mismo valor en la fila"r' Y en la fila 'r+1' es decir tabla desplazamiento (r+l,c) - tabla_desplazamiento (r,c)=0¡ Si es la última fila en la columna, sus valores establecido en un número mayor que el número de filas en la tabla de casos para esta columna. Alternativamente, si la tabla de desplazamiento se encuentra en el formato de "último número de filas", el rango nulo que indica la ausencia de casos de número de valor r se proporciona a través de tabla_desplazamiento (r,c) tabla_desplazamiento (r-l,c) (si r-les un número valido de fila) , o bien, en el caso en el cual r es igual al número de fila valido más bajo tabla_desplazamiento (r,c) = 0 (para una numeración de filas basada en 1) o bien -1 (para una numeración de fila basada en cero. A título de ejemplo se considera la siguiente base de datos déla técnica anterior: Base de datos de la técnica anterior: Registro # NOMBRE SEGUNDO NOMBRE APELLIDO 1 John Frederick Jones 2 Steven Alien Smith 3 Frederick Henry Blubwat 4 Albert Alien Brown 5 Alexander Graham Bell 6 Alexander The Great 7 Harvey Nelson Tiffany Nelson Harvey Tiffany 9 Jackson Albert Poole 10 Henry Edward Billings 11 Joseph Blubwat Las tablas de valores y desplazamientos correspondientes para las columnas primer nombre y segundo nombre son, en una modalidad: Tabla de valores: Tabla de desplazamiento: Fila PRIMER SEGUNDO PRIMER NOMBRE SEGUNDO NOMBRE # NOMBRE NOMBRE 1 Albert 1 1 2 Alexander Albert 2 2 3 Frederick Alien 4 3 V 4 Harvey Edward 5 5 5 Henry Frederick 6 6 6 Jackson Graham 7 7 7 John Harvey 8 Joseph Henry 9 9 9 Nelson Nelson 10 10 10 Steven The 11 11 La aplicación de una técnica de ahorro de espacio, función de columna resulta en una columna única de tabla de valores para el PRIMER NOMBRE y el SEGUNDO NOMBRE, con las columnas de tabla de desplazamientos para el primer nombre y el segundo nombre ajustándose para adjuntar en esta columna, como se muestra a continuación: Tabla de valores con Tabla de desplazamiento: Columna de unión PRIMER Unión SEGUNDO PRIMER NOMBRE SEGUNDO NOMBRE NOMBRE NOMBRE 1 1 Albert 1 2 Alexander 2 3 Alien 4 3 Edward 4 5 Frederic 4 6 Graham 5 7 Harvey 5 Henry 6 9 Jackson 7 10 John 10 Joseph 9 10 Nelson 10 10 Steven 11 11 The 12 11 En esta modalidad, la ausencia de -un PRIMER NOMBRE blanco es indicado por las dos primeras filas de la tabla de desplazamientos que tienen el (es decir la diferencia es cero) . La ausencia de valores de PRIMER NOMBRE "Alien" y "Edward" y valores de SEGUNDO NOMBRE "Alexander", "Jackson", "John", "Joseph" y "Steven" se indican de manera similar.
Además, un PRIMER NOMBRE deletreado "The" no ocurre como se indica a través del valor de tabla de desplazamientos de 12, que es mayor que el número de registros. A la inversa, un valor de tabla de desplazamientos en la última fila que es menor o igual al número total de registros indica que dicho valor tiene una ocurrencia (como por ejemplo "The" en la última fila del SEGUNDO NOMBRE en este ejemplo) . En este ejemplo si se requiere de 20 bitios de almacenamiento hará cada entrada de campo de PRIMER NOMBRE y SEGUNDO NOMBRE, columnas no condensada usaría 440 bytes para 11 registros. Después de compresión por fusión de columnas, la columna unión de la tabla de valores emplea un total de 20*15 bytes y con valores de 2-byte en la tabla de desplazamiento, las columnas de tabla de desplazamiento emplean 2*2*15 bytes, lo que da un total de 360 bytes, un ahorro de espacio. Ahorros de espacio serían correspondientemente mayores cuando los valores de tabla de valores para las columnas separadas tienen más empalme. Columnas de unión pueden también emplearse de manera provechosa para implementar uniones, de conformidad con lo descrito a continuación. Otra técnica de ahorro de espacio que es emplea en modalidades alternativas de la presente invención es la combinación de campos de baja cardinalidad en un campo único que tiene valores que representan las varias combinaciones de los campos originales. Por ejemplo, en el ejemplo anterior, los campos TIPO y PARIDAD pueden ser unidos en un campo único, para TIPAR, que tiene valores que representan combinaciones de valores de TIPO y PARIDAD. Tabla de entrada modificada: Registro # IN NGGLLÉÉSS ESPAÑOL ALEMÁN TIPAR 1 One Uno Eins impar unidad 2 Two Dos Zwei par prima 3 Three Tres Drei impar prima 4 Four Cuatro Vier par potencia 2 5 Five Cinco Fuenf impar prima 6 Six Seis Sechs par compuesto Tabla de valores: Fila # INGLÉS ESPAÑOL ALEMÁN TIPAR 1 Five Cinco Drei par compuesto 2 Four Cuatro Eins par potencia 2 3 One Dos Fuenf par prima 4 Six Seis Sechs impar prima 5 Three Tres Vier impar unidad 6 Two Uno Zwei Tabla de caso: Registro # INGLÉS ESPAÑOL ALEMÁN TIPAR 1 1 3 4 4 2 2 5 6 2 3 6 5 6 4 4 1 5 5 5 1 2 1 6 3 2 3 3 Tabla de desplazamientos: TIPAR 1 2 3 4 6 El proceso para establecer estas estructuras de datos es exactamente el mismo que el anterior, excepto que los datos TIPO y PARIDAD se toman como una unidad, en vez de ser dos columnas separadas. Mientras la compresión de la columna TIPAR es menor que la compresión lograda para las columnas originales TIPO y PARIDAD (debido al mayor número de valores distintos, se obtienen ahorros globales de espacio debido a los números reducidos de columna en las tablas de desplazamientos y casos. Estos ahorros de espacio se obtienen sí la cardinalidad combinada es suficientemente baja. La búsqueda para valores que corresponden a la primera parte del campo combinado (par/impar) es generalmente sin cambio, pero la búsqueda para la segunda parte (compuesto/potencia 2/prima/unidad) es más complicada. Para buscar, por ejemplo, "prima", es necesario buscar tanto para "par prima" e "impar prima". En general, C búsquedas de este tipo serán necesarias, en donde C es la cardinalidad de la primera columna de la combinación. Conteos son también más complicados para cualesquiera de las columnas involucradas . Se pueden combinar más que dos columnas, con costos similares. Reagrupamiento El reagrupamiento comprende un mecanismo de almacenamiento y recuperación de datos de lata velocidad conocido que puede superar de manera importante la búsqueda binaria en tiempo logarítmica. Aún cuando es capaz de proporcionar un desempeño en tiempo constante con coeficiente bajo, cuando se implementa con una función de reagrupamiento eficiente en una tabla de reagrupamiento de tamaños apropiada, la búsqueda para parámetros de reagrupamiento de alto desempeño puede ser compleja, difícil y dependiente de datos (por ejemplo, puede depender tanto del número como de la distribución de los valores) . Más importante, el reagrupamiento tiene inconvenientes importantes - especialmente como se implementa en DMBS de la técnica actual. Funciones de reagrupamiento típicamente no pueden devolver resultados ordenados lo que vuelve dichas funciones inadecuadas para búsquedas de rango, peticiones de usuario par salidas ordenadas, como por ejemplo, peticiones SQL "clasificado por" y "agrupado por", y otras peticiones cuya implementación eficiente depende de la clasificación, como por ejemplo uniones.
Soportando una representación eficiente, ordenada, de espacio reducido de datos multidimensionales, la presente invención evita la deficiencia del reagrupamiento asociadas con la falta de orden de DBMS de la técnica anterior. Además, se puede emplear cualquier técnica conocida de reagrupamiento en combinación con la presente invención y como parte de la presente invención. Un ejemplo de reagrupamiento aplicado a una tabla de valores clasificadas es una tabla de reagrupamiento de 64 KB en donde cada entrada en la tabla de reagrupamiento contiene la posición del primer elemento en la tabla de valores cuyos primeros dos bytes corresponden a la posición de la entrada. Por ejemplo, empleando una numeración basada en 0, la primera entrada en la tabla de reagrupamiento contiene un puntero hacia la primera entrada en la tabla de valores cuyos primeros dos bytes contienen todos 0. La segunda entrada contiene un puntero hacia la primera entrada en la tabla de valores cuyos primeros dos bytes contienen 00000000 00000001, etc. Cada conjunto de entradas de tabla de reagrupamiento consecutiva especifican así de manera única en rango entero de valores que contienen el patrón de bitios de dos bytes delanteros para los 64 K dos bytes delanteros posibles. Este rango estrecho de valores puede después ser buscado, por ejemplo a través de una búsqueda binaria, para encontrar cualquier valor buscado. Dos entradas consecutivas en la tabla de reagrupamiento con el mismo valor indican que ningún elemento de valor contiene los dos bytes delanteros de la primera entrada. Modificaciones adicionales pueden ser impuestas sobre las tablas de reagrupamiento implementadas de conformidad con lo descrito arriba. Por ejemplo, se puede ahorrar espacio mediante la remoción de los dos bytes especificados de los valores en la tabla de valores, puesto que esos bytes pueden ser obtenidos a partir de la tabla de reagrupamiento. Además, se requiere después de tiempo adicional para reconstruir los dos bytes delanteros removidos (sino se conocen a partir de la búsqueda) , antes que este valor puede ser regresado al v usuario. Ésto puede efectuarse, por ejemplo por búsqueda binaria de la tabla de reagrupamiento para la fila apropiada en la tabla de valores. Esto puede requerir de hasta 16 pasos adicionales para una tabla de reagrupamiento de 64k en el pero de los casos, pero el desempeño promedio puede ser significativamente reducido, por ejemplo, mediante una búsqueda de incorporación en donde esto es soportado por la distribución regular de un conjunto particular de datos. El reagrupamiento puede también efectuarse en elementos de casos para devolver directamente o estrechar la búsqueda para un elemento de valor asociado, que sirve como una alternativa a la tabla de ocurrencias. Cualquier función de reagrupamiento que devuelve el elemento de valor asociado con un elemento de caso dado o bien algún elemento de valor cercano puede emplearse para este propósito. Si un elemento de valor cercano es envuelto, un elemento de valor asociado específico es después encontrado mediante la búsqueda de una porción limitada de la tabla de desplazamientos. Una técnica de este tipo es una tabla de reagrupamiento de 64KB con punteros en la tabla de valores graficados en cada dos bytes delanteros posibles de una tabla de casos. El rango de entrada en tabla de desplazamientos para buscar se proporciona por una entrada de tabla de reagrupamiento y su entrada adyacente. En situaciones en las cuales se requiere todavía de una búsqueda significativa pero existen también patrones de distribución localizados utilizables, esta tabla de reagrupamiento de entradas de 64KB puede ser modificada para aceptar entradas en dos partes. En una implementación de este tipo, la primera entrada en la tabla de reagrupamiento sigue apuntando hacia el primer valor asociado con el primer elemento de caso que contiene los dos bytes delanteros especificados por esta posición en la tabla de reagrupamiento. La segunda entrada en la tabla de reagrupamiento proporciona después la dirección de una función que utiliza esta distribución local para estrechar adicionalmente la búsqueda para el elemento de valor asociado con este elemento de caso específico.
La elección de tablas de reagrupámiento de 64 KB que corresponden a dos campos de bytes no pretende ser inclusiva. Otras elecciones de tamaños de bytes, otras bases, y colocaciones de bytes otras que los bytes delanteros pueden también emplearse. Además, se puede emplear también cualquier otro método conocido de reagrupamiento. A. Una topología de casa general para la tabla de casos De conformidad con lo descrito arriba, en una modalidad específica, registros individuales están unidos a través de la tabla de casos en alguna topología, una de las más sencillas es una lista enlazada de manera circular o bien topología de "anillos". A la fecha los ejemplos han empleado esta topología de anillo sencilla - los punteros (es decir, entrada) en la tabla de casos unen todos los campos en un registro en un bucle único con cada campo teniendo un campo "previo" único y un campo "siguiente" único, como se muestra en la figura 2. Otras topologías pueden emplearse en otras modalidades de la invención. Una topología, de conformidad con lo definido con relación a la presente invención, se definen término de una gráfica en donde atributos (o bien otras formas de datos asociados) son nodos en la gráfica y existen enlaces entre los nodos. Esto es claramente el caso para la topología de anillo simple. Otro ejemplo una topología aparece en la figura 3. En esta topología, los campos están separados en dos subconjuntos que tienen exactamente un campo en común y cada subconjunto tiene una topología de anillo simple. El campo común a ambos anillos actúa como un "puente" entre ellos. La reconstrucción completa de registro requiere entonces de una transversal alrededor de ambos anillos, con el campo de puente uniendo los subanillos de registro en una entidad única. Esta topología es particularmente útil si la mayoría de las peticiones pertenecen solamente a los campos en uno de los subanillos, puesto que este subanillo puede ser entonces atravesado y recuperado sin atravesar ni recuperar todo el registro. Como se muestra en la figura 4, otra topología es una configuración de estrella, o bien espuela, en donde cada campo representa un rayo doblemente unido que irradia a partir de un cubo central. Alternativamente, las espuelas individuales (ramas) de la estrella pueden ser ya sea una topología lineal o una topología de anillo. En general, cualesquiera de las topologías anteriores pueden ser combinadas (o bien se pueden emplear otras topologías) para optimizar el almacenamiento y la recuperación de registros para bases de datos específicas. Cualquier topología definida puede ser ya sea enlazada de manera única o enlazada de manera doble y una topología no tiene que estar cerrada como en los ejemplos anteriores, así mismo, se puede cambiar una topología entre un monoenlazada y bienlazada a opción del usuario o bien automáticamente a través del sistema de base de datos basado en patrones de acceso. Una topología bienlazada es útil cuando el carácter adyacente de los datos es importante; es decir, cuando el orden de los campos en el registro de tal manera que campos a los cuales se tiene acceso frecuentemente en combinación se coloquen topológicamente cerca entre ellos. Topologías enlazadas de manera única son más deseables cuando se recuperan registros enteros (o bien partes sustanciales de los mismos), o bien si un punto de inicio de recuperación de campo predominante y un orden se proporcionan puesto que la lista de casos en una topología de enlace único ocupa la mitad del almacenamiento del caso de enlace doble. Ejemplo de tipo de fuente La figura 3 ilustra específicamente una topología en la cual cada registro comprende dos subanillos separados (INGLÉS -> ESPAÑOL -> ALEMÁN e INGLÉS -> TIPO -> PARIDAD) con INGLÉS como el campo de puente. Una tabla de casos que implementa dicha topología se muestra a continuación: Fila # INGLÉS ESPAÑOL ALEMÁN TIPO PARIDAD 1 1/5 3 5 3 6 2 2/2 5 3 2 2 3 6/6 6 1 1 4 4 4/1 4 4 5 3 5 5/4 1 2 6 5 6 3/3 2 6 4 1 La columna INGLÉS tiene dos punteros de salida, uno para cada uno de los subanillos. Para atravesar, por ejemplo, el registro que empieza en la fila 1 de la columna INGLÉS, uno de los punteros de salida es seguido primero, por ejemplo, el que apunta hacia la fila 1 de la columna ESPAÑOL. La fila 1 de la columna ESPAÑOL apunta hacia la fila 3 de la columna ALEMÁN, que apunta a su vez de nuevo hacia la fila 1 de la columna IINGLÉS. El otro puntero de salida es después seguido, llevando hacia la fila 5 de la columna TIPO. La fila 5 de la columna TIPO a su vez apunta hacia la fila 6 de la v columna PARIDAD, que apunta a su vez de nuevo hacia la fila 1 de la columna INGLÉS. I plementación de una base de datos A continuación se describen implementaciones de rutinas para ingresar datos, para mantener y para extraer datos a partir de las estructuras de datos descritas arriba. Un experto en la materia reconocerá que existen numerosos algoritmos diferentes para efectuar estas operaciones, y la presente invención no se limita a los algoritmos presentados aquí. Se proporcionan funciones primitivas (es decir, funciones que son llamadas por otras funciones) , en una modalidad, para extraer los datos asociados con un registro dado y memoria intermedia en una forma lineal, para escribir dicha forma lineal amortiguada de los datos de regreso a las estructuras de datos de la invención. Estructuras de datos de conformidad con la presente invención se conocen a continuación de la siguiente manera: 1) VALS2 : una tabla de valores con las columnas en orden clasificado y posiblemente condensado; 2) DISP: tabla de desplazamiento (la columna I que tiene el mismo número de filas que la columna I correspondiente de VALS2) ; 3) DELS: borrar tabla, se describe abajo, (la columna I de la cual tiene el mismo número de filas que la columna I correspondiente de VALS2) ; v 4) INST: tabla de casos; 6) OCCUR: tabla de ocurrencias. En los comentarios siguientes, se emplea una modalidad que tiene una topología de anillo, a menos que se indique lo contrario. En la topología de anillo en esta modalidad, las funciones prev(C) y siguiente (C) , que regresan a la columna previa y a la columna siguiente, respectivamente, son las siguientes: prev(C) = (C + fcuenta = 1) mod fcuenta, y siguiente (C) = (C + 1) mod fcuenta, en donde fcuenta es el número de columnas y C es un número de columna dentro de un rango de 0 a fcuenta - 1. Una modalidad alternativa tiene números de columna que se ubican de 1 a fcuenta, con prev(C) = (C-l)? (C-l): fcuenta (empleando notación de lenguaje C) , y siguiente (C) = C mod fcuenta + 1. Topologías más generales pueden ser implementadas definiendo funciones prev ( ) y siguiente () más complicadas, y/o mediante el análisis de la topología en anillos simples y aplicación repetida de las funciones debajo de estos anillos simples. El número de filas en la tabla de valores no condensada, y en la tabla de casos, se representa como recuenta. Las columnas VALS2 condensadas tendrán menos filas, así como las estructuras DISP y DELS correspondientes. Las filas son numeradas de 0 a recuenta -1 (basado en cero) ; modalidades alternativas pueden tener filas numeradas de 1 a recuenta (basada en uno) . "Fraccionamiento V/O" se refiere a la tabla de casos alternativa con tabla de valores condensada comentada arriba - la primera columna se llama "fraccionamiento V/O" si los punteros en la columna i de la tabla de casos tienen tanto un componente de valor como un componente de ocurrencia. Tratamientos paralelos para columnas no fraccionadas V/O y fraccionadas V/O se presentan en caso apropiado. Los descriptores para cada columna en la tabla de casos indican si la columna tiene un fraccionamiento V/O. Los descriptores contienen también otra información específica de columna/atributo, como por ejemplo la vía de transversal de nodo (es decir, "topología de registro") , si la columna tiene una numeración basada en 0 o basada en 1, etc. descriptores de columna para cada columna de la tabla de valores contiene información de configuración, como por ejemplo su tipo de datos, tamaño de campo, tipo de permutación/cambio (por ejemplo, agrupados por valor, clasificado) , tipo de compresión (eventualmente) , información bloqueada, tipo de reagrupamiento (eventualmente) , etc. Otras tablas tienen también descriptores de columna que contienen información de configuración relevante. Para facilitar la notación de variables de función y valores de retorno, se emplea lo siguiente (escrito en una notación pseudo-C/C++) : typedef long Row: typedef int Cólumn: class ChainVO {Row chainV[fcount] ; Row chainO [fcount] ; bool valid; } Si un objeto ChainVO ha sido llenado con datos para un registro válido, chainV[C] contiene el número de filas de la entrada VALS2 de registro en la columna siguiente (C) . Si la columna C en la tabla de casos es fraccionada V/O, ChainO [C] contiene el número de ocurrencias del valor VALS2[chainV[C], siguiente (C) ] . Si la columna C de la tabla de casos no es fraccionada V/O, chainO [C] contiene el número de filas de la celda de registro en la columna siguiente (C) de la(s) tabla (s) de casos. Reconstrucción de registro Dado un número R de fila en 1.a columna C de la tabla de casos, existe un número V de fila único en VALS, que contiene el valor real asociado con la celda [R,C] de la tabla de casos. La rutina mostrada en la figura 5, obtener fila_valrec (fila R, columna C) , determina V a partir de R y C. El paso GV1 determina si la columna C tiene una columna de tabla DISP mediante la revisión de los descriptores de columna para la columna C, y si no es el caso, el paso GV2 establece V a R. De otra forma, si una columna de tabla DISP se encuentra presente, el paso GV3 determina su formato (otra vez mediante la revisión del descriptor de programa) . Si la columna de tabla DISP se encuentra en el formato de primer número de fila, entonces se establece V, en el paso GV4, en el valor para el cual DISP[V,C] < = R < DISP[V+1,C] es cierto, en donde la prueba de límite superior no se efectúa si V+l no existe (es decir, si V es la última fila de la tabla DISP para la columna C) . De otra forma, se establece V, en el paso GV5, al valor por el cual DISP[V-1] < R < = DISP[V,C], en donde la prueba de límite inferior no se efectúa si V-l no existe (es decir, si V es la primera fila de la tabla DISP para la columna C) . Si la columna C de la tabla de casos es fraccionada V/O, el número de filas siguiente_R en la columna siguiente (C) de la tabla de casos es determinado a partir de las entradas V/O de manera dependiente de la implementación de DISP y OCCUR como se muestra en el diagrama de flujo de la rutina R_a partir de_VO(C, I, 0) en la figura 6. R_a partir de_V0 ( ) es pasada a la columna actual, C, el número de filas, I, del valor asociado en la columna siguiente, siguiente (C) , de VALS2 (y DISP) y el número de ocurrencias, 0, de este valor. El paso 242 establece las variables I' en I y X en cero. El paso 243 prueba (por ejemplo, a través de descriptores de columna) si la columna siguiente (C) de la tabla DISP se encuentra en el formato de "primera fila" o en el formato de "última fila". Si se encuentra en el formato "última fila", se efectúa el paso 244, que establece I' en 1-1 y X en 1. En cualquier caso, el paso 245 es después efectuado, que establece la variable O' en O. El paso 246 es después efectuado, que prueba si la columna C de la tabla OCCUR es basada en 1. Si es el caso, se efectúa el paso 247, que establece O' en 0-1. En cualquier caso, el paso 248 es después efectuado, lo que establece siguiente_R, la fila en la siguiente columna, en DISP[I', siguiente (C) ]+0'+X] . La figura 7 ilustra una función para linearizar un dato de topología de registro, que se conoce aquí como obtener_cadena (fila RO, columna CO) . Empezando en la fila R0, la columna CO en la tabla de casos, esta rutina se desplaza a través del ciclo de puntero, almacenando los punteros en un objeto ChainVO. Si se cierra el ciclo de punteros, se establece ChainVO.valid en "cierto"; de otra forma se establece en "falso". En el paso Gl, una celda de tabla de casos [RO, CO] es establecida como en el punto de inicio para reconstrucción de registro. En el paso G2, la "celda actual" [R, C] es inicializada en la celda inicial [RO, CO] . En el paso G3, los descriptores de columna para la columna actual en la tabla de casos son revisados para ver si tiene un fraccionamiento V/O. Si la columna no tiene un fraccionamiento V/O, el paso G4 busca el número de filas en la columna siguiente directamente mediante el establecimiento de R en INST[R, C] . El paso G5 establece la variable 0 para carga en el conjunto chainO []. El paso G6 emplea obtener_valrec (R, siguiente (C) ) para encontrar el número de filas de siguiente columna correspondiente, V, en VALS2, DISP, y DELS (si existe) . Si la columna C tiene fraccionamiento V/O, V (el número de filas en la siguiente columna, siguiente (C) , de VALS2, DISP, DELS) y O (el número de ocurrencias para este valor) se establecen, en el paso G7, en INST[R, C] y OCCUR[R, C] , respectivamente. El paso G8 emplea después R_a partir de_VO (C, V, O) de conformidad con lo descrito arriba para , encontrar el número de filas, R, en la columna siguiente (C) de la tabla de casos. Un procesamiento que converge en el paso G9, en donde se establecen cadena V [C] y cadenaO[C] en V y O, respectivamente. El paso GIO remplaza después C con siguiente (C) , y el paso Gil revisa para ver si el procesamiento ha regresado a la columna en la cual empezó (es decir, CO) . Si no, el procesamiento regresa al paso G3, y repite lo anterior. Si el procesamiento ha alcanzado la columna de inicio original, el paso G12 compara el valor actual de R con el valor inicial RO . Si son iguales, la cadena de puntero forma un bucle cerrado, lo que indica que se ha reconstruido un registro válido y almacenado en el objeto cadena VO, y el paso G14 establece un marcador para indicar esta situación. Si R no es igual a RO, el paso G13 establece un marcador para indicar que el intento de reconstruir un registro no resultó en un bucle cerrado, lo que indica en esta modalidad de la v invención (que emplea una topología de anillo) que un registro válido no pasa a través de la celda [RO, CO] . En otras modalidades de la invención, empleando topologías diferentes, la cadena de punteros entre elementos asociados de casos no tiene que formar un bucle cerrado. El paso final de reconstrucción de registro es la conversión de los números de filas de tabla de valores almacenados en el conjunto de cadena V en valores. El valor de columna C del registro es proporcionado por VALS2 [cadena V[prev(Q], C] (posiblemente con un valor de reagrupamiento prefijado, de conformidad con lo descrito arriba) . Reconstrucción de registro generalizada La descripción anterior para usar obtener_cadena ( ) para reconstruir un registro se basa en una topología de bucle simple en la cual la siguiente columna en la topología depende solamente de la columna actual. La situación puede ser generalizada. La siguiente columna puede depender de meta-datos, otros que la columna actual o bien además de la columna actual. Por ejemplo, la siguiente columna puede ser una función tanto de la columna actual como de la columna previa, es decir, C=next(C, prev(C)). Además, la siguiente columna en la topología puede depender de datos mismos, como por ejemplo el valor, V, de la celda actual en la tabla de valores, o bien depender de todos los anteriores, es decir, C=siguiente (C, prev(C), V). Funciones primitivas para modificación de registro Ahora describimos funciones primitivas para una implementación de borrado de registro, inserción de registro, y modificación de registro. La implementación se conoce aquí como el método de "sustitución". En este método, un valor en Xa. tabla de valores puede tener casos borrados así como casos no borrados ("vivos") . Una estructura de datos, conocida aquí como DELS, almacena una cuenta para cada valor del número de casos borrados que tiene. Así, DELS tiene el mismo número de columnas que VALS2 y DISP, y para cualquier columna dada, el mismo número de filas en esta columna que VALS2 y DISP. Los casos borrados se consideran como espacio libre en la tabla de casos, y la tabla de casos es mantenida de tal manera que para cualquier valor dado en cualquier columna, todos los casos vivos estén agrupados de manera contigua juntos y todos los casos borrados estén agrupados de manera contigua, de tal manera que los casos vivos precedan los casos borrados o a la inversa. Esto permite que el espacio libre sea fácilmente ubicado para asignación a nuevos registros o nuevos valores de campo para registros existentes, como se muestra en las funciones que presentamos abajo. Espacios libres pueden también colocarse en ubicaciones deseadas en la tabla de casos en el tiempo de preparación mediante la inclusión de registros borrados apropiados en una tabla de datos de entrada; proporcionando así una implementación para efectuar v inserciones antes de borrados. La función poner_cadena (columna CO, cadena VO, rec, int cuenta) , mostrada en la figura 8, efectúa la inversa de obtener_cadena ( ) . Poner_cadena ( ) , empezando en la columna CO, escribe una parte o la totalidad de los contenidos de un objeto cadena VO "rec" en las tablas de casos y ocurrencias, para el número de "cuenta" de columnas. El número de filas escrito en la columna C se obtiene a partir de las entradas prev(C) en rec. Poner_cadena ( ) no modifica las tablas de valores ni las tablas de desplazamiento. El paso Pl establece el número C de columna actual en la columna inicial CO . El paso P2 revisa los descriptores de columna para la tabla de casos en la columna prev(C) para determinar si la columna previa es fraccionada V/O. Si prev(C) es fraccionada V/O, el paso P3 establece V (el número de filas en las tablas de valores de desplazamientos) en cadena V[prev(C)] y 0 (el número de filas en la tabla de ocurrencia) en cadenaO [prev(C)]. El paso P4 establece R (el número de fila en la tabla de casos (en R_a partir de_VO (prev(C), V, 0) . Si la columna prev(C) de la tabla de casos no es fraccionada V/O, el paso P5 establece R en cadenaO [prev(C)]. Habiendo obtenido el número de filas en la columna C de la tabla de casos en la cual escribir, el paso P6 determina si la columna C es fraccionada V/O. Si no es el caso, el paso P7 establece INST[R, C] en cadena 0[C]. Si la columna C es fraccionada V/O, el paso P8 establece INST[R, C] en cadena V[C] y OCCUR[R, C] en cadena 0[C], El procesamiento avanza entonces hacia la siguiente columna en el paso P9 y la cuenta de las columnas a procesar es disminuida en el paso PlO. Si el paso Pll determina que no se deben de escribir columnas adicionales, el procesamiento es efectuado, de otra manera, el procesamiento regresa al paso P2 y se repiten las operaciones . La figura 9 es un diagrama de flujo de la función int sustitución (columna C, fila Rl, fila R2) , que modifica la tabla de casos, y otras tablas, de tal manera que el registro que pasa a través de [Rl, C] pase a través de [R2, C] y el registro que pasa a través de [R2, C] pase a través de [Rl, C] . El paso SI busca los datos de registro para el registro que pasa a través de INST[R1, C] en objeto de cadena VO cadena VO_l y busca los datos de registro para el registro que pasa a través de INST[R2, C] en cadena V0_2. Ambos registros deben ser bucles cerrados, de otra forma, se plantea una excepción por obtener_cadena () . Si ambos bucles son válidos, en el paso S2, los valores en cadena V0_1. cadenaV[prev (C) ] y cadenaV0_2. cadenaV[prev (C) ] son intercambiados y los valores en cadena V0_1.cadenaO [prev (C) ] y cadena V0_2. cadena 0[prev(C)] son intercambiados. Los valores intercambiados se encuentran en la columna prev(C), puesto que esta columna determina el número de filas de la columna C en la tabla de casos. Las modificaciones son después escritas devuelta en la tabla de casos en el paso S3 a través de las llamadas para poner_cadena (prev(C), cadenaVO_l, 2) y poner_cadena (prev(C), cadenaV0_2, 2). Poner_cadena () es llamada con la cuenta 2, puesto que un pasaje a través del bucle poner_cadena ( ) actualiza los punteros a las celdas sustituidas, y el segundo pasaje actualiza el contenido de las celdas sustituidas. Un código de éxito es devuelto en el paso S4, y el procesamiento es completo. La figura 10 es un diagrama de flujo de la función borrar sustitución (columna C, fila R, fila Rd) , que modifica la tabla de casos y otras tablas de tal manera que el registro a través de [R, C] es reencaminado para pasar a través de una celda libre [Rd, C] . Esta rutina se emplea, por ejemplo, para mantener la segregación de los casos borrados de los casos vivos de un valor dado. En el paso DI, datos para el registro a reencaminar (en fila R, columna C) se colocan en el objeto de cadena VO cadena VO_r a través de una llamada a obtener_cadena ( ) . Si obtener_cadena ( ) determina que el registro no es un bucle cerrado (es decir, es un registro inválido) , se plantea una excepción. El paso D2 encuentra la fila, Vd, de la tabla de valores asociada con la celda libre Rd, empleando Vd = obtener_valrec (Rd, C) . El paso D3 revisa los descriptores de columna para la columna prev(C) de la tabla de casos para determinar si es un fraccionamiento V/O. Si no es un fraccionamiento V/O, el paso D4 se efectúa, que establece cadenaVO_r. cadenaV[prev (C) ] en Vd y cadenaVO_r. cadenaO [prev (C) ] en Rd. Si la columna prev(C) es fraccionada V/O, los pasos D5 y D6 se efectúan. El paso D5 establece el número de ocurrencias, Od, de una manera estrechamente relacionada con R_a partir de_VO ( ) descrita arriba; específicamente, Od = Rd - DISP[Vd', C] - X (en donde Vd' = Vd y X = 0 si DISP es un formato de "primer número de fila", o bien Vd' = Vd-1 y X = 1 si DISP es el formato "último número de fila"; si OCCUR es basado en 1 en vez de cero, disminuye X en 1 én el precedente) . El paso D6 pone valores en el objeto cadena VO, estableciendo cadenaVO_r .cadenaV[prev (C) ] en Vd y cadenaVO_r. cadenaO [prev (C) ] en Od. En cualquier caso, el paso D7 es efectuado después, que escribe la topología de registro modificada de regreso en la tabla de casos, a través de una llamada a poner_cadena (prev (C) , cadenaVO_r, 2), y el procesamiento termina. La figura 11 es un diagrama de flujo de la función top_undel (columna C, fila R) . La celda [R, C] de la tabla de casos tiene un valor asociado VALS2 [V, C] , en donde V = obtener_valrec (R, C) . Si este valor tiene casos vivos, top_undel () regresa al número de fila más alto (en la columna de tabla de casos C) para tales casos vivos; de otra forma, la rutina regresa un marcador que indica que no hay casos vivos y un número que es uno menos que el número de filas del primer caso de V. En el paso TI, la fila V de tabla de valores asociada con la fila R de tabla de casos de la columna C se encuentra; es decir, V = obtener_valrec (R, C) . El paso T2 establece ARRIBA en el número de fila más alto en la tabla de casos de todos los casos de valores V. Si DISP se encuentra en el formato de "último número de fila", ARRIBA =DISP [V, C] ; si DISP se encuentra en el formato "primer número de fila", ARRIBA = DISP[V+1, C]-l, si DISPt V+l, C] existe, o bien si DISP[V+1, C] no existe, ARRIBA = recuenta + X - 1 (en donde X = 0 para numeración de fila basada en 0 y X = 1 en el caso de numeración de fila basada en 1) . Si no existe DISP para la columna C, una búsqueda a través de la columna de tabla de valores no condensada proporcionará los números de filas del primer caso y del último caso del número de valor V. El paso T3 establece DLS en la cuenta de casos borrados para el número de valor V. Si existe una estructura DELS, DLS = DELS [V, C] ; de otra forma, DLS se obtiene mediante el conteo de los casos marcados como borrados. El paso T4 establece TU en el número de filas inmediatamente previo al primer caso borrado de número de valor V (otra vez, en la modalidad del "método de sustitución" todos los casos vivos del número de valor V preceden, o bien en una modalidad alternativa, siguen, todos los casos borrados del mismo valor) . El paso T7 establece BOT, el número de filas del primer caso del número de valor V. En el caso de DISP de formato de "primer número de fila", BOT = DISP[V, C] ; en el caso de DISP de formato de "último número de filas", BOT = 1 + DISP[V-1, C] (si existe DISP[V-1, C]), o bien BOT = X (en el caso de numeración de fila basada en X, X = 0 o X = 1) . Si no hay DISP para la columna C, entonces se obtiene BOT mediante una búsqueda en la tabla de valores no condensada. El paso T6 prueba para determinar si TU es mayor o igual a BOT. Si no es el caso, entonces el número de filas TU no pertenece al número de valor V, sino que al contrario es uno menos que el número de filas del primer caso V. Sigue el paso T7, devolviendo TU y un marcador que indica que todos los casos están borrados. Si TU es superior o igual a BOT, el paso T6 es seguido por el paso T8, que regresa el número deseado de filas. La figura 12 es un diagrama de flujo de la función Yo_desplazo_espacio_de lista ascendente (columna C, fila V) , que sustituye punteros en la tabla de casos, con el objeto de desplazar una celda libre de DELS[V+1, C] a DELS [V, C] mientras mantiene la segregación de los casos vivos de los casos borrados. El paso Ul revisa si existe un valor en el número de fila V+l v en la columna C de VALS2. Si no existe dicho valor en el número de fila V+l (es decir, el índice V+l se encuentra fuera de límites) , se reporta un error en el paso U2 y la función termina. De otra forma, el paso U3 prueba si la fila de valores V+l de la columna C de VALS2 tiene casos borrados (uno de los cuales será desplazado por esta rutina) . Si no tiene ningún caso borrado, el paso U4 reporta un error (no hay espacios para desplazarse), y termina el procesamiento.
Si se encuentran casos borrados, el paso U5 prueba si la fila de valores V+l tiene casos vivos mediante el cálculo de J = top_undel (C, K) (en donde K, el número de filas del -primer caso del número de valor V+l, se proporciona mediante K = DISP[V+1, C] si la columna C de DISP es de un formato "primer número de fila" o bien K = DISP[V,C]+1 si la columna C de DISP tiene el formato "último número de fila", o bien es encontrado, por ejemplo, mediante búsqueda lineal en la tabla de valores si no hay columna C de DISP) . Si es el caso, el paso U6 llama borrar_sustitución (C, K, J+1) para sustituir el primer caso vivo (en la fila K) con el primer caso borrado (en la fila J+1), poniendo de esta forma la célula libre al lado de las filas de tabla de casos asociadas con el valor V.
El paso U7 deduce después esta célula libre de la cuenta de células borradas para el número de valor V+l (disminuyendo DELS [V+l, C] si DELS tiene una columna C) , el paso U8 agrega la celda a la cuenta de celdas borradas para el número de v valor V (mediante el incremento de DELS [V, C] , si DELS tiene una columna C) , y el paso U9 ajusta la tabla de desplazamiento (si tiene una columna C) , para reflejar la transferencia de la celda libre en el número de valores V establecido de casos borrados. Si la columna C de DISP se encuentra ^en el formato de "primer número de filas", DJSP[V+1, C] es incrementado para desplazar el "piso" del bloque de casos para un número de valores V+l por una celda; si la columna C de DISP se encuentra en el formato "último número de filas", DISP[V, C] es incrementado para desplazar el "techo" del bloque de casos para un número de valor V por una celda. La figura 13 es un diagrama de flujo de Yo_desplazo_espacio_lista descendente (columna C, fila V) , que sustituye punteros en la tabla de casos, de tal manera que se mueva una celda libre desde DELS [V, C] a DELS [V+l, C] .
Se mantiene la segregación de casos vivos y casos borrados. Un error es indicado por el valor de retorno. El paso Wl determina si la fila V+l de la columna C de VALS2 se encuentra fuera de límite. Si es el caso, el paso W2 reporta un error (es decir, no hay valor V+l para usar una celda libre) y retorna. De otra forma, el paso W3 prueba si el valor V tiene algún caso borrado (uno de los cuales será movido por esta rutina) . Si no es el caso, el paso 4 reporta un error (no espacios para desplazarse) , y termina el v procesamiento. Si se encuentran casos borrados, el paso W5 calcula J = top_undel (C, K) (en donde K, el número de filas del primer caso del número de valor V+l es proporcionado por K = DISP[V+1, C] si la columna C de DISP se encuentra en el formato "primer número de fila" o bien, K = DISP[V, C]+l si la columna C de DISP se encuentra en el formato de "último número de fila" o bien se encuentra, por ejemplo, mediante una búsqueda lineal en la tabla de valores si no hay columna C de DISP) para determinar si el número de valor V+l tiene casos vivos. Si es el caso, el paso W6 llama sustitución_borrado (C, J, K-l) para sustituir el caso vivo superior (en J) de valor V+l con el último caso borrado de valor V (en K-l) , desplazando de esta forma la celda libre hacia las filas de tabla de casos asociadas con el número V+l de fila de tabla de valores. El paso W7 agrega después esta celda libre a la cuenta para el número de valor V+l. El paso W8 deduce la celda de la cuenta para el número de valor V. El paso 9 desplaza el límite entre V y V+l para incorporar la celda libre transferida en el conjunto de números de valores V+l de casos borrados. Si la columna C de DISP se encuentra en el formato "primer número de fila", DISP[V+1, C] es disminuido para desplazar el "piso" del bloque de casos para el número de valor V+l hacia abajo por una celda; si la columna C de DISP se encuentra en el formato " último número de fila", DISP[V, C] es disminuido para desplazar el "techo" del bloque de casos para un número de valor V abajo por una celda. La figura 14 es un diagrama de flujo de la fila cuenta_de_casos (columna C, fila V) , que obtiene la cuenta total de casos (vivos + borrados) para el valor en VALS2 [V, C] , donde V es un número de fila en el conjunto VALS2 y C es el número de columna. El paso Cl determina si la columna C de DISP existe. Si no es el caso, las entradas del valor requerido en la columna de valores no condensada se cuentan directamente en el paso C2, y el procesamiento termina. Si la columna C de DISP existe, el paso C3 determina si la columna DISP se encuentra en el formato de "primer número de filas". Si no es el caso, el procesamiento prosigue con el paso C4. Si la columna DISP se encuentra en el formato de "primer número de filas", el procesamiento sigue con el paso C8. El paso C4 determina cómo establecer la variable BOT: si V es el índice permitido más pequeño para DISP, entonces el paso C5 establece BOT = -1 para numeración de fila basada en cero, o bien establece BOT = 0 para numeración basada en 1. Si por otra parte V-l es un índice válido para DISP, el paso C6 establece BOT = DISP[V-1,C]. El paso C7 encuentra después la cuenta total de casos como DISP [V, C] -BOT, y el procesamiento termina. Si el paso C3 termina que DISP[C] se encuentra en el formato "primer número de fila", el procesamiento prosigue hasta el paso C8, que determina cómo establecer la variable TOP: si V es el índice más alto permitido para DISP, entonces el paso C9 establece TOP = recuenta + X para la numeración de filas basada en X (X = 0, o bien X = 1) . Por otra parte, si V+l es un índice válido para DISP, el paso CIO establece TOP = DISP[V+1,C]. El paso Cll encuentra después la cuenta total de casos como DISP[V,C], y el procesamiento termina. La figura 15 es un diagrama de flujo de una función que borra la celda de tabla de casos [R, C] ; es decir, la celda [R,C] en la tabla de casos es colocada en el conjunto libre, y se incrementa la cuenta de DELS apropiada. Si la celda recién borrada se encuentra rodeada por celdas vivas para el mismo valor, es desplazada hacia el límite celdas vivas/celdas borradas a través de sustitución_de_borrado () . Los datos de topología de registro se encuentran en el objeto cadena VO conocido como VO. Esta rutina se emplea en el borrado de registro y en la actualización de un campo en un registro existente; véase "actualización de registro existente", paso E6 y "borrado de registro a través de celda" paso DR7, abajo. En el paso DC1, el número de filas VALS2/DELS/DISP en la columna C se obtiene a partir de la estructura cadena VO que representa el registro en procesamiento, y se incrementa la cuenta DELS correspondiente. El paso DC2 determina si los punteros hacia la celda en cuestión son fraccionamiento V/O. Si prev (C) no es fraccionamiento V/O, el paso DC3 obtiene el número de fila R directamente a partir de VO. cadenaO. Si prev(C) es fraccionamiento V/O, el paso DC4 reconstruye R a partir de Vo. cadenaO a través de R = R_a partir de_V0 (prev (C) ,V,VO. cadenaO [prev (C) ]) . De cualquier manera, la célula no borrada superior para el mismo valor es localizada, a través de una llamada a top_undel (C,R), y establecida en T en el paso DC5 (que tiene garantía de existir, puesto que la celda a borrar es dicha celda no borrada) . El paso DC6 prueba después si la celda en proceso de borrado es la celda no borrada superior para el valor en cuestión. Si no es el caso, se efectúa una sustitución en el paso DC7 a través de una llamada a sustitución_de_borrado (C,T,R) con el objeto de mantener la segregación entre los casos vivos y los casos borrados. El procesamiento termina. La figura 16 es un diagrama de flujo de insertar_v (fila V, columna C, vacío*newvalptr) , que inserta en la columna C de VALS2, en la fila V, un nuevo valor no previamente presente (apuntado por newvalptr) y modifica las tablas DELS y DISP asociadas (si existen) para dar cabida al nuevo valor. Esta función se emplea solamente cuando la columna prev (C) de la tabla de casos no es fraccionada V/O. El paso IV1 prueba si el valor en el punto de inserción (fila V) tiene caos vivos; es decir, si top_undel (R, C) devuelve un marcador que indica que no hay casos vivos (R aquí e3s el número de filas INST de cualquier caso de número de valor V; si la columna C de DISP existe, R = DISP [V, C] es un caso de este tipo; si DISP no tiene columna C," R = V es un caso de este tipo. Si no existen caos vivos del valor en la fila V, se efectúa el paso IV2, que sobrescribe el valor antiguo con el nuevo, valor, y el procesamiento termina. Si existe un caso vivo, se efectúa una búsqueda para el valor más cercano que tiene caos vivos. El paso IV3 inicializa un índice J en 1. El paso IV4 determina si tanto V+J como V-J se encuentra fuera de límites. Si se encuentran fuera de límites, lo que significa que no es posible una búsqueda adicional y no se encontraron espacios de valores libres, se efectúa el paso IV5 que asigna espacio adicional, para uno o varios espacios adicionales, en la columna C de VALS2, DISP y DELS. El paso IV6 prueba si V+J se encuentra fuera de límites, y el valor en la fila V+J tiene casos vivos (a través de top-undel (Rf , C) , donde R' es el número de fila de INST de cualquier caso de número de valor V+J; si la columna C de DISP existe, R' = DISP [V+J, C] es un aso de este tipo; si DISP no tiene columna C, R' = V+J es un caso de este tipo. Si V+J se encuentra dentro de los límites y si el valor V+J no tiene casos vivos, entonces se ejecuta la ramificación que empieza con el paso IV7; de otra forma, se ejecuta el paso IV10. La ramificación que empieza con el paso IV7 es un bucle que desplaza los valores en la fila V a V+J-l en VALS2 hacia la siguiente fila superior, abriéndose así una fila no utilizada v en la fila V de VALS2. El paso IV7 agrega los casos borrados de número de valor V + J al número de valor V+J-l, por ejemplo si DELS tiene una columna C, entonces DELS [V+J-l, C] se establece en DELS [V+J-l, C] . El paso IV8 desplaza los valores en la fila V+J-l de VALS2 , (y DELS y DISP, si existen) hacia la fila V+J de VALS2, DELS y DISP, respectivamente (es decir, VALS2 [V+J, C] = VALS2 [V+J-l, C] ; DELS [V+J, C] = DELS [V+J-l, C] ; DISP [V+J, C] = DISP = [V+J- 1, C] , y después disminuye J. El paso IV9 itera el paso IV8 hasta que J = 0. Entonces, el paso IW15 inserta el nuevo valor en la fila V del VALS2 y actualiza DELS y DISP para indicar que el nuevo valor no tiene casos; es decir, VALS2 [V, C] = nuevo valor, DELS [V, C] = 0, y DISP [V, C] = DISP [V+l, C] . El procesamiento termina. El paso IV10 prueba si V-J se encuentra dentro de límites, y si el valor en la fila V-J tiene casos vivos. Si existen casos vivos, se ejecuta el paso IV11, que incrementa J y el bucle regresa al paso IV4. Si V-J se encuentra entre límites, y el número de valor V-J no tiene casos vivos, se ejecuta el paso IV12, que empieza un bucle que desplaza los valores en las filas V-J+l hacia V en VALS2 hacia la siguiente fila más baja, abriendo así una fila no utilizada en la fila V de VALS2. El paso IV12 agrega los pasos borrados del número de valor V-J al número de valor V-J-l (por ejemplo si DELS tiene una columna C, entonces DELS [V-J-l, C] es establece en DELS [V-J-l, C] + DELS [V-J, C] . El paso IV13 desplazada después valores de las filas V-J-l de la fila VALS2, (y DELS y DISP, si existen) hacia las filas V-J de VALS2, DELS y DISP, respectivamente (es decir, VALS2 [V-J, C] = VALS2 [V-J+l, C] ; DELS [V-J, C] = DELS [V-J+l, C] ; DISP [V-J, C] = DISP [V-J+l, C] y disminuye J. El paso IV14 itera el paso IV13 hasta J = 0, en dicho punto el paso IV15 inserta el nuevo valor, sin caos, de conformidad con lo descrito arriba, y el procesamiento termina. La figura 17 es un diagrama de flujo de insert_vov (fila V, columna C, vacío + newvalptr) , que inserta un nuevo valor (apuntado por newvalptr) en la columna C de VALS2, cuando la columna prev (C) de la tabla de casos es fraccionada V/O. El conjunto de descriptores de columna para dicha columna incluye un valor h_val, el número de fila más lata actualmente usada en VALS2 columna C, y h_ptr, el número de fila más alta actualmente usada en la tabla de caos. Tanto VALS2 como la tabla de casos es asignan de preferencia con espacios adicionales en blanco en sus extremos para dar cabida a nuevas entradas. En una modalidad de la presente invención, nuevos valores insertado se escriben al final de la tabla VALS2 y no en su posición de orden clasificado, como en insert_v(), arriba). Una lista de permutaciones que proporciona los números agregados de filas de VALS2 en orden clasificado es actualizada mediante la inserción de los nuevos índices en sus posiciones de clasificación apropiadas. La lista de permutaciones se emplea para generar acceso a la nueva parte de la columna de VALS2 en el orden clasificado (por ejemplo, mediante un algoritmo de búsqueda binario) . Una búsqueda para un valor la columna VALS2 debe buscar primero lamparte clasificada, original de la lista de valores y, no se encuentra ninguna correspondencia, una segunda búsqueda binaria emplea la lista permutaciones para buscar entre los nuevos valores. Otros medios pueden ser empleados para evitar una búsqueda por otra parte innecesaria de la lista de nuevos valores agregados. Estos medios incluyen, sin limitarse a ellos, los siguientes: (1) la lista de valores clasificados originales junto con cualquier valor de tabla de casos para fraccionamiento V/o puede ser reorganizada en el fondo o durante la noche para mantener la lista de nuevos valores agregados más corta posible; (2) un marcador de bitios integrado en la lista de valores o lista de desplazamientos asociada o autónomo identifica cuando nuevos valores han sido agregados o no han sido agregados entre un antiguo valor dado y un antiguo valor contiguo para evitar una búsqueda innecesaria de la lista de nuevos valores agregados cuando no se encuentra valores nuevos dentro de este rango; (3) un mecanismo de puntero, posiblemente asociado con una función de reagrupamiento existente con una función de reagrupamiento empleada expresamente para este propósito estrecha el rango de la lista de nuevos valores agregados que debe ser buscada. La rutina insert__vov es empleada por las rutinas "insertar nuevos registros" y "actualizar registro existente". El paso VOV1 obtiene, a partir de los descriptores de columna para la columna C, h_val, el número de espacio de VALS2 más alto ya empleado en la columna DC, y h_ptr, el número de fila de tabla de casos más alto ya empleado. En el paso VOV2, h_val y h_ptr son incrementados para apuntar hacia los primeros espacios vacíos disponibles en la columna C de VALS2 y la tabla de casos, respectivamente, si existen tales espacios vacíos. El paso VOV25 determina si h val se encuentra dentro del rango y si no se encuentra dentro del rango, el paso V0V26 asigna especio adicional, para uno o varios espacios adicionales en la columna C de VALS2, DISP y DELS. El paso V0V27 determina después si h_ptr se encuentra dentro del rango y, si no se encuentra dentro del rango, el paso V0V28 asigna espacio adicional, para uno o varios espacios adicionales en la columna C de INST. En el paso V0V3, el espacio VALS2 es llenado con el nuevo valor (de tal manera que h_val otra vez "indique el número de espacio usado más alto) ; es decir, VALS2 [h_val, C] se establece en un nuevo valor. En el paso V0V4, la posición de orden de clasificación apropiada del nuevo valor se encuentra dentro del conjunto de nuevos valores agregados, y el valor h_val es insertado en esta posición en la lista de permutaciones. En el paso VOV5, se actualizan las estructuras DISP y DELS; DISP [h_val, C] se establece en h_ptr, y DELS [h_val, C] se establece en 1, puesto que el hecho de incrementar h_ptr por 1 de hecho ha asignado espacio para un registro, que todavía no es todavía un registro "vivo", y es por consiguiente parte del conjunto de DELS. Finalmente, en el paso VOV6, fila V que es igual a la posición de clasificación del nuevo valor, se cambia a h_val para una inclusión apropiada en el objeto cadenaVO empleado en la rutina que llama insert_vov() (específicamente, cadenaV [prev(C)] debe apuntar hacia la ubicación actual del nuevo valor, es decir, h_val. La figura 18 es un diagrama de flujo de insert_c (cadenaVO VO, columna C) . Esta rutina revisa si existe un caso borrado del valor de columna C Especificado por VO, y si no es el caso migra un caso borrado a partir del valor más cercano que tiene 1. El número de fila del primer caso borrado del valor es después almacenado en VO. cadenaO (ya sea como compensación o número de fila, según el fraccionamiento V/O) . El paso IC1 establece V en el número de fila de VALS2 en la columna C para el valor cuyo primer caso borrado debe ser escrito en VO. cadenaO [prev(C)) (es decir V VO.cadenaV(prev (C) ) . El paso IC2 determina si este valor tiene un caso borrado (es decir, si DELS [V, C]>0, o bien por conteo directo de celdas marcadas en las modalidades en las cuales las celdas marcadas son marcadas por un marcador. Si este valor no tiene casos borrados, se efectúa el paso IC3, que efectúa una búsqueda iterativa para el valor más cercano con un aso borrado (similar a la búsqueda efectuada en "insert_v()" arriba) para determinar si existe un aso borrado para cualquier valor. Si no se encuentra ningún caso borrado, el paso IC4 asigna espacio adicional, para uno o varios espacios adicionales, en la columna C de INST, y ajusta las estructuras de datos según lo requerido para indicar que los espacios adicionales están libres (es decir, casos borrados) . El paso IC5 efectúa después una aplicación iterativa de yo_desplazo_espacio_lista ascendente () o bien yo_desplazo_espacio_lista descendente () hasta que el valor en la fila V de VALS2 tenga un caso borrado. El paso IC6, que es efectuado también directamente después del paso IC2 si el número V de fila de tabla de valores ya tiene un caso borrado propio, establece J en un número de fila en la columna C de la tabla de casos que es asociado con el número V de fila de tabla de valores. Si la columna C de DISP existe, J = [V, C] es un caso de este tipo. Si DISP no tiene columna C, J = V es un caso de este tipo. El paso IC7 encuentra después el primer caso borrado K, que se encuentra en uno más el número de fila devuelto por top_undel (C, J) (es decir, K = top_undel (C, J)+l). El paso IC8 prueba después si la columna previa, prev(C), es un fraccionamiento V/O. Si no es el caso, el paso IC9 establece VO. cadenaO [ (prev (C) ) ] a K. De otra forma, el paso ICIO establece VO. cadenaO [(prev(C))] en K - DISP [V , C]-X en donde V = V y X = 0 si DISP se encuentra en formato de "primer número de fila" o bien V = V-l, y X = 1 si DISP se encuentra en formato "último número de fila". En cualquier caso, el procesamiento es después completo. Borrado de registro El borrado de registro se efectúa en esta modalidad mediante la identificación de celdas de tabla de punteros del registro y mediante su marcado como borradas en la columna DELS cuando existe, o bien mediante un marcador de cruz. Dicho espacio libre es después disponible para su uso cuando se cambian datos en registros existentes o bien cuando se agregan registros nuevos, . En columnas no ordenadas que son "adjuntas" de conformidad con lo descrito arriba, el estado de borrado de una celda en la columna adjunta es idéntico al estado de la celda a la cual se adjunta. La remoción de un registro se ilustra en la figura 19. En el paso DRl, el registro a borrar (el registro que contiene la celda [RO. CO] ) se carga en el objeto VO de cadenaVO. Si la cadena de puntero que empieza a partir de [RO, CO] no forma un bucle cerrado, se plantea una excepción terminando el procesamiento. El paso DR2 determina si el registro tiene v celdas borradas (por ejemplo, mediante una prueba repetida o bien si top_undel() regresa un número de fila menor que el número de fila de celda) , puesto que solamente un registro vivo puede ser borrado. Si el registro contiene una celda borrada, el paso DR3 reporta un error y el procesamiento termina. Si no se borran celdas en el registro, se efectúa el paso DR4 que inicializa la columna actual C, en la columna CO y la columna actual R, en RO. El paso DR5 borra después la celda actual [R, C] y establece R en el número de fila siguiente (C) a través de una llamada para una "celda de borrar punteros (S) [R, C]" como se describió arriba. El paso DR6 establece después C en la siguiente columna a través de una llamada a siguiente (C) . Si la columna actual no es igual a la columna de inicio (C no es igual a CO) el paso DR7 regresa al paso DR5; de otra forma el paso DR7 termina el procesamiento . Por ejemplo, si el registro "cinco" es borrado en el ejemplo arriba, todas las celdas en INST (y posiblemente OCCUR) que pertenecen a este registro serán marcadas como "borrado" (por cruces para columnas que no tienen DISP/DELS, y por la columna DELS si existe) . En el ejemplo arriba, la tabla DELS tendrá la siguiente apariencia (si el registro "cinco" es el único registro que ha sido borrado) : BORRAR Fila # INGLÉS ESPAÑOL ALEMN TIPO PARIDAD 1 0 0 2 0 1 3 1 4 0 5 6 Un conteo de registro, por ejemplo, con un TIPO = "prima" se obtiene ahora a partir de la columna TIPO de DISP como 6 - 3 (diferencia de la entrada de fila 4 y entrada de fila 3) , lo que indica que existen tres registros de este tipo; sin embargo, la estructura BORRAR indica que uno de estos registros se encuentra borrado, por consiguiente el total real es 6 - 3 - 1 = 2. El número de registros con PARIDAD = "impar" se obtiene de manera similar. DISP muestra el valor 4 en la fila 2 de la columna PARIDAD. Por consiguiente, las filas 4 a 6 (última fila) de INST se asocian con "impar", tres registros en total. Otra vez, existe un "1" en la columna de PARIDAD BORRA fila 2, de manera que el número de registros no borrados con PARIDAD = "impar"es 3-1=2'. Inserción de registro La inserción de un nuevo registro se ilustra en la figura 20. El paso IR1 obtiene los valores para los campos de nuevos registros (por ejemplo, a partir de un usuario) y los almacena en la memoria intermedia temporal. Un objeto VO de CADENA VO es también asignado para construcción e inserción de registro. Los campos pertenecen a una columna "adjunta" de conformidad con lo descrito arriba, son tratados esencialmente como sufijos para los valores en la columna a la cual están unidos. El paso IR2 establece la columna actual C en la primera columna. El paso IR3 busca después la tabla de valores, VALS2, para el valor V, especificado como el valor de columna C del nuevo registro y regresa la posición clasificada, V, del valor y si el valor ya existe. Obsérvese bien que cuando prev (C) es fraccionado V/O, la búsqueda en VLAS" se efectúa en dos partes; primer, la lista de valores clasificada original es buscada y después, si no se encuentra ninguna correspondencia, la lista adjunta de valore agregados es buscada a través de la lista de permutaciones (de conformidad con lo descrito arriba) . El paso IR4 prueba si el valor ya existe. Si es el caso, el paso IR8 es ejecutado, de otra forma, se ejecuta el paso IR5. El paso IR5 determina si la columna de su base es fraccionada V/O (en dicho caso, los descriptores de columna para prever (C) de la tabla de casos indicarían un fraccionamiento V/O) . Si es fraccionado V/O, el paso IR7 se efectúa, el cual inserta el nuevo valor VALS2, DISP, y DELS a través de una llamada a insert_vov(V,C, * nuevo valor) si no es fraccionado V/O, se efectúa el paso IR6 que inserta el nuevo valor en VALS2, DISP, y DELS a través de una llamada a insert_V(V, C, *nuevo valor). En cualquier caso, el paso IR8 construye después una cadenaV en el objeto VO estableciendo VO.cadenaVfprev (C) ] =V, en donde V es o bien la posición clasificada encontrada en el paso IT3 (si la columna prev(C)) no es fraccionada V/O) o bien h_val encontrado en "insert_vov ( ) " (si la columna prev(C) de la tabla de casos es fraccionada V/O. El paso IR9 determina si el valor en la firma V de VALS2 contiene casos borrados (mediante la revisión de la columna de tabla DELS si existe, de otra forma mediante el conteo de cruces) . Si no es el caso, se efectúa IR10, que proporciona un caso borrado para el valor a través de una llamada a insert c(VO,C) (actualizando VO. cadenaO [prev (C) ] en el proceso. Si existe ya un caso borrado, se efectúa la ramificación empezando con el paso IR11. En el paso IR11, el número de filas, K, en la tabla de casos del primer caso borrado se encuentra a través de una llamada a to_undel (C, J) +1, en donde J representa el número de filas, en la columna C de la tabla de caso, de un caso de número de valor V. Particularmente, si la columna C de DISP existe, entonces J= DISP [V, C] es un caso de este tipo. En ausencia de la columna C de DISP, J= Ves un caso de este tipo. El paso IR12 determina después si la columna prev(c) de la tabla de casos es fraccionada V/O. Si prev(C) es accionada V/O entonces el paso IR13 establece mezcla VO. También cadenaO [prev (C) ] en el número de ocurrencias apropiado, es decir, K-DISP [V , C] -X, donde V'= V y X= 0 sin DISP se encuentra en el formato de "primer número de fila", o bien V = V-l y X= 1 sin DISP se encuentra en el formato "último número de fila" formato) . Si prev(C) no es reaccionable V/O o, el paso IR14 carga el número de filas del caso borrado, K, en VO. cadenaO [prev©] . En cualquier caso, el paso IR15 deduce después del caso borrado de la cuenta de borrado de la fila v de VALS2. El paso IR16 pasa después a la siguiente columna, estableciendo C en siguiente (C) . El paso IR17 determina después si todas las columnas han sido procesadas (es decir, si C es igual a la columna 0), y si no es el caso, regresa al paso IR13. De otra forma, el paso IR18 escribe el objeto VO entero de nuevo en la tabla de casos (a través de una llamada a poner_cadena (0 V, O, fcuenta) en donde fcuenta es el número de campos en el registro y el procesamiento termina. Actualización de registros La actualización de un registro existente se ilustra en la figura 21. En el paso El el usuario selecciona un registro a actualizar y, en el paso E2 en el registro descargado en un objeto VO de cadenaVO y en una memoria temporal. Cualquier celda del registro puede ser seleccionada como punto inicial para cargar VO. En el paso E3, el usuario cambia opcionalmente cualesquiera o la totalidad de los valores de v campo (al menos que pertenezca a .condiciones de solo lectura) en la memoria intermedia temporal. El paso E4 inicializa la "columna actual", C, para que inicie en la primera columna, columna 0. El paso E5 determina si el usuario cambia el valor en el campo/columna C. Si el usuario no ha cambiado el valor, no se requiere de ningún procesamiento en esta columna, y se efectúa el paso E20 que avanza C hacia la siguiente columna, estableciendo C en siguiente (C) . Si el valor de columna (C) ha cambiado, al paso de E6 es efectuado, el cual borra el caso previamente vivo del antiguo valor de registro, a través de una llamada a "celda de borrar puntero (s) [R, C]", descrita arriba. El paso de E7 busca después en la tabla de valores empleando por ejemplo, una búsqueda binaria) el valor especificado como el nuevo valor de columnas C de registro y regresa la posición clasificada del valor, que se ha correspondido o no. Cuando prev(C) es fraccionado V/O, la búsqueda de la tabla de valores se efectúa en dos partes; primero, la lista de valores clasificada, original es buscada y después, si no se encuentra ninguna correspondencia, se busca la lista anexa de valores agregados a través de la lista de permutación (de conformidad con lo descrito arriba) . El paso E8 prueba si el nuevo valor ya estaba en VALS2. Si ya estaba en VALS2, la ramificación que empieza con el paso E12 es efectuado, de otra forma, se efectúa la ramificación que empieza con el paso E9. El paso E9 determina si la columna prev(C) es fraccionada V/O. Si es fraccionada V/O el paso Eli inserta el nuevo valor en VALS2, DISP, y DELS a través de una llamada insert_vov(V, C, *nuevo valor); de otra forma, el paso E10 inserta el nuevo valor a través de una llamada a insert_V(V, C, *nuevo valor) el paso E12 construye la cadena v del nuevo registro, un elemento en cada pasada, estableciendo mezcla VO.cadenav[prev(C) ] =V, en donde mezcla es y ya sea la posición de clasificación encontrada en el paso de E7, si la columna prev(C) no es fraccionada V/O, o bien h_val 'encontrado en "insert_vov() ", si la columna prev(c) es fraccionada V/O. El paso E13 determina si el valor en la firma V tiene casos borrados buscando en la tabla DELS o bien contando las cruces DELS no tiene columna correspondiente. Si el valor no tiene casos detectados, la ramificación que empieza en el paso E14 es efectuado. El paso E14 proporciona un caso detectado para el valor, a través de una llamada a insert_c (VO, C) , y actualiza VO. cadenaO [prev (C) ] en el proceso. De otra forma, la ramificación que empieza en el paso E15 se efectúa. El paso E15 encuentra el número de fila, K, en la columna C del primer caso borrado de número de valor V, es decir, K=top_undel (C, J) +1, donde J representa el número de fila en la columna C de la tabla de casos, de un caso de número de valor V. Particularmente, si la columna de C de DISP existe, entonces J= DISP[V,C]es un caso de este tipo; de otra forma, el paso de E16 prueba si la columna prev(c) es fraccionada V/O. Si es fraccionada V/O entonces se efectúa el paso E18, que establece K en el número de ocurrencia; es decir, K=K-Disp [V , C] -X, en donde V'= V y X = Oy DISP se encuentra en el formato de "primer número de filas" o bien V =V-1 y X = 1 si DISP se encuentra en el formato "último número de fila". De cualquier manera, se efectúa después el paso E17, que carga los datos apropiados en VO. Cadena O; es decir VO. cadenaO [prev (C) ] =K. el paso E19 remueve después el caso borrado de la cuenta de borrado. El paso E20 cambia después C hacia la siguiente columna (C=siguiente (C) ) . El paso E21 prueba si todas las columnas han sido procesadas; es decir, si C=0 que fue la columna inicial, la ejecución regresa al paso E5 y repite con el nuevo valor C. de otra forma el paso E22 escribe el objeto entero VO de regreso en la tabla de casos a través de una llamada a _cadena(0, VO, Fcuenta) y el procesamiento termina. Peticiones Puesto que las columnas en el sistema de datos de la presente invención penden ser clasificadas independientemente, las peticiones pueden ser efectuadas muy rápidamente. No se puede emplear cualquier algoritmo de búsqueda estándar eficiente. Por ejemplo, una búsqueda binaria simple proporciona un desempeño de tiempo de peor caso de C log2 n, y un desempeño promedio de c log2 (n/2) . Otras técnicas de búsqueda pueden también emplearse, con la mejor técnica siendo independiente de la situación especifica y de las características especificas de los datos. La paralelización puede ser implementada sobre cualesquiera de una búsqueda de punto medio binario o interpolación. Tales técnicas de paralelización de algoritmos de búsqueda se conocen en la técnica. Una paralelización adicional puede ser obtenida mediante el agrupamiento de filas de elementos de datos clasificados a partir de cada columna en tamaño de n recipientes en donde n es igual y ya sea al número de procesadores o bien a un múltiple integral del mismo. El sistema rastrea los puntos limites superior inferior de estos recipientes, removiendo la necesidad de clasificar los datos dentro de ellos. Cuando n es igual al número de procesadores, recipientes enteros pueden ser buscados o manipulados con la misma eficiencia si las únicas son operadas en entornos de procesador único mientras que los desplazamientos dentro de estos recipientes no tienen consecuencias. Como ejemplo, en la figura 22 se ilustra un diagrama de flujo - para una petición para todos los registros que tienen un valor seleccionado para un campo dado. En el paso 221, para un campo particular es buscada para los valores que corresponden al valor seleccionado, N. Otra vez, puesto que las columnas se encuentran generalmente en orden clasificado, se puede emplear una búsqueda binaria (así como otras técnicas de búsqueda) . El paso de 222 prueba si se encontró un valor correspondiente. Si no se encontró un valor correspondiente, se reporta en el paso 223. Si se encuentra un valor correspondiente, en la tabla_ de_valores (r,c) los pasos 224 y 225 son efectuados que determinan la fila en la tabla de valores con valores correspondientes (paso 222) y reconstruyen los registros asociados con estas filas (paso 225) . Para una columna no condensada, el registro asociado con la celda con el valor correspondiente es reconstruido de conformidad con lo comentado arriba; después se revisan filas contiguas (r+1, r+2, ..., r-1, r-2, ...) para valores correspondientes y si se encuentran valores correspondientes adicionales, se reconstruyen también los registros asociados con estas celdas. La búsqueda de filas contiguas puede detenerse en cualquier dirección cuando se encuentra un valor que no corresponde . Para un valor condensado, en los rangos de números de fila de tabla de casos que apunta hacia el valor correspondiente se obtiene a partir de la tabla de desplazamientos. Otra vez, cuando el valor correspondiente fue encontrado en Tabla_de_valores (r,c) el contenido de la tabla de Tabla_de_desplazamientos (r,c), si se encuentra el en formato de "primer número de fila", es el principio del rango y Tabla_de_desplazamiento (r+l,c)-l, es el final del rango (a menos que r sea la última fila en la tabla de desplazamientos, en dicho caso el final del rango es la última fila en la tabla de casos para la columna) . El paso 225 reconstruye después, de conformidad con lo descrito arriba, los registros que contienen las células identificadas en la tabla de casos. Peticiones más complicadas, como por ejerr.plo (CAMPO_X = M) . AND. (CAMPO_Y = N) , (CAMPO_X = M) . OR. (CAMPO_Y = N) , y son etc. son también implementadas de manera eficiente empleando las estructuras de datos descritas aquí. Por ejemplo, una petición AND puede ser implementada encontrando (como arriba) todos los registros que corresponden a CAMP0_x = M, probando después una segunda condición, por ejemplo, CAMP0_Y = M, durante la reconstrucción de registro. Una ventaja significativa de la presente invención es que la petición de condición ADN puede ser efectuada con menos pasos puesto que en el caso de columnas condensadas, el número de filas que cumplen cada una de las condiciones que ya se conoce a partir de la tabla de desplazamientos. Una primera condición a aplicar puede después ser seleccionada para que sea la condición con el menor número de correspondencia. En contraste, maquinas de base de datos existentes típicamente deben efectuar ciclos de "análisis" periódicamente con el objeto de tener solamente una idea aproximada de la cardinalidad encontrada en cada columna. Con las modalidades de la presente invención descritas arriba, las cardinalidades se conocen de antemano para cada valor. Una petición OR puede ser implementada, por ejemplo, encontrando todos los registros que corresponden a la primera condición y después encontrando todos los registros que corresponden a la segunda condición que no correspondían todavía a la primera condición. Si se sabe de antemano que una decisión arbitrariamente compleja es una petición frecuente, se puede incluir una columna clasificada para esta expresión en las tablas de valores, desplazamientos y casos exactamente como en el caso de un campo ordinario, y se puede aplicar el mismo método de búsqueda binaria rápida.
Estructura de datos que corresponden a las comentadas arriba pueden ser inicializadas con los resultados de una petición, facilitando así peticiones secundarias. Funciones SQL Muchas funciones SQL pueden soportadas por las estructuras de datos de conformidad con la presente invención con una cantidad trivial de esfuerzo de computo. Por ejemplo, la función CONTAR que devuelve el número de registros que tienen un valor específico para un atributo dado, se encuentra disponible en tiempo constante mediante el acceso a las entradas para este valor y el valor adyacente en la tabla de desplazamientos. Las funciones MAX y MIN, que encuentran los registros con los valores máximo y mínimo para un atributo dado, pueden ser implementadas mediante el acceso a las células superior e inferior, respectivamente, en la columna dada. La función MEDIANA, que define el registro con el valor mediano para un atributo dado puede ser implementada mediante la búsqueda de la ubicación de la tabla de desplazamientos más cercana a la mitad de la cuenta de registro y devolviendo el valor asociado. La función MODO, que encuentra el valor con el número mayor de ocurrentes, puede ser implementada por una búsqueda lineal para la diferencia mayor en valores adyacentes de tabla de desplazamiento, y empleando el valor correspondiente. Estas funciones (que se conocen como funciones de agregación) son eficientes puesto que la tabla de desplazamiento es directamente relacionada con el histograma de cuentas de valores dentro de la columna. Las operaciones INSERTAR, BORRAR y ACTUALIZAR son soportadas como se muestra, por ejemplo, en las modalidades de estas operaciones descritas arriba. La presente invención soporta también otros tipos de peticiones SQL. Por ejemplo, supongamos que existen dos tablas marcadas entre "PLANTA" y "EMPLEADOS" cuyos varios atributos se presentan a continuación: PLANTA: NOMBRE_DE_PLANTA NÚMERO_DE_PLANTA I D_DE_GERENTE etc . . .
EMPLEADO : v NOMBRE_DE_EMPLEADO ID_DE_EMPLEADO TRABAJO DIRECCIÓN etc...
Una petición, por ejemplo, en el sentido de encontrar el nombre de cada gerente de cada planta se expresa en SQL de la siguiente manera: SELECCIONAR NOMBRE_DE_EMPLEADO DE , PLANTA, EMPLEADO DONDE ID_DE_GERENTE = ID_DE_EMPLEADO Si las representaciones para las dos tablas no están acopladas, es decir, si cada una tiene tablas separadas de valores, casos, desplazamientos y ocurrencias, bucles anidados simples pueden empelarse para probar la igualdad -. entre valores en la columna ID_DE_GERENTE de la base de datos de planta y la columna ID_DE_EMPLEADO de la base de datos EMPLEADO y, para cada correspondencia, se puede encontrar el N?MBRE_DE_EMPLEADO correspondiente en la base de datos de EMPLEADO . Si las tablas de casos, desplazamientos, y ocurrencias de las bases de datos de EMPLEADO y planta apuntan hacia la misma tabla de valores con una columna única ID_DE_GERENTE/ID_DE_EMPLEADO, entonces, para cada tabla de desplazamientos que tiene una entrada para una columna particular tanto para EMPLEADO como para PLANTA, el NOMBRE_DE_EMPLEADO en la tabla de EMPLEADO puede encontrarse. Uniones Una operación de unión combina dos o más tablas para crear una tabla unida única. Por ejemplo, dos tablas pueden tener cada una información en cuanto EMPLEADOS y una unión puede efectuarse para determinar toda la información en ambas tablas en cuento a cada EMPLEADO. Con el objeto de efectuar una unión, tablas son típicamente unidas a través de una clave primaria o candidata en una de las tablas. La clave primaria o candidata es un atributo o combinación de atributos que son únicos. Una representación redundante de este mismo atributo o combinación de atributos, que se conoce como clave foránea, se encuentra en una o varias otras tablas. Las claves foráneas no tienen que tener la misma cardinalidad que la clave primaria o clave candidata y no tienen que ser únicas.
Una operación de unión se define como el subconjunto de un producto cartesiano extendido de dos o más tablas. Un producto cartesiano de dos tablas basadas en registro combina cada fila de la primera tabla con cada fila de la segunda tabla. Por ejemplo, si la primera tabla tiene M filas y N columnas y la segunda tabla tiene P filas y Q columnas, la producción cartesiana tendrá MxP filas y N+Q columnas. Un producto cartesiano extendido es un producto cartesiano que resulta de la inserción de valores nulos en una o varias de las tablas originales. Una función de membresía define el subconjunto del producto cartesiano extendido de dos o más tablas que se encuentran en el conjunto de respuesta de unión (es decir, la salida de la operación de la unión) . La función de membresía contiene una condición de comparación y un criterio de unión que determinan conjuntamente un tipo de unión particular, que junto con los selectores de columna determinan el conjunto de respuestas devuelto por la unión. La condición de comparación especifica una operador lógico. Es decir, por ejemplo lo que aparece e tre los nombres de atributo en la cláusula "donde" de una declaración de SELECCIONAR SQL. La condición de comparación más común es la igualdad y la unión correspondiente se conoce como una equi-unión. Otras condiciones tales como mayor que o menor que son también posibles.
El criterio de unión específica el conjunto de respuestas de una unión, dada una condición de comparación, atributos de unión específicos y selectores de columna. Para conveniencia, equi-uniones en un atributo único en cada tabla se consideran en la discusión siguiente. Los criterios de unión incluyen unión interna (el conjunto de respuesta de unión consiste de las filas que aparecen en ambas tablas) , unión externa (subdividida a su vez en unión externa izquierda, unión externa derecha y unión externa total - el conjunto de respuesta de unión consiste de todas las filas en la tabla izquierda, de derecha o en ambas tablas juntas con las filas correspondientes de otras tablas en donde existen, nulo de otra forma) , unión (el conjunto de respuesta de unión consiste de las filas que aparecen solamente en una de las dos tablas, con los valores restantes en estas filas siendo nulos), y unión cruzada (el conjunto de respuesta de unión consiste del producto cartesiano no extendido total de las dos tablas) . Los selectores de columna especifican qué columnas son devueltas en el conjunto de respuestas de la unión. En sistemas de base de datos de la técnica anterior, las uniones tienden a ser extremadamente costosas en cuanto a espacio de almacenamiento y/o tiempo de procesamiento requiriendo ya sea datos pre-indexados para mantener la clasificación o bien una búsqueda que requiere de mucho tiempo involucrando varios pasajes en la totalidad de cada atributo unido. En el último caso, el tiempo para efectuar una unión de dos columnas es proporcional al cuadrado del número de filas, una unión de tres columnas es proporcional al cubo, etc., para tablas de cardinalidad igual y es igual a N veces las cuantas de registro de otra forma. La presente invención elimina en gran medida la carga generada asociada con las uniones. Todos los atributos pueden ser clasificados, y columnas de unión pueden eliminar la necesidad de mantener copias redundantes de datos. Se pueden implementar funciones de membresía de manera eficiente a través de la tabla de desplazamientos, varias tablas de desplazamientos alternativas, mapas de bitios, y/o funciones lógicas de valor n. Tablas de desplazamiento alternativas Ciertas propiedades de la columna de unión llevan a varias modificaciones a las columnas de tablas de desplazamiento, que son particularmente útiles para efectuar uniones. La estructura del desplazamiento "completo" tiene, para cada columna filas que se encuentran en una correspondencia de uno a uno con las filas de la columna correspondiente de la tabla de valores "condensadas". -El contenido de una celda de la tabla de desplazamiento entera, en una modalidad, es el número de filas en el primer caso (o bien último, según la modalidad) en la tabla de casos de todos los casos que poseen el valor correspondiente en la tabla de valores. Si un valor en la tabla de valores no tiene casos, entradas idénticas en la tabla de desplazamientos en las celdas correspondiente y siguiente (alternativamente, previas) indicaran esto. Por consiguiente, existen muchos más valores sin casos que valores con casos (se conoce a continuación como caso "disperso") , existen mucho más valores repetidos que valores diferentes en la estructura de desplazamientos, lo que lleva a una redundancia en la tabla de desplazamientos. En la tabla de desplazamientos completa, en una modalidad las entradas se encuentran en orden clasificado, de tal manera que para el número J de filas en la tabla de casos, la fila correspondiente número V en la tabla de valores es el número para el cual DISP [V, I] < = J < DISP [V+l, I] (para una columna de desplazamientos en el formato "primer número de filas") o bien "para el formato "último número de filas") DISP [V-l, I] < = J < DISP [V, I] . En un caso "dispersos" un formato alternativo para columna (s) de tabla de desplazamientos (se conoce a continuación como formato de desplazamiento "condensado") , puede emplearse para remover la redundancia. En este formato, las entradas de tablas de desplazamientos tienen dos partes: 1) DV, el número de filas en la tablas de valores de un valor que tiene casos, y 2) DD, el número de fila inicial (alternativamente, final) en la tabla de casos de los casos actuales del valor. Las entradas de número de fila DD se encuentran en orden clasificado; DV se encontrara también naturalmente en orden clasificado cuando la tabla de valores subyacentes se encuentra en orden clasificado. Para el número de fila J en la columna Y de la tabla de casos, el siguiente número de fila V en la tabla de valores se encuentra de la siguiente manera: 1) encontrar K, a través por ejemplo, de una búsqueda binaria, de tal manera que DD[K] < = J < DD [K+l] (en el caso de un formato de "primer número de fila") o bien (en el caso de un formato "último número de fila") DD [K-l] < J < = DD [K] ; 2) V = DV [K] Una columna de desplazamientos condensada, en caso apropiado, guarda simultáneamente espacio de almacenamiento y acelera la búsqueda binaria. Sin embargo, la prueba para la presencia de casos de un valor dado es una búsqueda que requiere de tiempo empleando una columna de desplazamientos completa, pero una búsqueda binaria de tiempo lookup empleando una columna de desplazamiento condensada. En el caso el cual valores sin casos son raros, un formato alternativo adicional de la tabla de desplazamientos (se conoce a . continuación como formato "denso") permite encontrara rápidamente todos los valores faltantes. En este formato alternativo, entradas en tablas de desplazamientos tiene un marcador de bitios para identificar valores sin casos, y, en el caso de que estos valores sin casos, el contenido de la entrada es un puntero hacia el siguiente valor sin casos. (la lista de desplazamientos definida originalmente, que no tiene la lista enlazada de valores faltantes, se conoce a continuación como formato "entero") . Ejemplos de tablas de desplazamientos de tablas alternativas Columnas de desplazamientos dispersas y densas se ilustran a continuación para tablas Jm?d y SPJmod de tipo de registro, de la técnica anterior (proviene de C.J. Date, Introduction to Datábase Systems (Introducción a Sistemas de Base de Datos) , sexta edición, forro de carátula (1995)): Jmod' Rec # J# JNOMBRE CIUDAD 0000 Jl Clasificador París 0001 J3 OCR Atenas 0002 J4 Consola Atenas 0003 J5 RAID Londres 0004 J6 EDS Oslo SPJmod Rec# S# P# J# CANTIDAD 0000 S2 P3 J2 200 0001 S2 P3 J5 600 0002 S2 P5 J2 100 0003 S3 P4 J2 500 0004 S5 P2 J2 200 0005 S5 P5 J5 500 0006 S5 P6 J2 200 Tablas de valores, desplazamientos, casos y ocurrencias para Jmod y SPJmod son de conformidad con lo siguiente: <Jmod • VALS: Fila # J# JNOMBRE CIUDAD 0000: Jl Consola Atenas 0001: J3 EDS Londres 0002: J4 OCR Oslo 0003: J5 RAID París 0004: J6 Clasificador DISP: Fila # J# JNOMBRE CIUDAD 0000 0 0 0 0001 1 1 2 0002 2 2 3 0003 3 3 4 0004 4 4 Tabla combinada de caso/ocurrencia: Fila # J# JNOMBRE CIUDAD 0000 4/0 0/1 1/0 0001 2/0 2/0 2/0 0002 0/0 0/0 3/0 0003 3/0 1/0 4/0 • 0004 1/0 3/0 0/0 ir Jmod • VALS: Fila # S# P# J# CANTIDAD 0000 S2 P2 J2 100 0001 S3 P3 J5 200 0003 P5 600 0004 P6 0005 v 0006 DISP: Fila # S# P# J# CANTDAD 0000 0 0 0 0 f 0001 3 1 5 1 0002 4 3 4 0003 4 6 ' 0004 6 0005 0006 Tabla de casos de ocurrencias ¡ í Fila # S# P# J# CANTIDAD 0000 1/0 0/2 0/0 0/2 0001 1/1 0/1 1/0 0/0 0002 3/0 1/1 1/1 2/0 0003 2/0 0/4 1/2 2/2 0004 0/0 0/0 2/0 1/0 0005 3/1 1/0 2/1 2/1 0006 4/0 0/3 3/0 0/1 Para facilitar una unión rápida de peticiones, por ejemplo, en el atributo J# de tablas Jmod, y SPJmod, se crea una columna de unión para J# y así como con columnas de tabla de desplazamiento esparcido y denso que corresponden a la columna de unión se incorporan en las tablas de desplazamiento para Jm?d y SPJmod- En la columna unión J# para v Jmod y SPJmod és la siguiente: J# Unión para Jm?d y SPJmod: Fila # J# 0000 Jl 0001 J2 0002 J3 0003 J4 0004 J5 0005 J6 0006 J7 El tipo apropiado de columna de desplazamiento para cada uno de Jmod y SPJmod se determina comparando la cardinalidad de la columna de unión con las cardinalidades de las columnas correspondientes de las tablas Jm?d y SPJm?d- La cardinalidad de columna de unión J# arriba es 7. La cardinalidad para la columna J# en la tabla Jm?d es 5. Puesto que casi todos los valores en la columna de unión aparecen también en la tabla de Jmod/ se construye una columna de desplazamiento densa para este atributo. Para la SPJm?d la cardinalidad de su columna J#, 2, es comparada con la cardinalidad de la columna de unión 7. Puesto que los valores J# son "dispersos" en este caso, una columna de desplazamiento dispersos para la columna de SPJmod es construido. La columna de unión J# la columna de desplazamiento para Jm?d y la columna de desplazamiento SPJm0d aparecen a continuación todos en una tabla para propósitos de ilustración: Columnas de unión y desplazamiento: Fila # Unión J# Columna D Columna D <Jmod SPJmod 0000 Jl 0 1/0 0001 J2 *6 4/5 0002 J3 1 0003 J4 2 0004 J5 3 0005 J6 4 00006 J7 *1 En la columna de tratamientos densos para Jmoc los asteriscos son marcadores de bitios, indicando (1) que JmCd no tiene un registro con el valor correspondiente y, (2) el valor que sigue es un puntero hacia el siguiente valor en la columna de unión que no aparece en Jm?d- Esos valores en la columna de unión que no aparecen en Jm?d son por consiguiente mantenidos en una lista enlazada circular. En la columna de desplazamientos esparcidos para SPJmod, las entradas están presentadas en el formato DV/DD en donde DV es un puntero hacia un valor en la columna de unión que tiene casos en la tabla SPJm?d y el puntero DD es el número de fila de inicio en la tabla de casos/ocurrencias SPJm?d de los casos del valor dado. Uniones de modelado empleando mapas de bitios La columna de unión J# para las tablas Jm?d y SPJm?d. Pueden también ser complementadas por mapas de bitios. El mapa de bitios indicará si un valor dado en la columna de unión se encuentra contenido en las tablas Jmod o SPJm-. Un procedimiento para crear dicha estructura se ilustra a continuación. El mapa de bitios en este ejemplo consiste de 7 entradas, 0000 a 00006, una para cada valor de J# presente en la columna de unión. Cada entrada es asociada con bitios. El primer bitio se establece en 1 si el valor correspondiente de J# se encuentra presente en la tabla Jm0dr 0 de otra de forma. De la misma manera, la segunda entrada se establece en uno si el valor J# se encuentra presente en la tabla SPJm?d y 0 de otra forma. Puesto que Jmod se encuentra representada por una columna de desplazamientos densos, sus entradas de bitios son inicializadas en "1" (puesto que casi la totalidad de los valores en la columna de unión están contenidos en Jm?d) • De la misma manera, puesto que SPJmod se encuentra representado por una columna de desplazamientos dispersos, sus entradas de bitios son inicializadas por "0" (puesto que pocos valores en la columna de unión están presentes en SPJmQd) • El mapa de bitios inicial es por consiguiente el siguiente: Mapa de bitios inicial: Fila # Jrod/ SPJmod 0000 1/0 0001 1/0 0002 1/0 0003 1/0 0004 1/0 0005 1/0 0006 1/0 El siguiente paso es la construcción del mapa de bitios final. Para la columna Jmod los valores no presentes en la columna de unión J# están contenidos en el anillo de los valores no presentes en su columna de desplazamientos densos. El anillo se encuentra atravesado y las entradas correspondientes en el mapa de bitios se establecen en "0".
Para corregir las entradas para la columna SPJm a los punteros de DV apuntan hacia los valores en la columna de unión que tienen entradas en las tablas SPJm?d y las entradas correspondientes en el mapa de bitios que establecen en "1". El mapa final de bitios es el siguiente: Mapa final de bitios: Fi la # Jmod/SPJpod 0000 1/ 0 0001 0/1 0002 1/0 0003 1/0 0004 1/1 0005 1/0 0006 0/0 Funciones lógicas de valor N pueden modelar operaciones conjuntas con funciones sobre mapas de bitios-. Esta técnica se ilustra en el ejemplo a continuación con referencia a tablas S, P, y J de la técnica ^anterior (de C. J. Date, Introduction to Datábase Systems, (Introducción a Sistemas de Base de datos), sexta edición, forro de cubierta (1995), : S: S# SAPELLIDO ESTADO CIUDAD 51 Smith 20 Londres 52 Jones 10 París S3 Blake 30 París S4 Clark 20 Londres S5 Adams 30 Atenas P: P# PNOMBRE COLOR PESO CIUDAD Pl tuerca rojo 12 Londres P2 perno verde 17 París P3 tornillo azul 17 Roma P4 tornillo rojo 14 Londres P5 leva azul 12 París P6 diente rojo 19 Londres J: J# JNOMBRE CIUDAD V Jl clasificador - París J2 visualización Roma J3 OCR Atenas J4 consola Atenas J5 RAID Londres J6 EDS Oslo J7 Cinta Londres En este ejemplo, se efectúa una unión en las columnas "CIUDAD" de las tablas S, P, y J. esto implica encontrar solamente los registros cuyo valor "CIUDAD" aparece en exactamente una de las tablas S, P, o bien J. El primer paso de la construcción de una columna de unión para las columnas CIUDAD de S, P y J, si no existe todavía.
El segundo paso es asociar con cada valor de la columna de unión tres bitios, que corresponden a las tablas S, P, y J, respectivamente. Un bitio es establecido en "Y" (es decir, "1") si el valor CIUDAD se encuentra presente en la tabla apropiada y en "N" (es decir, "0") de otra forma. Dicha tabla se presenta a continuación: Columna de unión y mapa de bitios: CIUDAD S P J Atenas Y N Y Londres Y Y Y Oslo N N Y París Y Y Y Roma N Y Y Para un valor particular del atributo CIUDAD, registros con este valor aparecen en la unión si y solamente si este valor de CIUDAD aparece exactamente en una de las tablas S, P, y J, es decir, exactamente uno de los bitios en el mapa de bitios para la columna de unión es igual a "Y". Una implementación ilustrativa de una función que encuentra dichas filas es la función f (temp, columna) que se describe abajo. El dominio de función consiste de dos variables "temp" y "columna". La variable "temp" puede ser cualesquiera de tres valores; "Y", ?N' VD' La variable "columna" es o bien N' Finalmente, el valor de retorno de la función f consiste también de los tres valores "Y", "N", o "D".
Para cada valor de CIUDAD en la columna de unión, la función f se aplica de manera iterativa a los valores de bitios en cada una de las tres columnas: la variable "columna" se establece en el valor de bitio de la columna actual, y a "temp" se asigna el resultado de la aplicación previa de la función f. Para la primera columna, S, "temp" es inicializado en "N" . Después de la iteración final, si el resultado es "Y", el valor aparece en la unión; si el resultado es "N" o "D", el valor no aparece. La función f se define de la siguiente manera: Temp columna valor de retorno N N N Y N Y D N D N N Y Y Y Y Y D D Y D La aplicación de esta función a la primera fila en la Tabla de Uniones, que corresponde al valor "Atenas", proporciona el siguiente resultado: f (f (f ?"N", "Y") , "N") , "Y") , que es igual a "D". Por consiguiente "Atenas", que aparece dos veces en la fila, no aparece en la unión. La aplicación de la función f a la fila para "Oslo" proporciona el siguiente resultado: f (f (f ("N", "N") , "N") , "Y") , que es igual a "Y". Por consiguiente, "Oslo", que aparece exactamente una vez en la fila, sí aparece en la unión. La figura 23 es un diagrama de flujo que ilustra una operación de unión. En el paso 231, el usuario recoge tablas a unir. En el paso 232, las tablas que todavía no están representadas en las estructuras de datos de la presente invención son convertidas en tales estructuras. Después, en el paso 233, columnas, eventualmente, sin seleccionadas cuyos valores son parte de la expresión lógica que define la unión como un subconjunto del producto cartesiano extendido. El paso 234 pruebas y columnas fueron seleccionadas. Si no se seleccionaron columnas, la unión corresponde al producto cartesiano completo no extendido y, la reconstrucción del registro prosigue a través del paso 238 sin limitaciones adicionales (es decir, cada registro de cada tabla es combinado con cada registro de cada tercer tabla) . De otra forma, se efectúa el paso 235 que prueba si más que una columna fue seleccionada. Si es el caso, estas columnas se combinan en una columna combinada (como por ejemplo en la descripción de "columnas combinadas" arriba) . Si la columna de unión de tablas de valores apropiada no existe todavía, el paso 237 la crea, junto con sus columnas de tablas de desplazamientos asociadas. El paso 238 modifica después los rangos en las rutinas que producen la salida de unión, empleando listas de desplazamientos densos y/o esparcidos, completas, mapas de bitios, funciones lógicas de valores múltiples o bien cualquier combinación de ellos, con el objeto de corresponder al tipo de unión, empleando la condición de comparación apropiado y el criterio de unión. Por ejemplo, el conjunto de respuestas de una unión interna es limitado a celdas de tablas de casos que corresponden a filas de tablas de desplazamientos en donde las tablas involucradas tienen rangos de registros no nulos. Esto puede ser determinado, por ejemplo, a partir de sus entradas en tablas de desplazamiento. Entradas de celdas de casos correspondientes derivadas de cada una de estas filas de tablas de desplazamientos (y posiblemente una de las filas adyacente, según la implementación) proporcionan los rangos de celdas de tablas de casos para cada tabla para todos los registros correspondientes. La respuesta establecida es, restringida solamente a estos registros, produciendo el conjunto de respuestas de unión interno apropiado. Los conjuntos de respuestas para otros tipos de uniones pueden ser determinados de manera similar, por ejemplo, a partir de la tabla de desplazamientos. La combinación con los métodos de investigación comentados arriba permite la implementación de un rango completo de declaraciones de tipo SQL's "SELECCIONAR .... DE .... DONDE Mientras la invención se ha mostrado y descrita particularmente con referencia a modalidades particulares ilustrativas de la misma, los expertos en la materia entenderá que varios cambios de forma y detalles se encuentran dentro del alcance de la invención, que se define en las reivindicaciones.

Claims (1)

  1. REIVINDICACIONES Una base de datos implementada por computadora, que comprende : a. uno o varios conjuntos de elementos de valores de datos, cada elemento de valor de dato tiene una posición en uno del conjunto o de los varios conjuntos de elementos de valores de datos y un valor de dato; b. por lo menos un primer conjunto y un segundo conjunto de elementos de caso, cada elemento de caso tiene una posición en su conjunto respectivo de elementos de caso y un valor de caso, y cada conjunto de elementos de caso corresponde a un atributo, c. en donde para un primer elemento de caso en el primer conjunto de elementos de caso (i) un primer elemento de valor de datos asociado en uno o varios conjuntos de elementos de valores de datos se deriva de la posición del primer elemento de caso, y (ii) un segundo elemento de caso único en el segundo conjunto de elementos de casos, cuya posición en el segundo conjunto de elementos de casos es diferente de la posición del primer elemento de casos en el primer conjunto de elementos de casos, se deriva del valor de caso del primer elemento de caso, y d. donde además (i) un segundo elemento de valor de datos asociado en el conjunto o en los varios conjuntos de elementos de valores de datos se asocian con el segundo elemento de casos y por lo menos otro elemento en el segundo conjunto de elementos de casos, y (ii) el primer elemento de caso puede ser derivado del segundo elemento de caso independientemente del valor del primer elemento de caso. La base de datos de la reivindicación 1, en donde el segundo elemento de caso es un elemento siguiente. La base de datos de conformidad con la reivindicación 1, en donde uno del conjunto o de les conjuntos de elementos de valores de datos es clasificado. « La base de datos de conformidad con la reivindicación 1, en donde uno del conjunto o de los varios conjuntos de elementos de valores de datos es condensado de tal manera que el conjunto comprenda valores de datos únicos . La base de datos de conformidad con la reivindicación 1, en donde uno del conjunto o de los conjuntos de valores de datos es condensado, de tal manera que el conjunto comprenda valores de datos únicos, y clasificado. La base de la reivindicación 1, en donde la totalidad de los elementos de valores de datos que tienen valores de datos iguales tienen posiciones contiguas en uno del conjunto o de los varios conjuntos de elementos de valores de datos . La base de datos de conformidad con la reivindicación 1 en donde uno del conjunto o de los varios conjuntos de elementos de valores de datos es un algoritmo que genera una secuencia de valores únicos, y para cada valor de dato en la secuencia, una posición del valor de dato en el conjunto de elementos de valores de datos se proporciona por la posición que el valor tuviera en la secuencia si todos los valores de datos fueran generados por el algoritmo. La base de datos de conformidad con la reivindicación 5 en donde el primer elemento de valor de dato asociado se encuentra en el conjunto condensado de •elementos de valores de datos y comprende además: conjunto de desplazamientos de elementos de desplazamientos asociados con el conjunto condensado de elementos de valores de datos, cada elemento en el conjunto de desplazamientos tiene una posición en el conjunto de desplazamientos y un valor de desplazamiento, en donde el primer elemento de valor de datos asociado es derivado además del conjunto de desplazamientos. 9. La base de datos de conformidad con la reivindicación 8 en donde cada elemento en el conjunto de desplazamientos tiene un elemento asociado único en el conjunto condensado de elementos de valores de datos derivados de su posición. 10. La base de datos de conformidad con la reivindicación 8 en donde cada elemento en el conjunto de desplazamientos es asociado con un rango de elementos en el primer conjunto de casos, cada elemento en el rango está asociado con el mismo elemento de valor de datos . 11. La base de datos de conformidad con la reivindicación 10 en donde el valor de desplazamiento de un elemento en el conjunto de desplazamientos especifica una primera posición en su rango asociado de posiciones. 12. La base de datos de conformidad con la reivindicación 10 en donde el valor de desplazamiento de un elemento en el conjunto de desplazamientos especifica una última posición en su rango asociado de posiciones. 13. La base de datos de conformidad con la reivindicación 10 en donde el valor de desplazamiento de un elemento en el conjunto de desplazamientos especifica el número de posiciones en su rango asociado de posiciones. 14. La base de datos de conformidad con la reivindicación 1 en donde el segundo elemento de valor de datos asociado se encuentra en un conjunto condensado de elementos de valores de datos y comprende además : a. un conjunto de desplazamientos de elementos de desplazamientos asociados con el conjunto condensado de elementos de valores de datos, cada elemento de desplazamiento tiene una posición en el conjunto de desplazamientos y un valor de desplazamiento, b. un conjunto de ocurrencias de elementos de ocurrencia asociados con el primer conjunto de elementos de casos, cada elemento de ocurrencia tiene una posición en el conjunto de ocurrencias y un valor de ocurrencia, y c. en donde (i) el segundo elemento de casos es derivado además del conjunto de desplazamientos y del conjunto de ocurrencias, y (ii) el segundo elemento de valor de datos asociado es derivado del valor de caso del primer elemento de caso. La base de datos de conformidad con la reivindicación 14 en donde el segundo elemento de caso es derivado de un elemento de conjunto de desplazamientos cuya posición es proporcionada por el valor de caso de primer elemento de caso y un elemento de conjunto de ocurrencias cuya posición es proporcionada por la posición del primer elemento de caso. La base de datos de conformidad con la reivindicación 14 en donde el segundo elemento de caso se deriva de la suma del valor de un elemento de conjunto de desplazamientos cuya posición es proporcionada por el valor de caso del primer elemento de caso y el valor de un elemento de lista de ocurrencia cuya posición es dada por la posición del primer elemento de caso. La base de datos de la reivindicación 1 en donde un grupo de elementos de casos asociados que comprenden el segundo elemento de caso de todos los elementos de caso asociados derivados del valor de caso del segundo elemento de caso incluye el elemente ¿ei primer caso. La base de datos de conformidad con la reivindicación 17 en donde cada elemento de caso asociado en el grupo de elementos asociados que se deriva independientemente del primer elemento de caso es único. Una base de datos implementada por computadora, que comprende : a. uno o varios conjuntos de elementos de valores de datos, cada elemento de valor de dato tiene una posición en uno del conjunto o de los varios conjuntos de elementos de valores de datos y un valor de dato; b. por lo menos un primer conjunto y un segundo conjunto de elementos de casos, cada elemento de caso tiene una posición en su conjunto respectivo de elementos de casos y un valor de caso, y cada conjunto de elementos de casos corresponde a un atributo, c. en donde para un primer elemento de caso en el primer conjunto de elementos de casos (i) un primer elemento de valor de dato asociado en el conjunto o los conjuntos de elementos de valores de datos, derivado de la posición del primer elemento de caso, se asocia ccr. ei primer elemento de caso y por lo menos otro elemento en el primer conjunto de elementos de casos, y (ii) un segundo elemento de caso en el segundo conjunto de elementos de casos, cuya posición en el segundo conjunto de elementos de casos es diferente de la posición del primer elemento de caso en el primer conjunto de elementos de casos, se deriva del valor de caso del primer elemento de caso, y d. donde además (i) un segundo elemento de valor de datos asociado en el conjunto o los conjuntos de elementos de valores de datos es asociado con el segundo elemento de caso y por lo menos otro elemento en el segundo conjunto de elementos de datos, y (ii) el primer elemento de caso puede ser derivado del segundo elemento de caso independientemente del valor del primer elemento de caso. Una base de datos implementado por computadora que comprende: a. dos o más conjuntos de atributos que comprenden valores de datos y elementos de casos, cada elemento de caso asociado con un valor de dato y teniendo una posición y contenido; b. información de conectividad que asocia de manera única cada elemento de caso con un elemento de caso específico en por lo menos otro conjunto de atributos; c. en donde la información de conectividad para un primer elemento de caso asociado con un primer valor de dato en un primer conjunto de atributos asocia el primer elemento de caso con un segundo elemento de caso que es uñ elemento específico seleccionado dentro de una pluralidad de elementos de casos asociados con un segundo valor de datos en un segundo conjunto de atributos y d. en donde la posición del segundo elemento de caso v es independiente de la posición del primer elemento de caso. 21. La base de datos de conformidad con la reivindicación 20 en donde la información de conectividad para el primer elemento de caso comprende el contenido del primer elemento de caso. 22. La base de datos de conformidad con la reivindicación 21 en donde cada valor de dato tiene una posición y en donde los valores de datos en el segundo conjunto de atributos son únicos y clasificados. 23. La base de datos de conformidad con la reivindicación 22 en donde el segundo conjunto de atributos comprende además información de desplazamiento que identifica los elementos de caso en el segundo conjunto de atributos asociados con el segundo valor de dato. La base de datos de conformidad con la reivindicación 23 en donde el primer conjunto de atributos comprende además información de ocurrencias que identifica el número de ocurrencias del segundo elemento de caso entre casos del segundo valor de dato en el segundo conjunto de atributos y en donde la información de conectividad para el primer elemento de caso comprende además la información de ocurrencias para el primer conjunto de atributos y la información de desplazamiento para el segundo conjunto de atributos. Un sistema para almacenar y recuperar tupias, que comprende: una colección de varios casos que corresponden a un valor de un primer atributo; un elemento de cardinalidad que corresponde al número de casos; en donde el elemento de cardinalidad es actualizado cada vez que el número de casos cambia y en donde por lo menos un caso indica por lo menos otro caso que corresponde a un valor de un segundo atnouto y el segundo atributo es diferente del primer atributo. Un sistema para almacenar y recuperar tupias, que comprende: una colección de varios casos que corresponden a un valor de un primer atributo; un elemento de cardinalidad que corresponde al número de casos; en donde el valor puede ser derivado del elemento de cardinalidad y en donde por lo menos un caso indica por lo menos otro caso que corresponde a un valor de un segundo atributo y el segundo atributo es diferente del primer atributo. Un sistema para almacenar una pluralidad de tupias, cada tupia comprende por lo menos un primer atributo que tiene un primer valor de atributo y un segundo atributo que tiene un segundo valor de atributo, el sistema comprende: por lo menos dos tupias que tienen primeros valores de atributo idénticos y segundos valores de atributo idénticos, un elemento de caso único que identifica el primer valor de atributo y el segundo valor de atributo, y un elemento de cardinalidad que comprende información en cuanto al número de tupias que tienen primeros y segundos valores de atributo idénticos. El sistema de conformidad con la reivindicación 27 en donde el elemento de casos comprende el elemento de cardinalidad. Un sistema para almacenar una pluralidad de tupias, cada tupia comprende por lo menos un primer atributo que tiene un primer valor de atributo y un segundo atributo que tiene un segundo valor de atributo, el sistema comprende: a. un almacenamiento de valores que almacena los valores de los primeros y segundos atributos de las varias tupias; b. un almacén de casos que identifica casos de los valores en el almacén de valores asociado con cada tupia; c. un almacén de conectividades que almacena información en cuanto a las relaciones entre los casos; y d. un almacén de cardinalidad que almacena información que representa frecuencias de ocurrencias de casos de valor igual, en donde un valor particular en el almacén de valores asociado con un caso particular en el almacén de casos se deriva empleando el almacén de cardinalidades . 30. El sistema de conformidad con la reivindicación 29 en donde el almacén de casos y el almacén de conectividades no son distintos. 31. Un método para recuperar un registro a partir de una base de datos comprimida, la base de datos ha siao comprimida mediante el almacenamiento de la información en cuanto a valores distintos de un atributo e información sobre el número de ocurrencias de valores distintos; el método comprende los pasos de: a. recuperar información en cuanto al número de ocurrencias de un valor dado; b. determinar un elemento de caso con base en información en cuanto al número de ocurrencias del valor dado; Q. determinar un elemento de conectividad con base en el elemento de caso; d. determinar un registro a partir del elemento de conectividad. Un método para almacenar casos de una pluralidad de valores, que comprende los pasos de: a. almacenar información en cuanto a la posición de un valor en un ordenamiento de valores distintos; b. actualizar la información en cuanto a la posición del valor cada vez que cambia la posición del valor en el ordenamiento de valores distintos; c. almacenar información en cuanto al número de casos del valor; d. actualizar la información en cuanto al número de casos del valor cada vez que cambia el número de casos del valor; e. almacenar información en cuanto a la posición de una colección de uno o varios casos del valor en un orden de casos de la pluralidad de valores; y actualizar la información en cuanto a la posición de la colección cada vez que cambia la posición de la colección. 10 15 20 25
MXPA01000123A 1998-07-08 1999-07-08 Base de datos implementada por computadora con conectividad valor caso. MXPA01000123A (es)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/112,078 US6009432A (en) 1998-07-08 1998-07-08 Value-instance-connectivity computer-implemented database
PCT/US1999/015431 WO2000003335A1 (en) 1998-07-08 1999-07-08 Value-instance-connectivity computer-implemented database

Publications (1)

Publication Number Publication Date
MXPA01000123A true MXPA01000123A (es) 2002-10-17

Family

ID=22342004

Family Applications (1)

Application Number Title Priority Date Filing Date
MXPA01000123A MXPA01000123A (es) 1998-07-08 1999-07-08 Base de datos implementada por computadora con conectividad valor caso.

Country Status (16)

Country Link
US (6) US6009432A (es)
EP (1) EP1208478A4 (es)
JP (1) JP2002520715A (es)
KR (1) KR20010083096A (es)
CN (1) CN1317116A (es)
AU (1) AU4867699A (es)
BR (1) BR9911931A (es)
CA (1) CA2336651A1 (es)
HK (1) HK1040785A1 (es)
IL (1) IL140757A0 (es)
MX (1) MXPA01000123A (es)
NO (1) NO20010111L (es)
PL (1) PL345460A1 (es)
RU (1) RU2001103641A (es)
WO (1) WO2000003335A1 (es)
ZA (1) ZA200100187B (es)

Families Citing this family (135)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE19627472A1 (de) * 1996-07-08 1998-01-15 Ser Systeme Ag Datenbanksystem
CA2210755C (en) * 1997-07-17 2003-12-23 Ibm Canada Limited - Ibm Canada Limitee Creating proxies for distribution of beans and event objects
US6772166B1 (en) * 1998-10-02 2004-08-03 Ncr Corporation SQL-based analytic algorithm for clustering
EP1116125A4 (en) * 1998-10-02 2007-05-02 Ncr Corp SQL BASED ANALYTICAL ALGORITHMS
US6629132B1 (en) * 1998-12-23 2003-09-30 Novell, Inc. Predicate indexing of data stored in a computer with application to indexing cached data
US6304867B1 (en) * 1999-02-25 2001-10-16 Electronic Data Systems Corporation System and method for enhanced performance of a relational database management system through the use of application-specific memory-resident data
US6360224B1 (en) * 1999-04-23 2002-03-19 Microsoft Corporation Fast extraction of one-way and two-way counts from sparse data
US6163774A (en) * 1999-05-24 2000-12-19 Platinum Technology Ip, Inc. Method and apparatus for simplified and flexible selection of aggregate and cross product levels for a data warehouse
US6385604B1 (en) 1999-08-04 2002-05-07 Hyperroll, Israel Limited Relational database management system having integrated non-relational multi-dimensional data store of aggregated data elements
US6408292B1 (en) 1999-08-04 2002-06-18 Hyperroll, Israel, Ltd. Method of and system for managing multi-dimensional databases using modular-arithmetic based address data mapping processes on integer-encoded business dimensions
US20020029207A1 (en) 2000-02-28 2002-03-07 Hyperroll, Inc. Data aggregation server for managing a multi-dimensional database and database management system having data aggregation server integrated therein
US6625612B1 (en) 2000-06-14 2003-09-23 Ezchip Technologies Ltd. Deterministic search algorithm
US7216132B1 (en) * 2000-08-16 2007-05-08 Sparta Systems, Inc. System and method for automated process control
US20020065815A1 (en) * 2000-10-04 2002-05-30 Xcelerix, Inc. Systems and methods for searching a database
US6804664B1 (en) 2000-10-10 2004-10-12 Netzero, Inc. Encoded-data database for fast queries
US6535885B1 (en) * 2000-10-16 2003-03-18 Aether Systems, Inc. Multikeyed table implementable on a personal digital assistant
US7016903B1 (en) * 2001-01-25 2006-03-21 Oracle International Corporation Method for conditionally updating or inserting a row into a table
US7657576B1 (en) * 2001-05-24 2010-02-02 Oracle International Corporation Asynchronous change capture for data warehousing
US6687798B1 (en) * 2001-05-31 2004-02-03 Oracle International Corporation Methods for intra-partition parallelism for inserts
US6480857B1 (en) 2001-06-07 2002-11-12 David Chandler Method of organizing hierarchical data in a relational database
US7461077B1 (en) 2001-07-31 2008-12-02 Nicholas Greenwood Representation of data records
JP4162183B2 (ja) * 2001-11-12 2008-10-08 株式会社日立製作所 データベース管理システムの静的な情報を取得する手段を有する記憶装置
US6957210B1 (en) 2001-12-31 2005-10-18 Ncr Corporation Optimizing an exclusion join operation using a bitmap index structure
US6957222B1 (en) * 2001-12-31 2005-10-18 Ncr Corporation Optimizing an outer join operation using a bitmap index structure
US20030126555A1 (en) * 2002-01-03 2003-07-03 International Business Machines Corporation Enhanced attribute prompting in browser clients
CA2374298A1 (en) * 2002-03-01 2003-09-01 Ibm Canada Limited-Ibm Canada Limitee Computation of frequent data values
US7035862B2 (en) * 2002-05-09 2006-04-25 Siemens Medical Solutions Health Services Corporation Method for processing information from an information repository
US7548935B2 (en) * 2002-05-09 2009-06-16 Robert Pecherer Method of recursive objects for representing hierarchies in relational database systems
US7249118B2 (en) 2002-05-17 2007-07-24 Aleri, Inc. Database system and methods
US6920460B1 (en) * 2002-05-29 2005-07-19 Oracle International Corporation Systems and methods for managing partitioned indexes that are created and maintained by user-defined indexing schemes
CA2390350A1 (en) * 2002-06-10 2003-12-10 Ibm Canada Limited-Ibm Canada Limitee Incremental cardinality estimation for a set of data values
GB0215464D0 (en) * 2002-07-04 2002-08-14 Hewlett Packard Co Combining data descriptions
US7039897B2 (en) * 2002-07-12 2006-05-02 Hewlett-Packard Development Company, L.P. Modeling a target system by interpolating
US20050080797A1 (en) * 2002-08-26 2005-04-14 Gordon Short Dynamic lexicon
US7620170B2 (en) 2002-12-31 2009-11-17 At&T Intellectual Property I, L.P. Computer telephony integration (CTI) complete customer contact center
US7573999B2 (en) 2002-12-31 2009-08-11 At&T Intellectual Property I, L.P. Computer telephony integration (CTI) complete healthcare contact center
US7248688B2 (en) * 2003-01-27 2007-07-24 Bellsouth Intellectual Property Corporation Virtual physician office systems and methods
CA2429910A1 (en) * 2003-05-27 2004-11-27 Cognos Incorporated System and method of query transformation
US7337163B1 (en) * 2003-12-04 2008-02-26 Hyperion Solutions Corporation Multidimensional database query splitting
US8886614B2 (en) * 2004-02-03 2014-11-11 Teradata Us, Inc. Executing a join plan using data compression
US7373354B2 (en) * 2004-02-26 2008-05-13 Sap Ag Automatic elimination of functional dependencies between columns
US7269606B2 (en) * 2004-02-26 2007-09-11 Sap Ag Automatic reduction of table memory footprint using column cardinality information
US20050234976A1 (en) * 2004-04-20 2005-10-20 Relativity Technologies, Inc. System and method for deriving an object oriented design from the business rules of a legacy application
US20050235266A1 (en) * 2004-04-20 2005-10-20 Relativity Technologies, Inc. System and method for business rule identification and classification
EP1591916B1 (en) * 2004-04-26 2013-11-06 Sap Ag Method, computer program and device for deleting data sets contained in a table system
US7594075B2 (en) * 2004-10-20 2009-09-22 Seagate Technology Llc Metadata for a grid based data storage system
DE102005019153A1 (de) * 2005-04-25 2007-06-06 Robert Bosch Gmbh Verfahren und System zum Verarbeiten von Daten
US8538969B2 (en) * 2005-06-03 2013-09-17 Adobe Systems Incorporated Data format for website traffic statistics
US7991764B2 (en) * 2005-07-22 2011-08-02 Yogesh Chunilal Rathod Method and system for communication, publishing, searching, sharing and dynamically providing a journal feed
US7769744B2 (en) 2005-12-02 2010-08-03 Microsoft Cororation Missing index analysis and index useage statistics
JP4200456B2 (ja) * 2005-12-28 2008-12-24 ブラザー工業株式会社 周辺装置、プログラム、制御方法
JP4918797B2 (ja) * 2006-03-23 2012-04-18 富士通株式会社 ファイル管理プログラム、ファイル管理装置およびファイル管理方法
JP2007264814A (ja) * 2006-03-27 2007-10-11 Fujitsu Ltd レプリケーションデータ作成プログラム、レプリケーションデータ反映プログラムおよびデータベース装置
US8086598B1 (en) 2006-08-02 2011-12-27 Hewlett-Packard Development Company, L.P. Query optimizer with schema conversion
US10007686B2 (en) * 2006-08-02 2018-06-26 Entit Software Llc Automatic vertical-database design
US8671091B2 (en) * 2006-08-02 2014-03-11 Hewlett-Packard Development Company, L.P. Optimizing snowflake schema queries
US20080059492A1 (en) * 2006-08-31 2008-03-06 Tarin Stephen A Systems, methods, and storage structures for cached databases
JP2008112934A (ja) * 2006-10-31 2008-05-15 Oki Electric Ind Co Ltd 半導体記憶装置及びその製造方法
US7698285B2 (en) * 2006-11-09 2010-04-13 International Business Machines Corporation Compression of multidimensional datasets
US20080163159A1 (en) * 2007-01-03 2008-07-03 Relativity Technologies, Inc. System and method for extracting UML models from legacy applications
US20080222080A1 (en) * 2007-03-06 2008-09-11 Nitrosecurity, Inc. Inferred index of circular tables in a database
US8266116B2 (en) * 2007-03-12 2012-09-11 Broadcom Corporation Method and apparatus for dual-hashing tables
US7779037B2 (en) * 2007-03-27 2010-08-17 International Business Machines Corporation Sharing a single instance of a user defined type
US8032499B2 (en) * 2007-05-21 2011-10-04 Sap Ag Compression of tables based on occurrence of values
US9449047B2 (en) 2007-06-19 2016-09-20 Sybase, Inc. Dynamic modification of schemas in streaming databases
US8745012B2 (en) 2007-08-10 2014-06-03 Sybase, Inc. Log-structured store for streaming data
US7444596B1 (en) * 2007-11-29 2008-10-28 International Business Machines Corporation Use of template messages to optimize a software messaging system
US7890480B2 (en) * 2008-02-11 2011-02-15 International Business Machines Corporation Processing of deterministic user-defined functions using multiple corresponding hash tables
US8108361B2 (en) * 2008-07-31 2012-01-31 Microsoft Corporation Efficient column based data encoding for large-scale data storage
CN101355560B (zh) * 2008-09-12 2011-12-14 深圳市联软科技有限公司 一种数据传输方法及系统
US8180774B2 (en) * 2008-10-03 2012-05-15 Seomoz, Inc. Web-scale data processing system and method
US8234268B2 (en) * 2008-11-25 2012-07-31 Teradata Us, Inc. System, method, and computer-readable medium for optimizing processing of distinct and aggregation queries on skewed data in a database system
CN101751406B (zh) * 2008-12-18 2012-01-04 赵伟 一种实现基于列存储的关系型数据库的方法及装置
US8725789B2 (en) * 2009-01-29 2014-05-13 Emc Corporation Method and apparatus for processing distributed data
US8700674B2 (en) * 2009-07-14 2014-04-15 Hewlett-Packard Development Company, L.P. Database storage architecture
US20110060718A1 (en) * 2009-09-04 2011-03-10 Song You Method and Apparatus for Organizing Hierarchical Data in a Relational Database
JP5487985B2 (ja) * 2010-01-14 2014-05-14 富士通株式会社 圧縮装置、方法及びプログラム、並びに展開装置、方法及びプログラム
WO2011101858A1 (en) 2010-02-22 2011-08-25 Yogesh Chunilal Rathod A system and method for social networking for managing multidimensional life stream related active note(s) and associated multidimensional active resources & actions
US8290931B2 (en) * 2010-02-22 2012-10-16 Hewlett-Packard Development Company, L.P. Database designer
US8423522B2 (en) 2011-01-04 2013-04-16 International Business Machines Corporation Query-aware compression of join results
CN102355362B (zh) * 2011-07-22 2014-02-19 华为技术有限公司 一种网络拓扑生成方法和装置
US8990544B2 (en) * 2011-12-21 2015-03-24 Advanced Micro Devices, Inc. Method and apparatus for using a previous column pointer to read entries in an array of a processor
CN102682108B (zh) * 2012-05-08 2015-02-18 同方知网数字出版技术股份有限公司 一种行列混合的数据库存储方法
US9176999B2 (en) 2012-09-13 2015-11-03 International Business Machines Corporation Multiplication-based method for stitching results of predicate evaluation in column stores
US10152500B2 (en) 2013-03-14 2018-12-11 Oracle International Corporation Read mostly instances
US10642837B2 (en) 2013-03-15 2020-05-05 Oracle International Corporation Relocating derived cache during data rebalance to maintain application performance
US9218134B2 (en) * 2013-07-02 2015-12-22 GlobalFoundries, Inc. Read based temporal locality compression
US9594766B2 (en) 2013-07-15 2017-03-14 International Business Machines Corporation Reducing activation of similarity search in a data deduplication system
US10229132B2 (en) 2013-07-15 2019-03-12 International Business Machines Corporation Optimizing digest based data matching in similarity based deduplication
US10789213B2 (en) 2013-07-15 2020-09-29 International Business Machines Corporation Calculation of digest segmentations for input data using similar data in a data deduplication system
US9836474B2 (en) * 2013-07-15 2017-12-05 International Business Machines Corporation Data structures for digests matching in a data deduplication system
US10296598B2 (en) 2013-07-15 2019-05-21 International Business Machines Corporation Digest based data matching in similarity based deduplication
US10339109B2 (en) * 2013-07-15 2019-07-02 International Business Machines Corporation Optimizing hash table structure for digest matching in a data deduplication system
US8762387B1 (en) * 2013-07-31 2014-06-24 Linkedin Corporation Inverted indexes for accelerating analytics queries
US9292554B2 (en) * 2013-08-20 2016-03-22 Pivotal Software, Inc. Thin database indexing
US9292553B2 (en) * 2013-08-20 2016-03-22 Pivotal Software, Inc. Queries for thin database indexing
US10303682B2 (en) 2013-09-21 2019-05-28 Oracle International Corporation Automatic verification and triage of query results
US9128972B2 (en) 2013-09-21 2015-09-08 Oracle International Corporation Multi-version concurrency control on in-memory snapshot store of oracle in-memory database
US9323799B2 (en) 2013-09-21 2016-04-26 Oracle International Corporation Mechanism to run OLTP workload on in-memory database under memory pressure
US9292564B2 (en) 2013-09-21 2016-03-22 Oracle International Corporation Mirroring, in memory, data from disk to improve query performance
US9378232B2 (en) 2013-09-21 2016-06-28 Oracle International Corporation Framework for numa affinitized parallel query on in-memory objects within the RDBMS
CN103473371B (zh) * 2013-09-29 2017-12-15 北大医疗信息技术有限公司 数据压栈系统和取数据压栈方法
US9767178B2 (en) 2013-10-30 2017-09-19 Oracle International Corporation Multi-instance redo apply
CN103678556B (zh) 2013-12-06 2017-10-10 华为技术有限公司 列式数据库处理的方法和处理设备
CN103761316B (zh) * 2014-01-26 2018-02-06 北京中电普华信息技术有限公司 一种基于稀疏矩阵的数据压缩存储方法及装置
US9697221B2 (en) 2014-03-19 2017-07-04 Oracle International Corporation OZIP compression and decompression
US10635645B1 (en) 2014-05-04 2020-04-28 Veritas Technologies Llc Systems and methods for maintaining aggregate tables in databases
US10275184B2 (en) 2014-07-22 2019-04-30 Oracle International Corporation Framework for volatile memory query execution in a multi node cluster
US9875259B2 (en) 2014-07-22 2018-01-23 Oracle International Corporation Distribution of an object in volatile memory across a multi-node cluster
US10002148B2 (en) 2014-07-22 2018-06-19 Oracle International Corporation Memory-aware joins based in a database cluster
CN104462222A (zh) * 2014-11-11 2015-03-25 安徽四创电子股份有限公司 一种卡口车辆通行数据的分布式存储方法及系统
US11829349B2 (en) 2015-05-11 2023-11-28 Oracle International Corporation Direct-connect functionality in a distributed database grid
US10073885B2 (en) 2015-05-29 2018-09-11 Oracle International Corporation Optimizer statistics and cost model for in-memory tables
US10067974B2 (en) 2015-05-29 2018-09-04 Oracle International Corporation Loading and reloading an in-memory copy of a database object without blocking concurrent updates to the database object
US10216781B2 (en) 2015-05-29 2019-02-26 Oracle International Corporation Maintaining cross-node coherence of an in-memory database object in a multi-node database cluster
US9990308B2 (en) 2015-08-31 2018-06-05 Oracle International Corporation Selective data compression for in-memory databases
US10984043B2 (en) 2015-10-02 2021-04-20 Oracle International Corporation Method for faceted visualization of a SPARQL query result set
US10678788B2 (en) 2015-10-22 2020-06-09 Oracle International Corporation Columnar caching in tiered storage
US10747752B2 (en) 2015-10-23 2020-08-18 Oracle International Corporation Space management for transactional consistency of in-memory objects on a standby database
US11657037B2 (en) 2015-10-23 2023-05-23 Oracle International Corporation Query execution against an in-memory standby database
US10146842B2 (en) * 2015-11-19 2018-12-04 Google Llc Pre-instantiating native applications in background
CN105589969A (zh) * 2015-12-23 2016-05-18 浙江大华技术股份有限公司 一种数据处理方法及装置
US10102046B2 (en) 2016-03-24 2018-10-16 Oracle International Corporation In-memory data analytic system that provides an integrated tracking mechanism for explicit memory resources
US10346403B2 (en) * 2016-05-06 2019-07-09 International Business Machines Corporation Value range synopsis in column-organized analytical databases
US10572469B2 (en) 2016-05-31 2020-02-25 Oracle International Corporation Versioning and non-disruptive servicing of in-memory units in a database
US10698771B2 (en) 2016-09-15 2020-06-30 Oracle International Corporation Zero-data-loss with asynchronous redo shipping to a standby database
US10437688B2 (en) 2016-09-22 2019-10-08 Oracle International Corporation Enhancing consistent read performance for in-memory databases
US10891291B2 (en) 2016-10-31 2021-01-12 Oracle International Corporation Facilitating operations on pluggable databases using separate logical timestamp services
US11475006B2 (en) 2016-12-02 2022-10-18 Oracle International Corporation Query and change propagation scheduling for heterogeneous database systems
US10402387B2 (en) * 2016-12-13 2019-09-03 Sap Se Mechanism for constant-space indexing optimized data block merging
US20180300388A1 (en) * 2017-04-17 2018-10-18 International Business Machines Corporation System and method for automatic data enrichment from multiple public datasets in data integration tools
US10691722B2 (en) 2017-05-31 2020-06-23 Oracle International Corporation Consistent query execution for big data analytics in a hybrid database
US11086876B2 (en) 2017-09-29 2021-08-10 Oracle International Corporation Storing derived summaries on persistent memory of a storage device
US11514055B2 (en) 2019-09-13 2022-11-29 Oracle International Corporation Querying on hybrid formats and storages
CN116644103B (zh) * 2023-05-17 2023-11-24 本原数据(北京)信息技术有限公司 基于数据库的数据排序方法和装置、设备、存储介质

Family Cites Families (54)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4468732A (en) * 1975-12-31 1984-08-28 International Business Machines Corporation Automated logical file design system with reduced data base redundancy
US4479196A (en) * 1982-11-15 1984-10-23 At&T Bell Laboratories Hyperedge entity-relationship data base systems
US5010478A (en) * 1986-04-11 1991-04-23 Deran Roger L Entity-attribute value database system with inverse attribute for selectively relating two different entities
US4858146A (en) * 1986-08-13 1989-08-15 The Babcock & Wilcox Company Automated design of structures using a finite element database
IL84255A (en) * 1987-10-23 1993-02-21 Galram Technology Ind Ltd Process for removal of post- baked photoresist layer
JPH07104868B2 (ja) * 1988-04-08 1995-11-13 インターナシヨナル・ビジネス・マシーンズ・コーポレーシヨン データ記憶検索システム
EP0444358B1 (en) * 1990-02-27 1998-08-19 Oracle Corporation Dynamic optimization of a single relation access
US5604899A (en) 1990-05-21 1997-02-18 Financial Systems Technology Pty. Ltd. Data relationships processor with unlimited expansion capability
US5276868A (en) * 1990-05-23 1994-01-04 Digital Equipment Corp. Method and apparatus for pointer compression in structured databases
US5201046A (en) * 1990-06-22 1993-04-06 Xidak, Inc. Relational database management system and method for storing, retrieving and modifying directed graph data structures
US5333313A (en) * 1990-10-22 1994-07-26 Franklin Electronic Publishers, Incorporated Method and apparatus for compressing a dictionary database by partitioning a master dictionary database into a plurality of functional parts and applying an optimum compression technique to each part
US5560006A (en) * 1991-05-15 1996-09-24 Automated Technology Associates, Inc. Entity-relation database
US5592667A (en) 1991-05-29 1997-01-07 Triada, Ltd. Method of storing compressed data for accelerated interrogation
US5379422A (en) * 1992-01-16 1995-01-03 Digital Equipment Corporation Simple random sampling on pseudo-ranked hierarchical data structures in a data processing system
US5388259A (en) * 1992-05-15 1995-02-07 Bell Communications Research, Inc. System for accessing a database with an iterated fuzzy query notified by retrieval response
US5555388A (en) * 1992-08-20 1996-09-10 Borland International, Inc. Multi-user system and methods providing improved file management by reading
US5412797A (en) * 1992-08-31 1995-05-02 International Business Machines Corporation Method for implementing one-to-many binary relations in object-oriented systems using doubly-linked rings
US5469568A (en) * 1993-01-07 1995-11-21 International Business Machines Corporation Method for choosing largest selectivities among eligible predicates of join equivalence classes for query optimization
US5918225A (en) 1993-04-16 1999-06-29 Sybase, Inc. SQL-based database system with improved indexing methodology
US5649181A (en) * 1993-04-16 1997-07-15 Sybase, Inc. Method and apparatus for indexing database columns with bit vectors
US5794229A (en) 1993-04-16 1998-08-11 Sybase, Inc. Database system with methodology for storing a database table by vertically partitioning all columns of the table
US5794228A (en) * 1993-04-16 1998-08-11 Sybase, Inc. Database system with buffer manager providing per page native data compression and decompression
US5488722A (en) * 1993-05-28 1996-01-30 International Business Machines Corporation System and method for automating implementation and execution of constraint most likely to be violated in a database
US5504885A (en) * 1993-06-29 1996-04-02 Texas Instruments Incorporated O-R gateway: a system for connecting object-oriented application programs and relational databases
US5701453A (en) * 1993-07-01 1997-12-23 Informix Software, Inc. Logical schema to allow access to a relational database without using knowledge of the database structure
US5765146A (en) * 1993-11-04 1998-06-09 International Business Machines Corporation Method of performing a parallel relational database query in a multiprocessor environment
US5546575A (en) 1994-05-23 1996-08-13 Basil E. Potter & Associates, Inc. Encoding method for compressing a tabular database by selecting effective compression routines for each field and structure of partitions of equal sized records
US5687367A (en) * 1994-06-21 1997-11-11 International Business Machines Corp. Facility for the storage and management of connection (connection server)
US5611076A (en) * 1994-09-21 1997-03-11 Micro Data Base Systems, Inc. Multi-model database management system engine for databases having complex data models
US5838965A (en) * 1994-11-10 1998-11-17 Cadis, Inc. Object oriented database management system
US5701461A (en) * 1995-01-27 1997-12-23 Microsoft Corporation Method and system for accessing a remote database using pass-through queries
US5687362A (en) * 1995-01-30 1997-11-11 International Business Machines Corporation Enumerating projections in SQL queries containing outer and full outer joins in the presence of inner joins
US5819086A (en) * 1995-06-07 1998-10-06 Wall Data Incorporated Computer system for creating semantic object models from existing relational database schemas
US5734887A (en) * 1995-09-29 1998-03-31 International Business Machines Corporation Method and apparatus for logical data access to a physical relational database
US5797136A (en) * 1995-10-05 1998-08-18 International Business Machines Corporation Optional quantifiers in relational and object-oriented views of database systems
US5999933A (en) * 1995-12-14 1999-12-07 Compaq Computer Corporation Process and apparatus for collecting a data structure of a memory dump into a logical table
US5787279A (en) * 1995-12-22 1998-07-28 International Business Machines Corporation System and method for conformationally-flexible molecular recognition
US5761652A (en) * 1996-03-20 1998-06-02 International Business Machines Corporation Constructing balanced multidimensional range-based bitmap indices
US5799312A (en) * 1996-11-26 1998-08-25 International Business Machines Corporation Three-dimensional affine-invariant hashing defined over any three-dimensional convex domain and producing uniformly-distributed hash keys
US5802525A (en) * 1996-11-26 1998-09-01 International Business Machines Corporation Two-dimensional affine-invariant hashing defined over any two-dimensional convex domain and producing uniformly-distributed hash keys
US5995957A (en) * 1997-02-28 1999-11-30 International Business Machines Corporation Query optimization through the use of multi-column statistics to avoid the problems of column correlation
US6138111A (en) * 1997-05-02 2000-10-24 Informix Software, Inc. Cardinality-based join ordering
US5946692A (en) * 1997-05-08 1999-08-31 At & T Corp Compressed representation of a data base that permits AD HOC querying
US5956706A (en) * 1997-05-09 1999-09-21 International Business Machines Corporation Method and system for limiting the cardinality of an SQL query result
US5963936A (en) * 1997-06-30 1999-10-05 International Business Machines Corporation Query processing system that computes GROUPING SETS, ROLLUP, and CUBE with a reduced number of GROUP BYs in a query graph model
US5966709A (en) 1997-09-26 1999-10-12 Triada, Ltd. Method of optimizing an N-gram memory structure
US5983232A (en) 1997-09-29 1999-11-09 Triada, Ltd. Virtual structured information system
US6018734A (en) 1997-09-29 2000-01-25 Triada, Ltd. Multi-dimensional pattern analysis
US6006232A (en) * 1997-10-21 1999-12-21 At&T Corp. System and method for multirecord compression in a relational database
US6006219A (en) 1997-11-03 1999-12-21 Newframe Corporation Ltd. Method of and special purpose computer for utilizing an index of a relational data base table
US6199099B1 (en) * 1999-03-05 2001-03-06 Ac Properties B.V. System, method and article of manufacture for a mobile communication network utilizing a distributed communication network
US6330554B1 (en) * 1999-06-03 2001-12-11 Microsoft Corporation Methods and apparatus using task models for targeting marketing information to computer users based on a task being performed
US6374263B1 (en) * 1999-07-19 2002-04-16 International Business Machines Corp. System for maintaining precomputed views
US6484179B1 (en) * 1999-10-25 2002-11-19 Oracle Corporation Storing multidimensional data in a relational database management system

Also Published As

Publication number Publication date
BR9911931A (pt) 2001-10-02
HK1040785A1 (zh) 2002-06-21
IL140757A0 (en) 2002-02-10
NO20010111D0 (no) 2001-01-08
US20080235250A1 (en) 2008-09-25
US6606638B1 (en) 2003-08-12
NO20010111L (no) 2001-03-07
AU4867699A (en) 2000-02-01
US6009432A (en) 1999-12-28
US20050192996A1 (en) 2005-09-01
RU2001103641A (ru) 2003-06-27
KR20010083096A (ko) 2001-08-31
PL345460A1 (en) 2001-12-17
US20080319939A1 (en) 2008-12-25
ZA200100187B (en) 2002-01-08
EP1208478A4 (en) 2008-07-02
CN1317116A (zh) 2001-10-10
US20040059750A1 (en) 2004-03-25
CA2336651A1 (en) 2000-01-20
EP1208478A1 (en) 2002-05-29
JP2002520715A (ja) 2002-07-09
WO2000003335A1 (en) 2000-01-20

Similar Documents

Publication Publication Date Title
MXPA01000123A (es) Base de datos implementada por computadora con conectividad valor caso.
US6334125B1 (en) Method and apparatus for loading data into a cube forest data structure
US20010000536A1 (en) Value-instance-connectivity computer-implemented database
US5899992A (en) Scalable set oriented classifier
US6141655A (en) Method and apparatus for optimizing and structuring data by designing a cube forest data structure for hierarchically split cube forest template
US6424967B1 (en) Method and apparatus for querying a cube forest data structure
US5560007A (en) B-tree key-range bit map index optimization of database queries
JP5833406B2 (ja) 参照を使用してジェネリック・データ・アイテムに関連するデータ管理アーキテクチャ
US6453314B1 (en) System and method for selective incremental deferred constraint processing after bulk loading data
US6356897B1 (en) Associative database model for electronic-based informational assemblies
US5761654A (en) Memory structure and method for tuning a database statement using a join-tree data structure representation, including selectivity factors, of a master table and detail table
Chang et al. A signature access method for the starburst database system
US20080059412A1 (en) Value-instance connectivity computer-implemented database
WO2001046864A1 (en) Method and data processing system for detecting patterns in sql to allow optimized use of multi-column indexes
US7076507B1 (en) Value-instance-connectivity computer-implemented database
Larson et al. A file structure supporting traversal recursion
Hammer et al. Data structures for databases
DE3751388T2 (de) Zugriffssystem für statistische Daten.
Karasalo et al. The Design of Cantor-A New System for Data Analysis.
Herrin II et al. Schema and tuple trees: An intuitive structure for representing relational data
CA2202217A1 (en) Method and apparatus for classifying raw data entries according to data patterns
Deen Data and File Structure
Ahad et al. A performance optimization technique for an object-oriented functional data model
Weldon et al. An attribute-based file organization for a relational database
Martin Implementing real-time olap with multidimensional dynamic clustering