Más

Crear una tabla de varias filas y columnas a partir de la tabla de atributos

Crear una tabla de varias filas y columnas a partir de la tabla de atributos


Estoy intentando crear un índice de calles de una ciudad. Tengo una tabla que tiene todos los nombres de las calles y sus referencias de cuadrícula. Estoy buscando crear un índice de calles usando eso. Creo que apagar los campos no deseados dejando solo las tres columnas principales que necesito y luego generar eso funcionaría. Eso, en cambio, crea una mesa realmente larga. Me gustaría dividir esa tabla en columnas para poder agregarla a los mapas de calles. Al final, necesito un índice que se vea así.

Ese es el objetivo final. Si hay una forma de pasar por Python, también estoy dispuesto a intentarlo. Eso en este momento se crea mediante polilíneas y un polígono blanco en el fondo y una capa de anotación para el texto. Todo hecho a mano. Necesito automatizarlo para que una vez que se realice una nueva entrada, el usuario no tenga que crear e ingresar una nueva anotación y crear el tamaño correcto de una tabla.

Estoy usando ArcGIS 10.3 en una computadora con Windows 7. Avíseme si se necesita información adicional.


No creo que haya ninguna forma de lograr el diseño que está buscando con una tabla nativa en ArcMap.

Existe un enfoque alternativo que puede ser más fácil de mantener y es el uso de Excel.

  1. Cree su tabla de 12 columnas como se muestra en su ejemplo anterior usando Excel.
  2. Guardar este documento.
  3. En Diseño, inserte un Objeto, asegúrese de que está creando a partir de un archivo y que Enlace esté marcado.

El paso 1 se logra copiando la tabla original en Excel y USTED cortándola manualmente en 12 columnas (o lo que desee). Tienes que cortarlo en pedazos, ya que yo sé que no hay una forma automática de organizar la mesa como deseas.

Como lo ha elegido para ser un enlace, cualquier adicional las ediciones en el documento de Excel se reflejarán en la tabla insertada en su Diseño.


Creé un índice de calles como el tuyo. Los programas ALD de la vieja escuela en su día (2000). Un mapa como un atlas de carreteras con el índice de calles a la derecha. Esto todavía se puede hacer en GIS y Python. Recomendaría trabajar en este problema una pieza a la vez. Puede usar Excel, pero como está trabajando en GIS, sería mejor si creara una geodatabase de archivos FGDB con todos los datos. Usaría solo Python para todo el proceso, pero una combinación de ArcMap y Python funcionará.

Primero, cree una tabla con nombres de calles únicos.

En segundo lugar, agregue columnas según sea necesario. Esta tabla capturará todas las iteraciones. Ejemplo: prefijo de calle, nombre de calle, tipo de calle, sufijo de calle, nombre de calle completo (N Main St, Main St N…), Cuadrículas: g1, g2, g3, etc. (agregaría 10 números de cuadrícula), contador para capturar cuántas cuadrículas se agregaron a ese nombre de calle único.

En tercer lugar, use la calle contra la cuadrícula FC, lo que hace es recortar y luego iterar a través de cada una de esas calles recortadas y agregar ese número de cuadrícula a la tabla con una declaración de selección.

Por lo tanto, recorta calles de la cuadrícula, itera a través de cada calle en ese subconjunto, selecciona un nombre de calle único en la tabla, calcula valores. Usaría la columna de contador (stcntr + = 1) para calcular la columna de cuadrícula correcta.

Ejemplo: N Main St, A, B, ,,,,,,,, 2 y todas las demás columnas que agregó. N Main St, Grid A, Grid B, con 2 iteraciones

Cuarto, después de todas las iteraciones, pasará por la tabla de nombres de calles únicos para crear otra tabla.

Esta sería la mesa final y la más difícil de configurar debido al código específico. Ejemplo, N Main St GA-GE, GW, GX Ejemplo, GA-GE (GA, GB, GC, GD, GE Luego GW y GX).

Debería escribir código para ordenar o capturar A, B, C ... Una vez que lo haya configurado, el proceso final es de tabla (datos sin procesar) a tabla final.

El siguiente paso es agregar el índice al mapa. Usé la palabra configuración de dos columnas y copiar y pegar. Es un proceso manual para mantenerlo actualizado y agregué nuevas calles mensualmente o según sea necesario.


Las sentencias CREATE se pueden ejecutar con el método executeSql () de TableEnvironment. El método executeSql () devuelve & lsquoOK & rsquo para una operación CREATE exitosa; de lo contrario, arrojará una excepción.

Los siguientes ejemplos muestran cómo ejecutar una instrucción CREATE en TableEnvironment.

Las sentencias CREATE se pueden ejecutar con el método executeSql () de TableEnvironment. El método executeSql () devuelve & lsquoOK & rsquo para una operación CREATE exitosa; de lo contrario, arrojará una excepción.

Los siguientes ejemplos muestran cómo ejecutar una instrucción CREATE en TableEnvironment.

Las sentencias CREATE se pueden ejecutar con el método execute_sql () de TableEnvironment. El método execute_sql () devuelve & lsquoOK & rsquo para una operación CREATE exitosa; de lo contrario, arrojará una excepción.

Los siguientes ejemplos muestran cómo ejecutar una instrucción CREATE en TableEnvironment.

Las sentencias CREATE se pueden ejecutar en la CLI de SQL.

Los siguientes ejemplos muestran cómo ejecutar una instrucción CREATE en la CLI de SQL.


1 respuesta 1

distinto es NO Una función. Siempre opera en todas columnas del resultado.

La diferencia entre seleccionar distinto (foo), bar y seleccionar distinto foo, bar es la misma que la diferencia entre seleccionar (foo), bar y seleccionar foo, bar. El paréntesis es solo "ruido".

Cuando escribe select (foo, bar), en realidad está creando un tipo de registro anónimo en Postgres que da como resultado una sola columna que tiene dos atributos, que no es lo que realmente desea.

Mientras usa Postgres, puede usar el operador (propietario) DISTINCT ON que, en contraste con el estándar DISTINCT, lo hace operar en un subconjunto de las columnas.

tengo para especificar un ORDER BY en ese caso para definir cuál de las filas tomar si hay más de una con la misma combinación de (campo1, campo2).

Si desea ceñirse a ANSI SQL, necesitará una función de ventana para esto:

Para una mesa grande, DISTINCT ON probablemente sea más rápido que la solución con la función de ventana.


Usando JSON y PostgreSQL

Creo que lo estás haciendo más difícil de lo necesario y te morderán más tarde. No necesita el modelo Entidad-atributo-valor a menos que realmente necesite EAV.

No hay absolutamente nada de malo en este esquema.

Ahora puede consultarlo usando una combinación simple

Y cualquiera de los operadores JSON funciona en una cláusula where.

Como nota al margen, no coloque las URL en la base de datos. Cambian con el tiempo. Simplemente crea una función que los lleve.

o lo que sea. Si está utilizando PostgreSQL, incluso puede utilizar hashids.

También es de destacar que jsonb se almacena como binario (por lo tanto, la -'b ') y también es indexable, o SARGable o como sea que los niños geniales lo llamen en estos días: CREAR ÍNDICE DE marcas USANDO gin (atributos)

La diferencia aquí está en la simplicidad de la consulta.

Dame toda la ropa de Brand2

Dame toda la ropa que tenga el atributo: Talla

¿Qué tal uno diferente?

Dame toda la ropa y los atributos para cualquier ropa disponible en grande.

Lo que está describiendo es, al menos en parte, un catálogo de productos. Tiene varios atributos que son comunes a todos los productos. Estos pertenecen a una tabla bien normalizada.

Más allá de eso, tiene una serie de atributos que son específicos de la marca (y espero que puedan ser específicos del producto). ¿Qué debe hacer su sistema con estos atributos específicos? ¿Tiene una lógica empresarial que depende del esquema de estos atributos o simplemente los enumera en una serie de pares de "etiqueta": "valor"?

Otras respuestas sugieren el uso de lo que es esencialmente un enfoque CSV (ya sea JSON o ARRAY o de otro modo): estos enfoques renuncian al manejo regular de esquemas relacionales al mover el esquema de los metadatos a los datos en sí.

Hay un patrón de diseño portátil para esto que se adapta muy bien a las bases de datos relacionales. Es EAV (entidad-atributo-valor). Estoy seguro de que has leído en muchos, muchos lugares que "EAV is Evil" (y lo es). Sin embargo, hay una aplicación en particular donde los problemas con EAV no son importantes y son los catálogos de atributos de productos.

Todos los argumentos habituales en contra de EAV no se aplican a un catálogo de características de productos, ya que los valores de características de productos generalmente solo se regurgitan en una lista o, en el peor de los casos, en una tabla de comparación.

El uso de un tipo de columna JSON le quita la capacidad de hacer cumplir cualquier restricción de datos fuera de la base de datos y la fuerza a la lógica de su aplicación. Además, usar una tabla de atributos para cada marca tiene las siguientes desventajas:

  • No se escala bien si finalmente tiene cientos de marcas (o más).
  • Si cambia los atributos permitidos en una marca, debe cambiar la definición de una tabla en lugar de simplemente agregar o eliminar filas en una tabla de control de campo de marca.
  • Aún puede terminar con tablas escasamente pobladas si la marca tiene muchas características potenciales, de las cuales solo se conoce un pequeño subconjunto.

No es especialmente difícil recuperar datos sobre un producto con características específicas de la marca. Podría decirse que es más fácil crear un SQL dinámico con el modelo EAV que con el modelo de tabla por categoría. En la tabla por categoría, necesita reflexión (o su JSON) para averiguar cuáles son los nombres de las columnas de características. Luego, puede crear una lista de elementos para una cláusula where. En el modelo EAV, el DONDE X, Y Y Z se convierte en INNER JOIN X INNER JOIN Y INNER JOIN Z, por lo que la consulta es un poco más complicada, pero la lógica para construir la consulta sigue siendo totalmente basada en tablas y será más que lo suficientemente escalable si tiene los índices adecuados construidos.

Hay muchas razones para no utilizar EAV como enfoque general. Esas razones no se aplican a un catálogo de características de productos, por lo que no hay nada de malo con EAV en esta aplicación específica.

Sin duda, esta es una respuesta breve para un tema complejo y controvertido. He respondido preguntas similares antes y he entrado en más detalles sobre la aversión general a EAV. Por ejemplo:

Yo diría que EAV se usa con menos frecuencia últimamente de lo que solía ser, principalmente por buenas razones. Sin embargo, creo que tampoco se comprende bien.


Ejemplos de CREATE TABLE de PostgreSQL

Crearemos una nueva tabla llamada cuentas que tiene las siguientes columnas:

  • user_id & # 8211 clave principal
  • nombre de usuario & # 8211 único y no nulo
  • contraseña & # 8211 no nula
  • email & # 8211 único y no nulo
  • created_on & # 8211 no nulo
  • last_login & # 8211 nulo

El siguiente extracto crea la tabla de cuentas:

La siguiente declaración crea la tabla de roles que consta de dos columnas: role_id y role_name:

La siguiente declaración crea la tabla account_roles que tiene tres columnas: user_id, role_id y grant_date.

La clave principal de la tabla account_roles consta de dos columnas: user_id y role_id, por lo tanto, tenemos que definir la restricción de clave principal como una restricción de tabla.

Debido a que la columna user_id hace referencia a la columna user_id en la tabla de cuentas, necesitamos definir una restricción de clave externa para la columna user_id:

La columna role_id hace referencia a la columna role_id en la tabla de roles, también necesitamos definir una restricción de clave externa para la columna role_id.

A continuación se muestra la relación entre las tablas de cuentas, roles y account_roles:


Devolución de llamada de fila creada

El siguiente ejemplo muestra cómo se puede usar una función de devolución de llamada para formatear una fila en particular en el momento del dibujo. Para cada fila que se genera para su visualización, la función createdRow se llama una vez y solo una vez. Se pasa el nodo de fila de creación que luego se puede modificar.

En este caso, un ejemplo trivial de hacer que la columna 'salario' sea azul y en negrita agregando una clase CSS a la celda contenedora si el salario es superior a $ 150,000. Tenga en cuenta que columnas.createdCell también podría usarse para crear exactamente el mismo efecto.

Nombre Posición Oficina Edad Fecha de inicio Salario
Tiger Nixon sistema arquitecto Edimburgo 61 2011/04/25 $320,800
Garrett Winters Contador Tokio 63 2011/07/25 $170,750
Ashton Cox Autor técnico junior San Francisco 66 2009/01/12 $86,000
Cedric Kelly Desarrollador sénior de JavaScript Edimburgo 22 2012/03/29 $433,060
Airi Satou Contador Tokio 33 2008/11/28 $162,700
Brielle Williamson Especialista en integración Nueva York 61 2012/12/02 $372,000
Herrod Chandler Asistente de ventas San Francisco 59 2012/08/06 $137,500
Rhona Davidson Especialista en integración Tokio 55 2010/10/14 $327,900
Colleen Hurst Desarrollador Javascript San Francisco 39 2009/09/15 $205,500
Sonya Frost Ingeniero de software Edimburgo 23 2008/12/13 $103,600
Jena Gaines Gerente de oficina Londres 30 2008/12/19 $90,560
Quinn Flynn Líder de soporte Edimburgo 22 2013/03/03 $342,000
Charde Marshall Director Regional San Francisco 36 2008/10/16 $470,600
Haley Kennedy Diseñador senior de marketing Londres 43 2012/12/18 $313,500
Tatyana Fitzpatrick Director Regional Londres 19 2010/03/17 $385,750
Michael Silva Diseñador de marketing Londres 66 2012/11/27 $198,500
Paul Byrd Director financiero (CFO) Nueva York 64 2010/06/09 $725,000
Gloria Pequeña Administrador de sistemas Nueva York 59 2009/04/10 $237,500
Bradley Greer Ingeniero de software Londres 41 2012/10/13 $132,000
Dai Ríos Líder de personal Edimburgo 35 2012/09/26 $217,500
Jenette Caldwell Líder de desarrollo Nueva York 30 2011/09/03 $345,000
Yuri Berry Director de marketing (CMO) Nueva York 40 2009/06/25 $675,000
César Vance Soporte de preventa Nueva York 21 2011/12/12 $106,450
Doris Wilder Asistente de ventas Sydney 23 2010/09/20 $85,600
Angélica ramos Director Ejecutivo (CEO) Londres 47 2009/10/09 $1,200,000
Gavin Joyce Desarrollador Edimburgo 42 2010/12/22 $92,575
Jennifer Chang Director Regional Singapur 28 2010/11/14 $357,650
Brenden Wagner Ingeniero de software San Francisco 28 2011/06/07 $206,850
Fiona verde Director de operaciones (COO) San Francisco 48 2010/03/11 $850,000
Shou Itou Marketing regional Tokio 20 2011/08/14 $163,000
Michelle House Especialista en integración Sydney 37 2011/06/02 $95,400
Suki Burks Desarrollador Londres 53 2009/10/22 $114,500
Prescott Bartlett Autor técnico Londres 27 2011/05/07 $145,000
Gavin Cortez Jefe de equipo San Francisco 22 2008/10/26 $235,500
Martena Mccray Soporte postventa Edimburgo 46 2011/03/09 $324,050
Mayordomo de la unidad Diseñador de marketing San Francisco 47 2009/12/09 $85,675
Howard Hatfield Gerente de oficina San Francisco 51 2008/12/16 $164,500
Hope Fuentes Secretario San Francisco 41 2010/02/12 $109,850
Vivian Harrell Controlador financiero San Francisco 62 2009/02/14 $452,500
Timothy Mooney Gerente de oficina Londres 37 2008/12/11 $136,200
Jackson Bradshaw Director Nueva York 65 2008/09/26 $645,750
Olivia Liang Ingeniero de soporte Singapur 64 2011/02/03 $234,500
Bruno Nash Ingeniero de software Londres 38 2011/05/03 $163,500
Sakura Yamamoto Ingeniero de soporte Tokio 37 2009/08/19 $139,575
Thor Walton Desarrollador Nueva York 61 2013/08/11 $98,540
Finlandés camacho Ingeniero de soporte San Francisco 47 2009/07/07 $87,500
Serge Baldwin Coordinador de datos Singapur 64 2012/04/09 $138,575
Zenaida Frank Ingeniero de software Nueva York 63 2010/01/04 $125,250
Zorita Serrano Ingeniero de software San Francisco 56 2012/06/01 $115,000
Jennifer Acosta Desarrollador junior de JavaScript Edimburgo 43 2013/02/01 $75,650
Cara Stevens Asistente de ventas Nueva York 46 2011/12/06 $145,600
Mayordomo de hermione Director Regional Londres 47 2011/03/21 $356,250
Lael Greer Administrador de sistemas Londres 21 2009/02/27 $103,500
Jonas Alexander Desarrollador San Francisco 30 2010/07/14 $86,500
Shad Decker Director Regional Edimburgo 51 2008/11/13 $183,000
Michael Bruce Desarrollador Javascript Singapur 29 2011/06/27 $183,000
Donna Snider Atención al cliente Nueva York 27 2011/01/25 $112,000
Nombre Posición Oficina Edad Fecha de inicio Salario
  • Javascript
  • HTML
  • CSS
  • Ajax
  • Script del lado del servidor
  • Comentarios

El Javascript que se muestra a continuación se utiliza para inicializar la tabla que se muestra en este ejemplo:

Además del código anterior, los siguientes archivos de biblioteca Javascript se cargan para usar en este ejemplo:

El HTML que se muestra a continuación es el elemento de la tabla HTML sin formato, antes de que DataTables lo haya mejorado:

Este ejemplo usa un poco de CSS adicional más allá de lo que se carga desde los archivos de la biblioteca (a continuación), para mostrar correctamente la tabla. El CSS adicional utilizado se muestra a continuación:

Los siguientes archivos de biblioteca CSS se cargan para usar en este ejemplo para proporcionar el estilo de la tabla:

Esta tabla carga datos por Ajax. Los últimos datos que se han cargado se muestran a continuación. Estos datos se actualizarán automáticamente a medida que se carguen datos adicionales.

La secuencia de comandos utilizada para realizar el procesamiento del lado del servidor para esta tabla se muestra a continuación. Tenga en cuenta que este es solo un script de ejemplo que utiliza PHP. Los scripts de procesamiento del lado del servidor se pueden escribir en cualquier idioma, utilizando el protocolo descrito en la documentación de DataTables.


Histogramas en la etapa de consulta

Hay varias formas de crear histogramas en Power BI Desktop, comenzaremos con la más simple y continuaremos desde allí:

Histogramas más simples: determine qué consulta tiene el campo en el que desea construir un histograma. Utilice la opción & quotReferencia & quot de la consulta para crear una nueva consulta y asígnele el nombre & quot Histograma de nombre de campo & quot. Utilice la opción & quot; Agrupar por & quot en la cinta & quotTransformar & quot y seleccione el agregado & quot; contar filas & quot. Asegúrese de que el tipo de datos sea un número para la columna agregada resultante. Luego visualice estos datos en la página de informes. Esto es rápido y fácil de construir, pero no funciona bien si tiene muchos puntos de datos y no permite desplazarse por las imágenes.

Definición de depósitos para crear un histograma: determine qué consulta tiene el campo en el que desea crear un histograma. Utilice la opción & quotReferencia & quot de la consulta para crear una nueva consulta y asígnele el nombre & quotFieldName & quot. Ahora defina los cubos con una regla. Utilice la opción Agregar columna personalizada en la cinta Agregar columna y cree una regla personalizada. Una regla de agrupamiento simple podría verse así:

Asegúrese de que el tipo de datos sea un número para la columna agregada resultante. Ahora puede usar el grupo por técnica descrita en Histograma más simple para lograr el histograma. Esta opción maneja más puntos de datos pero aún no ayuda con el cepillado.

Definición de un histograma que admita el cepillado: el cepillado es cuando los elementos visuales están vinculados entre sí de modo que cuando un usuario selecciona un punto de datos en un elemento visual, otros elementos visuales en la página del informe resaltan o filtran puntos de datos relacionados con el punto de datos seleccionado. Dado que estamos manipulando datos en el momento de la consulta, necesitaremos crear una relación entre las tablas y asegurarnos de saber qué elemento de detalle se relaciona con el depósito en el histograma y viceversa.

Inicie el proceso utilizando la opción & quotReferencia & quot en la consulta que tiene el campo en el que desea construir un histograma. Nombre la nueva consulta & quotBuckets & quot. Para este ejemplo, llamemos a la consulta original & quotDetails & quot. A continuación, elimine todas las columnas excepto la columna que utilizará como depósito para el histograma. Ahora use la función & quot; Eliminar duplicados & quot en la consulta, está en el menú del botón derecho cuando selecciona la columna, por lo que los valores restantes son los valores únicos en la columna. Si tiene números decimales, primero puede usar la sugerencia para definir depósitos para crear un histograma y obtener un conjunto de depósitos manejable. Ahora, verifique los datos que se muestran en la vista previa de la consulta. Si ve valores en blanco o nulos, deberá corregirlos antes de crear una relación. Consulte & quotCreación de una relación si mis datos tienen valores nulos o en blanco & quot. El uso de este enfoque puede resultar problemático debido a la necesidad de ordenar. Para que los depósitos se clasifiquen correctamente, consulte & quot; Orden de clasificación: hacer que las categorías aparezcan en el orden que quiero & quot.

Es útil pensar en el orden de clasificación antes de crear cualquier objeto visual.

El siguiente paso del proceso es definir una relación entre las consultas & quotBuckets & quot y & quotDetails & quot en la columna de depósitos. En Power BI Desktop, haga clic en Gestionar relaciones en la cinta. Cree una relación donde Buckets esté en la tabla de la izquierda y Detalles en la tabla de la derecha y seleccione el campo que está usando para el histograma.

El último paso es crear el histograma. Arrastre el campo Bucket de la tabla & quotBuckets & quot. Elimine el campo predeterminado del gráfico de columnas resultante. Ahora, desde la tabla & quotDetails & quot, arrastre el campo del histograma al mismo objeto visual. En el campo, cambie el agregado predeterminado a Count. El resultado es el histograma.Si crea otro elemento visual como un mapa de árbol de la tabla Detalles, seleccione un punto de datos en el mapa de árbol para ver el resaltado del histograma y mostrar el histograma del punto de datos seleccionado en relación con la tendencia de todo el conjunto de datos.


Introducción a las bases de datos

El Proyecto de Piedras con Inscripciones Celtas (CISP) se gestiona conjuntamente entre el Departamento de Historia, UCL y el Instituto de Arqueología, UCL, bajo la dirección de la Prof. Wendy Davies en colaboración con el Prof. James Graham-Campbell. El proyecto actualmente (al 18 de octubre de 2000) emplea a tres personas a tiempo completo (Dr. Kris Lockyear, Dr. Mark Handley y Dr. Paul Kershaw). La estructura de la base de datos descrita en este manual fue construida por el Dr. Kris Lockyear y la ex-investigadora Dra. Katherine Forsyth. Los primeros tres años del Proyecto fueron financiados por HRB / HEFCE a través de su esquema de becas institucionales.

El objetivo de CISP es emprender un estudio colaborativo e interdisciplinario de las inscripciones celtas de la Alta Edad Media. Uno de sus principales objetivos es la compilación de una base de datos completa y autorizada de todas las inscripciones conocidas de Gran Bretaña, Irlanda y Bretaña. Al reunir este material en un solo lugar y ponerlo a disposición, nuestro objetivo es convertir lo que es un recurso en gran parte sin explotar en material utilizable.

Más detalles del Proyecto están disponibles en las páginas web del Proyecto.
(http://www.ucl.ac.uk/archaeology/cisp).

Esta guía y manual están pensados ​​como una introducción general a la base de datos CISP y como una guía detallada para la entrada de datos. El capítulo contiene una introducción a las bases de datos, los sistemas de gestión de bases de datos y las estructuras de datos (términos que se analizan a continuación). Los capítulos siguientes discuten el contenido de la base de datos CISP y proporcionan una tabla detallada por tabla, una guía campo por campo para la base de datos que incluye términos permitidos y definiciones de campos y entradas, y una guía breve para la aplicación de entrada de datos CISP. Los apéndices proporcionan un glosario de términos y enumeran los cambios importantes en la base de datos desde la primera versión de este manual.

Esta sección analiza varios conceptos de bases de datos y está destinada principalmente a quienes tienen poca o ninguna experiencia en bases de datos informáticas.

Una base de datos es una colección estructurada de datos. Así, índices de tarjetas, catálogos impresos de artefactos arqueológicos y guías telefónicas son todos ejemplos de bases de datos. Las bases de datos pueden almacenarse en una computadora y examinarse mediante un programa. Estos programas a menudo se denominan "bases de datos", pero más estrictamente son sistemas de gestión de bases de datos (DMS). Así como un índice de tarjetas o un catálogo debe construirse cuidadosamente para que sea útil, también debe hacerlo una base de datos en una computadora. De manera similar, así como hay muchas formas en que se puede organizar un catálogo impreso, hay muchas formas o modelos mediante los cuales se puede organizar una base de datos computarizada. Uno de los modelos más comunes y poderosos es el modelo "relacional" (discutido a continuación), y los programas que usan este modelo se conocen como sistemas de administración de bases de datos relacionales (RDMS).

Las bases de datos informáticas suelen estar organizadas en una o más tablas. Una tabla almacena datos en un formato similar a una tabla publicada y consta de una serie de filas y columnas. Para llevar la analogía más allá, así como una tabla publicada tendrá un título en la parte superior de cada columna, cada columna en una tabla de base de datos tendrá un nombre, a menudo llamado nombre de campo. El término campo se usa a menudo en lugar de columna. Cada fila de una tabla representará un ejemplo del tipo de objeto sobre el que se han recopilado datos. La Tabla 1 (a) (p.) Es un ejemplo de una tabla de una base de datos de ciudades inglesas. Cada fila, en este caso una ciudad, es una entidad y cada columna representa un atributo de esa entidad. Por tanto, en esta tabla, "población" es un atributo de "ciudad".

Una ventaja de las tablas por ordenador es que se pueden presentar en pantalla en una variedad de órdenes, formatos o, según ciertos criterios, todas las ciudades de Hertfordshire o todas las ciudades con catedral.

Las bases de datos a menudo se clasifican en una de dos categorías amplias. El primero comprende bases de datos limitadas de propósito específico. En el mundo académico, estos a menudo contienen datos recopilados para realizar una investigación relativamente limitada solo en un proyecto en particular. La base de datos puede estar destinada a proporcionar al investigador un conjunto particular de datos, pero no tiene una función o función en particular al final del proyecto. Por ejemplo, la base de datos de Lockyear's Coin Hoards of the Roman Republic (CHRR) incluía solo los datos necesarios para el proyecto en cuestión [LockyearLockyear1996, capítulo 5].

La segunda categoría comprende bases de datos de recursos de uso general. Un buen ejemplo de una base de datos de recursos son los registros de sitios y monumentos arqueológicos (SMR) de los condados o los registros de monumentos nacionales (Hansen: 1993). Estas bases de datos no son específicas de un proyecto, pero están destinadas a ser de utilidad para una amplia variedad de usuarios. Las bases de datos de recursos generalmente intentan ser integrales dentro de su "dominio de discurso", se mantienen y actualizan y se ponen a disposición de las partes interesadas. Dado que estas bases de datos intentan ser completas para dar cabida a consultas e investigaciones imprevistas, incluyen una amplia variedad de datos que, a su vez, requieren una "estructura de datos" compleja o una forma de almacenar la información.

La base de datos CISP está destinada a ser una base de datos de recursos y, como resultado, tiene una estructura de datos compleja (que se analiza a continuación). Sin embargo, esta estructura proporciona un gran poder y flexibilidad tanto para la recuperación como para el manejo de los datos, pero también para la futura expansión de la base de datos para incluir otra información y materiales.

  • Es una pérdida de tiempo ingresar los mismos datos repetidamente.
  • Aumenta las posibilidades de error. En la Tabla 1 (b), la población de Hertfordshire se ha escrito mal en la tercera fila.
  • Los errores de entrada crearán errores en la recuperación de datos, que probablemente sean menos visibles / predecibles en consultas complejas.
  • Es una pérdida de espacio en disco; esto puede ser una consideración importante con grandes bases de datos.
  • Puede ralentizar algunas consultas en la base de datos.
  • Las actualizaciones o correcciones deben aplicarse a varias filas.
[Una tabla de ciudades inglesas]
pueblo condado población ciudad del condado? ¿catedral?
Welwyn Garden City Hertfordshire 40,570 No No
St. Albans Hertfordshire 123,800 No
Hertford Hertfordshire 2,023 No
Durham Durham 29,490
[Una mesa mal diseñada]
pueblo condado población ciudad del condado? ¿catedral? población del condado tamaño del condado
Welwyn Garden City Hertfordshire 40,570 No No 937,300 631
St. Albans Hertfordshire 123,800 No 937,300 631
Hertford Hertfordshire 2,023 No 397,300 631
Durham Durham 29,490 132,681 295
Essex 1,426,200 1,528
[Una tabla de condados]
condado población tamaño (millas cuadradas)
Hertfordshire 937,300 631
Durham 132,681 295
Essex 1,426,200 1,528

Un segundo problema con la tabla se puede ver en la última fila. Tenemos información sobre la población de Essex en su conjunto, pero ninguna sobre ninguna ciudad en particular. Para acomodar esta información, hemos tenido que crear una fila de datos con solo información parcial. Además de estos problemas, una estructura de datos deficiente puede provocar inflexibilidad en el uso de la base de datos y posiblemente problemas para recuperar los datos en la forma requerida. Los ejemplos de diseño deficiente de bases de datos son demasiado comunes.

Para resolver estos problemas, los datos deben dividirse en varias tablas. Para seguir el ejemplo de la ciudad, podríamos tener una tabla de ciudades como se muestra en la Tabla 1 (a). Cada elemento de información almacenado en esta tabla es un atributo de una ciudad. Luego, la información sobre los condados se almacena en una segunda tabla separada de condados, como se muestra en la Tabla 1 (c). En esta tabla, cada elemento de información es un atributo de un condado. Este proceso de descomposición de datos en una serie de tablas se denomina normalización y es el primer paso y el más importante en el diseño de una base de datos relacional.

La normalización es el proceso de identificar entidades y sus atributos y definir la relación entre las entidades. En nuestro ejemplo, tenemos dos entidades: ciudades y condados, y hemos registrado varios atributos (Tablas 1 (a) y amp 1 (c)). Hay tres tipos de relación entre entidades: uno a uno, uno a muchos y muchos a muchos. La Figura 1 muestra los diferentes tipos de relación en forma esquemática que se analizan en detalle a continuación. Este tipo de diagrama se conoce como diagrama de relación de entidades.

Relaciones uno a uno

Un caso especial de una relación de uno a uno es cuando determinados datos solo existen, o solo son aplicables, a algunas de las entradas de una tabla. En nuestro ejemplo geográfico, es posible que deseemos registrar la longitud de la línea costera u otros atributos que solo se relacionan con los condados que bordean el mar. En estos casos, se puede crear una tabla separada para esta información. Esto ayuda a ahorrar espacio en disco en la computadora, minimizar el tiempo de entrada de datos y desglosar tablas potencialmente grandes. Este tipo de relación se muestra en la Figura 1 (b).

Relaciones uno a muchos

Relaciones de muchos a muchos

Este tipo de relación requiere el uso de la tercera tabla. Esto crea efectivamente dos relaciones de uno a varios. Estas tablas intermedias pueden denominarse tablas de enlace. Estas tablas a menudo solo contienen dos columnas que actúan como enlace entre las dos tablas principales. En nuestro ejemplo geográfico, la tabla de enlace contendría los nombres de los condados y solo los nombres de los ríos. Esta solución para modelar relaciones de muchos a muchos se ilustra en la Figura 1 (e).

[Una relación de uno a uno solo para algunas entidades]

[Una relación de muchos a muchos]

[División de una relación de varios a varios en dos relaciones de uno a varios]

Claves primarias y externas

Cada fila de una tabla en una base de datos relacional debe ser única, no debe haber dos filas idénticas. Por lo tanto, una o más columnas se designan como clave primaria (a veces denominada identificador único) para los elementos que contiene. Por lo tanto, en la Tabla 1 (a) la columna "ciudad" podría actuar como la clave principal, y en la Tabla 1 (c) la columna "condado" puede actuar como la clave principal de esa tabla. Este concepto se ha utilizado en bases de datos en papel (publicadas), cada piedra inscrita catalogada en RAS Macalister's Corpus Inscriptionum Insularum Celticarum Macalister: 1945, Macalister: 1949 tiene un número de identificación único, al igual que cada tesoro en las acumulaciones de monedas republicanas romanas de Crawford Crawford: 1969: b.

En nuestro ejemplo geográfico, sin embargo, puede haber más de una ciudad con el mismo nombre, Newcastle o Newport, por ejemplo. En este caso, podríamos designar las columnas "ciudad" y "condado" juntas como la clave principal.

Las claves externas son columnas en una tabla que proporcionan un enlace a otra tabla. En nuestro ejemplo geográfico, la columna de condado en nuestra tabla de ciudades proporciona un enlace a la tabla de condados y, por lo tanto, es un campo clave en esa relación. Por lo tanto, es muy importante asegurarse de que las entradas en ambas tablas sean idénticas, que ambas tablas utilicen el nombre completo del condado (Hertfordshire) o una abreviatura (Herts) pero no una combinación de los dos.

Hay una complejidad final que debe abordarse. ¿Qué podríamos hacer en el caso de que haya dos pueblos con el mismo nombre en el mismo condado? Aunque en nuestro ejemplo es poco probable, en bases de datos de otra información esto podría suceder. Podríamos usar una combinación de nombre, condado y población como clave principal para la tabla de ciudades. Si tuviéramos una tabla de tiendas, tendríamos que incluir el nombre de la ciudad, el condado y la población para proporcionar un vínculo entre las dos tablas. Sin embargo, esto volverá a introducir el problema de la redundancia de datos. Un mejor curso de acción es asignar un código único a cada ciudad y utilizar este código como enlace a la tabla de tiendas. El uso de códigos tiene otras ventajas: puede ser bastante corto y, por lo tanto, ahorrar tiempo durante la entrada de datos y el espacio en disco. Estos códigos pueden ser asignados por el usuario, WGC para Welwyn Garden City, o puede ser un número secuencial creado automáticamente por el programa.

Tipos de datos y definición

Los datos almacenados en tablas se pueden clasificar en tipos. En la Tabla 1 (a), la primera columna puede contener cualquier letra, número u otro carácter (como La tercera columna para la población contiene un número y es un tipo de datos numéricos. Las dos últimas columnas son "lógicas" y solo pueden contener sí o No. Hay otros tipos de datos como fecha o incluso imágenes y sonidos.

El tipo de datos es importante ya que los diferentes tipos de datos se comportan de diferentes maneras. Un buen ejemplo es el orden de clasificación de una serie de números. Si almacenamos 1, 22, 3, 10, 2 y 15 en una columna numérica y le pedimos al programa que ordene las filas de la tabla en esta columna, obtendremos 1, 2, 3, 10, 15, 22 a medida que podría esperar. Si esa columna se definiera como un tipo de datos alfanuméricos, el resultado sería 1, 10, 15, 2, 22, 3, ¡un resultado bastante diferente! Los diferentes DMS tienen diferentes formas de manejar diferentes tipos de datos (ver más abajo).

También se debe definir cada columna de datos. Esto puede ser bastante simple, "la columna del condado contendrá el nombre completo del condado". También tenemos que decidir qué significan las entradas, en la tabla de condados tenemos una columna para el área; tenemos que decidir si esta es el área en millas cuadradas o kilómetros cuadrados.

Es posible que deseemos restringir las posibles entradas en una columna. Podemos hacer esto para evitar errores, podemos decidir que la población máxima permitida en una ciudad es 10,000,000 ya que ninguna ciudad en Gran Bretaña tiene una población mayor que esa. También es posible que deseemos restringir las entradas a una lista limitada de términos. Si, por ejemplo, tuviéramos "tipo" como atributo de ciudad, podríamos tener ciudad comercial, ciudad pequeña, ciudad de condado, aldea, aldea pequeña, aldea, etc. Si se permitiera algún término, este atributo no sería muy útil para recuperar grupos de asentamientos de manera significativa. Por lo tanto, podríamos crear una lista de términos permitidos que estén definidos con precisión y que, por lo tanto, permitan una recuperación de datos significativa.

Tablas de búsqueda

En la sección anterior se discutieron los campos de datos restringidos. ¿Cómo, en la práctica, se deben restringir las entradas en los campos? El primer método es que los términos permitidos se enumeren en un manual como este, y que cada usuario sea lo suficientemente disciplinado para usar esos términos y verifique que han usado los correctos. Sin embargo, existen ventajas al almacenar estos términos en la computadora junto con las principales tablas de datos. Por tanto, existen dos métodos más. La primera es incluir las definiciones en una aplicación de base de datos (ver más abajo), o en la forma en que se define la tabla dentro del DMS. Esto tiene la desventaja de que la información depende del software que se esté utilizando, y si los datos se transfieren ("portan") a otro programa, esta información se perderá. También es difícil agregar nuevos términos a la lista. El segundo método alternativo es utilizar tablas de búsqueda, de las cuales hay dos tipos, simples y jerárquicas.

Las tablas de búsqueda simples suelen constar de una o dos columnas. En un ejemplo de una columna, la lista de términos permitidos se almacena en la tabla en un ejemplo de dos columnas, la primera columna almacena el término permitido, a menudo en forma de código, y la segunda columna almacena la definición de ese término o código. Un buen ejemplo de tablas de búsqueda simples son las tablas POSIT1, POSIT2 y POSIT3 que se describen en la página.

Las tablas de búsqueda jerárquica son muy similares en que una columna contiene una serie de términos o códigos únicos. Las columnas restantes luego contienen definiciones de ese código, pero en diferentes niveles de detalle. Usando nuestro ejemplo geográfico, podríamos querer clasificar los ríos. La tabla de búsqueda contendría una columna de códigos. Otra columna podría contener una clasificación amplia, como "río principal", "río menor" y "arroyo". Una tercera columna podría luego subdividir aún más la clasificación, los ríos principales podrían dividirse en "mareomotriz" y "no mareal", y una cuarta columna podría dividir "marea" en "estuarino" y "no estuarino". La tabla SITETYPE discutida en la sección 10.6 es un buen ejemplo de una tabla de búsqueda jerárquica.

Las tablas de búsqueda jerárquicas tienen una función doble: restringir las entradas en una segunda tabla (a veces llamada tabla principal) y proporcionar un mecanismo mediante el cual las consultas complejas se pueden simplificar. Ambos tipos de tablas de búsqueda se pueden usar para crear resultados impresos a partir de la base de datos que se entienden más fácilmente, reemplazando una serie de códigos posiblemente oscuros con fragmentos de texto más descriptivos.

Los siguientes capítulos examinan el contenido y la estructura de la base de datos CISP en general, y luego proporcionan una guía de definición de datos para todas las tablas y campos.


Manipulación de tablas de datos en Mathematica

Soy un estadístico que busca una forma eficiente de seleccionar filas o columnas de una tabla de datos en Mathematica. Permítanme plantear la pregunta en 2 partes con una tabla de datos estilo SQL:

Que, cuando se formatea como una cuadrícula, se ve más o menos así:

Parte 1: ¿Cómo se pueden establecer los datos en el encabezado de la tabla, por ejemplo, "ID", como el nombre de la lista para esa columna? Idealmente, el resultado le permitiría hacer lo siguiente:

¿Se necesitaría escribir una función para diseccionar la fila del encabezado y luego alinear los nombres del encabezado como el nombre de una lista que corresponde al encabezado apropiado? Aunque uno podría preguntarse '¿Por qué no referirse a todo como un puesto y evitar por completo el dolor de cabeza del cambio de nombre?' Cuando se trabaja con decenas o cientos de columnas / variables, resulta extremadamente engorroso utilizar una posición sin sentido para hacer referencia a una variable.

Parte 2: ¿Cómo se puede devolver una fila individual o un subconjunto de filas de una tabla? Básicamente, estoy buscando el equivalente de la cláusula "WHERE" en SQL o la función "subconjunto" en R.

Por ejemplo, en la columna "ID", es posible que desee recuperar todas las filas donde "ID" == "Alfa". ¿Tengo que crear un método que itera sobre la lista "ID", almacena la posición en la lista donde el valor del elemento es igual a "Alfa", y luego concatenar una lista que contenga el valor en esa posición para todos los otras listas?

Estoy seguro de que podría escribir las funciones que menciono, pero parece inconcebible que Mathematica pase por alto una tarea de manipulación de datos tan rudimentaria. Entiendo que también existe el paquete DataManipulation que permite consultas SQL, pero tengo que creer (¿espero?) Que hay una forma nativa de Mathematica que es más rápida.

¡Gracias por consentirme! ¡Y mis disculpas de antemano a todos los aficionados a Mathematica que podrían ver esto como una pregunta corrupta por intentar programar en otro idioma mientras están en Mathematica!


5. 6 Bases de datos

Cuando un conjunto de datos se vuelve muy grande, o incluso muy complejo en su estructura, la solución de almacenamiento definitiva es una base de datos.

El término & # 8220database & # 8221 se puede utilizar generalmente para describir cualquier recopilación de información. En esta sección, el término & # 8220database & # 8221 significa una base de datos relacional, que es una colección de datos que está organizada de una manera particular.

El mecanismo de almacenamiento físico real para una base de datos, ya sea que se utilicen formatos binarios o de texto, y si se usan un archivo o muchos archivos, no nos preocupará. Solo nos ocuparemos de la organización conceptual de alto nivel de los datos y confiaremos en el software para decidir la mejor manera de almacenar la información en archivos.

El software que maneja la representación de los datos en la memoria de la computadora, y nos permite trabajar a nivel conceptual, se denomina sistema de administración de bases de datos (DBMS), o en nuestro caso, más específicamente, sistema de administración de bases de datos relacionales (RDBMS).

Los principales beneficios de las bases de datos para el almacenamiento de datos se derivan del hecho de que las bases de datos tienen una estructura formal. Dedicaremos gran parte de esta sección a describir y discutir cómo se diseñan las bases de datos, para que podamos apreciar los beneficios de almacenar datos en una base de datos y para que sepamos lo suficiente para poder trabajar con datos que se han almacenado en una base de datos.

No nos preocupan los formatos de archivo que se utilizan para almacenar una base de datos. En cambio, nos ocuparemos de los componentes conceptuales utilizados para almacenar datos en una base de datos.

Una base de datos relacional consiste en un conjunto de tablas, donde una tabla es conceptualmente como un archivo de texto sin formato o una hoja de cálculo: un conjunto de valores dispuestos en filas y columnas. La diferencia es que generalmente hay varias tablas en una sola base de datos y las tablas de una base de datos tienen una estructura mucho más formal que un archivo de texto sin formato o una hoja de cálculo.

Para demostrar los conceptos y la terminología de las bases de datos, trabajaremos con un ejemplo sencillo de almacenamiento de información sobre libros. El conjunto completo de información se muestra en la Figura 5.18, pero solo consideraremos subconjuntos específicos de información de libros en varias etapas a lo largo de esta sección para demostrar diferentes ideas sobre bases de datos.

Figura 5.18: Información sobre un conjunto de libros, incluido el ISBN y el título del libro, el autor del libro y el género del autor, el editor del libro y el país de origen del editor.

A continuación se muestra un ejemplo simple de una tabla de base de datos que contiene información sobre algunos de los libros de nuestro conjunto de datos. Esta tabla tiene tres columnas (el ISBN del libro, el título del libro y el autor del libro) y cuatro filas, cada fila representa un libro.

Cada tabla en una base de datos tiene un nombre único y cada columna dentro de una tabla tiene un nombre único dentro de esa tabla.

Cada columna de una tabla de base de datos también tiene un tipo de datos asociado, por lo que todos los valores en una sola columna son el mismo tipo de datos. En el ejemplo de la base de datos de libros, todos los valores en las tres columnas son valores de texto o caracteres. El ISBN se almacena como texto, no como un número entero, porque es una secuencia de 10 dígitos (a diferencia de un valor decimal). Por ejemplo, si almacenamos el ISBN como un número entero, perderíamos el 0 inicial.

Cada tabla de una base de datos tiene una clave principal. La clave principal debe ser única para cada fila de una tabla. En la tabla de libros, el ISBN proporciona una clave primaria perfecta porque cada libro tiene un ISBN diferente.

Es posible crear una clave primaria combinando los valores de dos o más columnas. Esto se denomina clave primaria compuesta. Una tabla solo puede tener una clave principal, pero la clave principal puede estar compuesta por más de una columna. Veremos algunos ejemplos de claves primarias compuestas más adelante en este capítulo.

Una base de datos que contiene información sobre libros también puede contener información sobre editores de libros. A continuación mostramos otra tabla en la misma base de datos que contiene información sobre los editores.

En esta tabla, los valores de la columna ID son todos números enteros. Todas las demás columnas contienen texto. La clave principal de esta tabla es la columna ID.

Las tablas dentro de la misma base de datos se pueden relacionar entre sí mediante claves externas. Estas son columnas en una tabla que especifican un valor de la clave principal en otra tabla. Por ejemplo, podemos relacionar cada libro en book_table con un editor en publisher_table agregando una clave externa a book_table. Esta clave externa consta de una columna, pub, que contiene el ID de editor correspondiente. El book_table ahora se ve así:

Observe que dos de los libros de book_table tienen el mismo editor, con un valor de publicación de 1. Esto corresponde al editor con un valor de ID de 1 en publisher_table, que es el editor llamado Mallinson Rendel.

También observe que una columna de clave externa en una tabla no tiene que tener el mismo nombre que la columna de clave primaria a la que hace referencia en otra tabla. La columna de clave externa en book_table se llama pub, pero se refiere a la columna de clave principal en publisher_table llamada ID.

Los ejemplos de tablas de base de datos en la sección anterior han mostrado el contenido de cada tabla de base de datos. En la siguiente sección, sobre Diseño de bases de datos, será más importante describir el diseño o la estructura de una tabla de base de datos: el esquema de la tabla. Para este propósito, el contenido de cada fila no es importante en cambio, estamos más interesados ​​en cuántas tablas hay y qué columnas se utilizan para componer esas tablas.

Podemos describir el diseño de una base de datos simplemente en términos de los nombres de las tablas, los nombres de las columnas, qué columnas son claves primarias y qué columnas son claves externas.

La notación que usaremos es una descripción de texto simple, con claves primarias y claves externas indicadas entre corchetes. La descripción de una clave externa incluye el nombre de la tabla y el nombre de la columna a la que se refiere la clave externa. Por ejemplo, estos son el esquema para publisher_table y book_table en la base de datos de libros:

El siguiente diagrama muestra una forma en que se podría visualizar este diseño. Cada & # 8220box & # 8221 en este diagrama representa una tabla en la base de datos, con el nombre de la tabla como encabezado en el cuadro. Los otros nombres en cada cuadro son los nombres de las columnas dentro de la tabla si el nombre está en negrita, entonces esa columna es parte de la clave principal de la tabla y si el nombre está en cursiva, entonces esa columna es una clave externa. Las flechas se utilizan para mostrar el vínculo entre una clave externa en una tabla y la clave principal en otra tabla.

Publisher_table tiene tres columnas y la columna denominada ID es la clave principal de la tabla.

Book_table tiene cuatro columnas. En esta tabla, la clave principal es la columna ISBN y la columna de publicación es una clave externa que hace referencia a la columna de ID en la tabla_del_editor.

5. 6. 3 Diseño de base de datos

Como vimos con los documentos XML en la Sección 5.5.2, las bases de datos nos permiten almacenar información de diversas formas, lo que significa que hay que tomar decisiones de diseño. En esta sección, discutiremos brevemente algunos de los problemas relacionados con el diseño de bases de datos.

El diseño de una base de datos se reduce a tres cosas: cuántas tablas se requieren, qué información va en cada tabla y cómo se vinculan las tablas entre sí. El resto de esta sección proporciona algunas reglas y pautas para determinar una solución para cada uno de estos pasos.

Esta sección no proporciona una discusión exhaustiva ni una discusión completamente rigurosa sobre el diseño de bases de datos. La importancia de esta sección es proporcionar una introducción básica a algunas ideas útiles y formas de pensar sobre los datos. También es necesaria una comprensión básica de estos problemas para poder trabajar con datos que se han almacenado en una base de datos.

Una forma de abordar el diseño de bases de datos es pensar en términos de entidades, sus atributos y las relaciones entre ellas.

Una entidad se considera más fácilmente como una persona, lugar u objeto físico (por ejemplo, un libro), un evento o un concepto. Un atributo es un dato sobre la entidad. Por ejemplo, el título, el autor y el ISBN son todos atributos de una entidad de libro.

En términos de un conjunto de datos de investigación, cada variable del conjunto de datos corresponde a un atributo. La tarea de diseñar una base de datos para almacenar el conjunto de datos se reduce a asignar cada variable a una entidad en particular.

Habiendo decidido un conjunto de entidades y sus atributos, el diseño de una base de datos consiste en una tabla separada para cada entidad y una columna separada dentro de cada tabla para cada atributo de la entidad correspondiente.

En lugar de almacenar un conjunto de datos como una gran tabla de información, esta regla sugiere que deberíamos usar varias tablas, con información sobre diferentes entidades en tablas separadas. En el ejemplo de la base de datos de libros, hay información sobre al menos dos entidades, libros y editores, por lo que tenemos una tabla separada para cada una de ellas.

Estas ideas de entidades y atributos son las mismas ideas que se discutieron para el diseño XML en la Sección 5.5.2, solo que con una terminología diferente.

Una relación es una asociación entre entidades. Por ejemplo, una editorial publica libros y una editorial publica un libro. Las relaciones se representan en una base de datos mediante pares de clave externa-clave principal, pero los detalles dependen de la cardinalidad de la relación, ya sea que la relación sea uno a uno, muchos a uno o muchos a muchos.

Por ejemplo, un libro es publicado exactamente por una editorial, pero una editorial publica muchos libros, por lo que la relación entre libros y editores es de muchos a uno.

Este tipo de relación se puede representar colocando una clave externa en la tabla de libros (el lado & # 8220many & # 8221) que hace referencia a la clave principal en la tabla para editores (el lado & # 8220one & # 8221). Este es el diseño que ya hemos visto, en la página, donde book_table tiene una clave externa, pub, que se refiere a la clave principal, ID, en publisher_table.

Las relaciones de uno a uno se pueden manejar de manera similar a las relaciones de muchos a uno (no importa qué tabla obtenga la clave externa), pero las relaciones de muchos a muchos son más complejas.

En nuestro ejemplo de base de datos de libros, podemos identificar otro tipo de entidad: los autores.

Para acomodar la información sobre los autores en la base de datos, debe haber otra tabla para la información del autor. En el siguiente ejemplo, la tabla solo contiene el nombre del autor, pero se podría agregar otra información, como la edad y la nacionalidad del autor.

¿Cuál es la relación entre libros y autores? Un autor puede escribir varios libros y un libro puede tener más de un autor, por lo que este es un ejemplo de una relación de varios a varios.

Una relación de varios a varios solo se puede representar creando una nueva tabla en la base de datos.

Por ejemplo, podemos crear una tabla, llamada book_author_table, que contiene la relación entre autores y libros. Esta tabla contiene una clave externa que hace referencia a la tabla de autor y una clave externa que hace referencia a la tabla del libro. La representación de entidades de libros, entidades de autor y la relación entre ellas ahora consta de tres tablas, como se muestra a continuación.

El diseño de la base de datos del libro, con la información del autor incluida, se muestra en el diagrama siguiente.

El contenido de estas tablas para varios libros se muestra a continuación. La tabla de autores solo enumera los autores de los que tenemos información:

Book_table solo enumera los libros que están en la base de datos:

Book_author_table contiene la asociación entre libros y autores:

Tenga en cuenta que el autor 2 (Lynley Dodd) ha escrito más de un libro y el libro 0908606273 (Mi gato le gusta esconderse en cajas) tiene más de un autor.

5. 6. 3. 3 Diseño para la integridad de los datos

Otra razón para crear una tabla en una base de datos es con el propósito de restringir el conjunto de valores posibles para un atributo. Por ejemplo, si la tabla de autores registra el género del autor, puede ser útil tener una tabla separada que contenga los posibles valores de género. La columna en la tabla de autor se convierte en una clave externa que hace referencia a la tabla de género y, debido a que una clave externa debe coincidir con el valor de la clave principal correspondiente, tenemos una verificación de la validez de los valores de género en la tabla de autor.

La tabla de autor rediseñada y la tabla de género se describen a continuación.

Gender_table solo contiene el conjunto de posibles valores de género, como se muestra a continuación.

El diseño final de la base de datos del libro, que consta de cinco tablas, se muestra en el siguiente diagrama.

Otra forma de abordar el diseño de bases de datos es elegir tablas y columnas dentro de las tablas en función de si satisfacen un conjunto de reglas llamadas formas normales.

Este proceso, más formal, de diseño de bases de datos se llama normalización.

Hay varias formas normales, pero solo mencionaremos las tres primeras porque cubrirán situaciones más simples.

La definición adecuada de normalización depende de conceptos de bases de datos relacionales más avanzados que están más allá del alcance de este libro, por lo que las descripciones siguientes son solo para dar una idea de cómo funciona el proceso.

Primera forma normal
La primera forma normal requiere que las columnas de una tabla sean atómicas, no debe haber columnas duplicadas y cada tabla debe tener una clave primaria.

La primera parte de esta regla dice que una columna en una tabla de base de datos solo debe contener un valor único. Como ejemplo, considere el siguiente diseño posible de una mesa para almacenar información sobre libros. Hay una columna para el título del libro y otra columna para todos los autores del libro.

A continuación se muestran dos filas de esta tabla.

La primera columna de esta tabla es aceptable porque solo contiene un dato: el título del libro. Sin embargo, la segunda columna no es atómica porque contiene una lista de autores para cada libro. El libro de la segunda fila tiene dos autores registrados en la columna de autores. Esto viola la primera forma normal.

La segunda parte de la regla dice que una tabla no puede tener dos columnas que contengan la misma información. Por ejemplo, el siguiente posible rediseño de la tabla del libro proporciona una solución al problema anterior al tener una columna separada para cada autor del libro.

A continuación se muestran dos filas de esta tabla.

Esto resuelve el problema de las columnas atómicas porque cada columna solo contiene el nombre de un autor. Sin embargo, la tabla tiene dos columnas duplicadas: autor1 y autor2. Estas dos columnas registran la misma información, nombres de autor, por lo que este diseño también viola la primera forma normal.

A continuación se muestra un posible rediseño que satisface el requisito de que cada columna sea atómica y no duplicada. Ahora tenemos solo una columna para el título del libro y una columna para los nombres de los autores.

El contenido de esta tabla se muestra a continuación. Observe que el segundo libro ocupa ahora dos filas porque tiene dos autores.

La parte final de la primera regla de forma normal dice que debe haber una columna en la tabla que tenga un valor único en cada fila (o debe ser posible combinar varias columnas para obtener un valor único para cada fila). En otras palabras, cada tabla debe tener una clave primaria.

¿Podemos encontrar una clave principal en la tabla anterior?

Ni la columna del título ni la columna del autor por sí mismas sirven como clave principal porque algunos valores se repiten en cada una de estas columnas.

Podríamos combinar las dos columnas para crear una clave primaria compuesta. Sin embargo, también es importante pensar no solo en los datos que se encuentran actualmente en una tabla, sino también en los posibles valores que se podrían ingresar en la tabla en el futuro (o incluso solo en teoría). En este caso, es posible que un libro se publique tanto en formato de tapa dura como en rústica, los cuales tendrían el mismo título y autor, por lo que aunque una clave primaria compuesta funcionaría para las tres filas que se muestran a continuación, no lo es. necesariamente una elección inteligente.

Como se describió anteriormente, para el caso de la información sobre libros, un gran candidato para una clave primaria es el ISBN del libro porque se garantiza que será único para un libro en particular. Si agregamos una columna de ISBN a la tabla, finalmente podemos satisfacer la primera forma normal, aunque todavía tiene que ser una clave primaria compuesta que involucre la combinación de ISBN y autor.

El contenido de esta tabla se muestra a continuación.

Esta no es una solución ideal para almacenar esta información, pero al menos satisface la primera forma normal. La consideración de la segunda y tercera forma normal ayudará a mejorar el diseño.

Segunda forma normal
La segunda forma normal requiere que una tabla tenga la primera forma normal y que todas las columnas de la tabla se relacionen con la clave primaria completa.

Esta regla formaliza la idea de que debe haber una tabla para cada entidad en el conjunto de datos.

Como ejemplo muy básico, considere la siguiente tabla que contiene información sobre autores y editores. La clave principal de esta tabla es el ID del autor. En otras palabras, cada fila de esta tabla concierne a un solo autor.

A continuación se muestran dos filas de esta tabla.

La columna de nombre de esta tabla se relaciona con la clave principal (el ID) este es el nombre del autor. Sin embargo, la columna del editor no se relaciona con la clave principal. Este es el editor de un libro. En otras palabras, la información sobre editoriales pertenece a una tabla sobre editoriales (o posiblemente una tabla sobre libros), no a una tabla sobre autores.

Como un ejemplo más sutil, considere la tabla con la que terminamos al final de la primera forma normal.

La clave principal de esta tabla es una combinación de ISBN y autor (cada fila de la tabla contiene información sobre un autor de un libro).

La columna del título se relaciona con el ISBN, este es el título del libro. Sin embargo, la columna del título no se relaciona con el autor, ¡este no es el título del autor!

La tabla debe dividirse en dos tablas, una con la información sobre los libros y otra con la información sobre los autores. A continuación se muestra la información relacionada con el libro separada en su propia tabla.

Es importante recordar que cada una de las nuevas tablas que creamos para satisfacer la segunda forma normal también debe satisfacer la primera forma normal. En este caso, sería prudente agregar una columna de ID para que actúe como clave principal para la tabla de autores, como se muestra a continuación, porque es muy posible que dos autores distintos puedan compartir el mismo nombre.

Como deja en claro este ejemplo, habiendo dividido una tabla en dos o más piezas, es muy importante vincular las piezas agregando una o más claves foráneas, según las relaciones entre las tablas. En este caso, la relación es de varios a varios, por lo que la solución requiere una tercera tabla para proporcionar un vínculo entre los libros y los autores.

Tercera forma normal
La tercera forma normal requiere que una tabla esté en la segunda forma normal y todas las columnas de la tabla deben relacionarse solo con la clave primaria (no entre sí).

Esta regla enfatiza aún más la idea de que debe haber una tabla separada para cada entidad en el conjunto de datos. Por ejemplo, considere la siguiente tabla para almacenar información sobre libros.

La clave principal de esta tabla es el ISBN, que identifica un libro de forma única. La columna del título se relaciona con el libro, este es el título del libro. Cada fila de esta tabla tiene aproximadamente un libro.

La columna del editor también se relaciona con el libro. Este es el editor del libro. Sin embargo, la columna del país no se relaciona directamente con el libro, este es el país del editor. Eso, obviamente, es información sobre el libro, es el país del editor del libro, pero la relación es indirecta, a través del editor.

Existe una heurística simple que facilita la detección de este tipo de problema en una tabla de base de datos. Tenga en cuenta que la información en las columnas de editor y país es idéntica para los libros publicados por Mallinson Rendel. Cuando dos o más columnas repiten la misma información una y otra vez, es una señal segura de que no se está cumpliendo con la segunda o tercera forma normal.

En este caso, el análisis de la tabla sugiere que debería haber una tabla separada para la información sobre el editor.

La aplicación de las reglas de normalización generalmente da como resultado la creación de múltiples tablas en una base de datos.Se debe consultar la discusión anterior sobre las relaciones para asegurarse de que cualquier tabla nueva esté vinculada al menos a otra tabla en la base de datos utilizando un par de clave primaria y clave externa.

El resultado de la normalización es una base de datos bien organizada que debería ser fácil de mantener. Sin embargo, la normalización puede producir una base de datos que sea lenta en términos de acceso a los datos (porque los datos de muchas tablas deben recombinarse).

La desnormalización es el proceso de violar deliberadamente formas normales, típicamente para producir una base de datos a la que se puede acceder más rápidamente.

Una base de datos bien diseñada, particularmente una que satisfaga la tercera forma normal, tendrá la característica de que cada pieza de información se almacena solo una vez. Una menor repetición de los valores de los datos significa que una base de datos bien diseñada generalmente requerirá menos memoria que almacenar un conjunto de datos completo en un formato de tabla única. Menos repetición también significa que una base de datos bien diseñada es más fácil de mantener y actualizar, porque si es necesario realizar un cambio, solo debe realizarse en una ubicación. Además, hay menos posibilidades de que se introduzcan errores en el conjunto de datos. Si hay varias copias de la información, es posible que las copias no estén de acuerdo, pero con una sola copia no puede haber desacuerdos.

Estas ideas son una expresión del principio DRY de la Sección 2.7. Una base de datos bien diseñada es la encarnación definitiva del principio DRY para el almacenamiento de datos.

5. 6. 5 Estudio de caso: The Data Expo (continuación)

El conjunto de datos de Data Expo consta de siete variables atmosféricas registradas en 576 ubicaciones para 72 puntos de tiempo (cada mes durante 6 años), más datos de elevación para cada ubicación (consulte la Sección 5.2.8).

Los datos se almacenaron originalmente como 505 archivos de texto sin formato, donde cada archivo contiene los datos de una variable durante un mes. La Figura 5.19 muestra las primeras líneas de uno de los archivos de texto sin formato.

Como hemos comentado anteriormente en este capítulo, este formato simple hace que los datos sean muy accesibles. Sin embargo, este es un ejemplo en el que un formato de texto sin formato es bastante ineficaz porque se repiten muchos valores. Por ejemplo, la información de longitud y latitud para cada ubicación en el conjunto de datos se almacena en cada archivo, lo que significa que esa información se repite más de 500 veces. Eso no solo ocupa más espacio de almacenamiento del necesario, sino que también viola el principio DRY, con todas las consecuencias negativas que se derivan de eso.

Figura 5.19: Uno de los archivos de texto sin formato del formato original del conjunto de datos de Data Expo, que contiene datos para una variable durante un mes. El archivo contiene información sobre latitud y longitud que se repite en todos los demás archivos de texto sin formato en el formato original (para cada variable y para cada mes en total, más de 500 veces).

En esta sección, consideraremos cómo el conjunto de datos de Data Expo podría almacenarse como una base de datos relacional.

Para empezar, consideraremos el problema desde una perspectiva de entidades y atributos. ¿Qué entidades hay en el conjunto de datos? En este caso, las diferentes entidades que se están midiendo son relativamente fáciles de identificar. Hay mediciones en la atmósfera y las mediciones se toman en diferentes lugares y en diferentes momentos. Tenemos información sobre cada punto temporal (es decir, una fecha), tenemos información sobre cada ubicación (longitud, latitud y elevación) y tenemos varias mediciones de la atmósfera. Esto sugiere que deberíamos tener tres tablas: una para medidas atmosféricas, otra para ubicaciones y otra para puntos de tiempo.

También es útil mirar el conjunto de datos desde una perspectiva de normalización. Para ello, comenzaremos con toda la información en una sola tabla (solo se muestran 7 filas):

En términos de la primera forma normal, todas las columnas son atómicas y no hay columnas duplicadas, y podemos, con un poco de esfuerzo, encontrar una clave primaria (compuesta): necesitamos una combinación de fecha, lon (longitud) y lat ( latitud) para obtener un valor único para todas las filas.

Pasando a la segunda forma normal, la columna elv (elevación) falla inmediatamente. La elevación en un lugar en particular se relaciona claramente con la longitud y latitud del lugar, pero tiene muy poco que ver con la fecha. Necesitamos una nueva tabla para contener los datos de longitud, latitud y elevación.

El nuevo diseño de la tabla y las primeras tres filas de datos se muestran a continuación.

Esta tabla & # 8220location & # 8221 está en la tercera forma normal. Tiene una clave principal (una combinación de longitud y latitud) y la columna elv se relaciona directamente con toda la clave principal.

Volviendo a la tabla original, las columnas restantes de medidas atmosféricas están todas relacionadas con la clave primaria, los datos en estas columnas representan una observación en una ubicación particular en un momento específico.

Sin embargo, ahora tenemos dos tablas en lugar de solo una, por lo que debemos asegurarnos de que las tablas estén vinculadas entre sí y, para lograr esto, debemos determinar las relaciones entre las tablas.

Tenemos dos tablas, una que representa las mediciones atmosféricas, en varios lugares y horarios, y otra que representa información sobre las ubicaciones. ¿Cuál es la relación entre estas tablas? Cada ubicación (cada fila de la tabla de ubicaciones) corresponde a varias medidas, pero cada medición individual (cada fila de la tabla de medidas) corresponde a una sola ubicación, por lo que la relación es de varios a uno.

Esto significa que la tabla de medidas debe tener una clave externa que haga referencia a la clave principal en la tabla de ubicación. El diseño podría expresarse así:

Ambas tablas tienen claves primarias compuestas. La tabla de medidas también tiene una clave externa compuesta, para referirse a la clave primaria compuesta en la tabla de ubicación. Por último, las columnas de longitud y latitud tienen funciones tanto en la clave principal como en la clave externa de la tabla de medidas.

Un posible ajuste al diseño de la base de datos es considerar una clave sustituta de incremento automático, una columna que solo corresponde al número de fila en la tabla, como la clave primaria para la tabla de ubicación, porque la clave primaria natural es bastante grande y incómodo. Esto conduce a un diseño final que se puede expresar de la siguiente manera.

Otro ajuste sería dividir la columna de la fecha en una tabla separada. Esto está motivado en parte por la idea de la integridad de los datos. Una tabla separada para fechas garantizaría que todas las fechas en la tabla de medidas sean fechas válidas. Además, si la tabla de fechas utiliza una columna de ID de incremento automático, la columna de fecha de la tabla de medidas puede convertirse en un número entero simple, en lugar de un valor de fecha extenso. Finalmente, la tabla de información de fecha puede tener la información de año y mes dividida en columnas separadas, lo que puede hacer que sea más útil trabajar con la información de fecha.

El diseño final de la base de datos de Data Expo se muestra a continuación.

Como verificación final, debemos confirmar que todas estas tablas satisfacen la tercera forma normal.

Cada tabla tiene una clave principal, todas las columnas son atómicas y no hay columnas duplicadas, por lo que se satisface la primera forma normal. Todas las columnas de cada tabla corresponden a la clave principal de la tabla; en particular, cada medición de la tabla de medidas corresponde a una combinación particular de fecha y ubicación, por lo que también se satisface la segunda forma normal. La mayoría de las tablas también satisfacen la tercera forma normal porque las columnas generalmente se relacionan solo con la clave principal de la tabla. Sin embargo, se podría argumentar que, en date_table, las columnas de mes y año se relacionan con la columna de fecha, así como con la clave principal de la tabla. Esta es una buena demostración de una posible justificación para la desnormalización. Hemos dividido estas columnas porque anticipamos que serán útiles para hacer preguntas a la base de datos en el futuro. Las ideas de normalización deben usarse como guías para lograr un diseño de base de datos sensato, pero también pueden entrar en juego otras consideraciones.

Las secciones anteriores han demostrado que las bases de datos son mucho más complejas que la mayoría de las otras opciones de almacenamiento de datos de este capítulo. En esta sección, veremos qué podemos ganar al usar una base de datos para almacenar un conjunto de datos y cuáles son los costos en comparación con otros formatos de almacenamiento.

El modelo de datos relativamente formal de las bases de datos relacionales y los procesos relativamente complejos que intervienen en el diseño de una estructura de base de datos adecuada, valen la pena porque la estructura resultante impone restricciones sobre los datos en una base de datos, lo que significa que hay verificaciones de la precisión y consistencia de la base de datos. datos que se almacenan en una base de datos. En otras palabras, las bases de datos garantizan una mejor integridad de los datos.

Por ejemplo, la estructura de la base de datos asegura que todos los valores en una sola columna de una tabla sean del mismo tipo de datos (por ejemplo, todos son números). Es posible, al configurar una base de datos, hacer cumplir restricciones bastante específicas sobre qué valores pueden aparecer en una columna particular de una tabla. La sección 8.3 proporciona información sobre este tema de la creación de conjuntos de datos.

Otra característica estructural importante de las bases de datos es la existencia de claves externas y claves primarias. El software de base de datos aplicará la regla de que una clave principal debe ser única para cada fila de una tabla y aplicará la regla de que el valor de una clave externa debe hacer referencia a un valor de clave principal existente.

Las bases de datos tienden a usarse para grandes conjuntos de datos porque, para la mayoría de los DBMS, no hay límite en el tamaño de una base de datos. Sin embargo, incluso cuando un conjunto de datos no es enorme, el uso de una base de datos tiene ventajas porque la organización de los datos puede mejorar la precisión y la eficiencia. En particular, las bases de datos permiten que los datos se organicen de diversas formas para que, por ejemplo, los datos con una estructura jerárquica puedan almacenarse de forma eficiente y natural.

Las bases de datos también son ventajosas porque la mayoría de los DBMS proporcionan funciones avanzadas que van mucho más allá de lo que proporciona el software que se utiliza para trabajar con datos en otros formatos (por ejemplo, editores de texto y programas de hojas de cálculo). Estas características incluyen la capacidad de permitir que varias personas accedan e incluso modifiquen los datos a la vez y seguridad avanzada para controlar quién tiene acceso a los datos y quién puede modificarlos.

El primer costo a considerar es monetario. Los sistemas de bases de datos comerciales ofrecidos por Oracle y Microsoft pueden ser muy costosos, aunque existen opciones de código abierto (consulte la Sección 5.6.9) para aliviar esa carga en particular. Sin embargo, también existe el costo de adquirir o contratar la experiencia necesaria para crear, mantener e interactuar con los datos almacenados en una base de datos.

Otra desventaja de usar una base de datos como formato de almacenamiento es que solo se puede acceder a los datos usando una pieza específica de software DBMS.

Por último, es posible que toda la sofisticación y flexibilidad que proporciona una base de datos simplemente no sea necesaria para conjuntos de datos pequeños o para conjuntos de datos que tienen una estructura simple. Por ejemplo, un formato binario como netCDF es muy adecuado para un conjunto de datos geográficos donde las observaciones se realizan en una cuadrícula regular de ubicaciones y en un conjunto fijo de puntos de tiempo y superará a una solución de base de datos de propósito más general.

La inversión necesaria para crear y mantener una base de datos significa que no siempre será una opción adecuada.

5. 6. 7 Flashback: diseño de bases de datos y diseño XML

En la Sección 5.5.2 discutimos algunas ideas básicas para decidir cómo representar un conjunto de datos en un formato XML.

Las ideas del diseño de bases de datos que hemos discutido en la Sección 5.6.3 - entidades, atributos, relaciones y normalización - son muy similares a las ideas del diseño XML, aunque un poco más formales.

Esta similitud surge del hecho de que estamos tratando de resolver esencialmente el mismo problema en ambos casos, y esto puede reflejarse en una correspondencia simple entre diseños de bases de datos y diseños XML para el mismo conjunto de datos.

Como pauta aproximada, una tabla de base de datos puede corresponder a un conjunto de elementos XML del mismo tipo. Cada fila de la tabla corresponderá a un solo elemento XML, con cada columna de valores registrada como un atributo separado dentro del elemento. Aún se aplican las advertencias sobre cuándo no se pueden usar los atributos (consulte la página).

Las relaciones simples de uno a uno o de muchos a uno se pueden representar en XML anidando varios elementos (los muchos) dentro de otro elemento (el uno). Las relaciones más complejas no se pueden resolver anidando, pero los atributos correspondientes a claves primarias y claves externas se pueden usar para emular relaciones entre entidades a través de elementos XML que no están anidados.

5. 6. 8 Estudio de caso: The Data Expo (continuación)

El conjunto de datos de Data Expo consta de varias mediciones atmosféricas tomadas en muchos lugares diferentes y en varios puntos de tiempo. Un diseño de base de datos que desarrollamos para almacenar estos datos constaba de tres tablas: una para los datos de ubicación, otra para los datos de tiempo y otra para las mediciones atmosféricas (consulte la Sección 5.6.5). El esquema de la base de datos se reproduce a continuación para facilitar su consulta.

Podemos traducir este diseño de base de datos en un diseño de documento XML de manera muy simple, creando un conjunto de elementos para cada tabla, con atributos para cada columna de datos. Por ejemplo, el hecho de que exista una tabla para la información de ubicación implica que deberíamos tener elementos de ubicación, con un atributo para cada columna en la tabla de la base de datos. Los datos de las primeras ubicaciones se representan así en una tabla de base de datos:

Los mismos datos podrían representarse en XML de esta manera:

Como análogo de las claves primarias en el diseño de la base de datos, la DTD para este diseño XML podría especificar id como un atributo de ID (ver Sección 6.2.2).

Un elemento XML para la primera fila de date_table podría verse así (nuevamente con id como un atributo de ID en el DTD):

Debido a que existe una relación de varios a varios entre ubicaciones y fechas, no tendría sentido anidar los elementos XML correspondientes. En cambio, los elementos XML que corresponden a las filas de la tabla de medidas podrían incluir atributos que hacen referencia a los elementos de fecha y ubicación relevantes. El siguiente código muestra un ejemplo de cómo se vería un elemento XML de medida.

Para hacer cumplir la integridad de los datos de los atributos fecha y ubicación, la DTD para este diseño XML los especificaría como atributos IDREF (consulte la Sección 6.2.2).

5. 6. 9 Software de base de datos

Cada producto de software de base de datos diferente tiene su propio formato para almacenar las tablas de la base de datos en el disco, lo que significa que los datos almacenados en una base de datos solo son accesibles a través de un software específico.

Esto significa que, si nos dan datos almacenados en un formato de base de datos en particular, nos vemos obligados a utilizar el software correspondiente. Algo que alivia levemente este problema es la existencia de un lenguaje estándar para la consulta de bases de datos. Conoceremos este lenguaje, SQL, en el Capítulo 7.

Si estamos en la posición de almacenar información en una base de datos nosotros mismos, hay una serie de sistemas de gestión de bases de datos de código abierto con todas las funciones para elegir. PostgreSQL 5. 6 y MySQL 5. 7 son opciones muy populares, aunque requieren cierta inversión en recursos y experiencia para configurar porque tienen componentes de software de cliente y servidor separados. SQLite 5. 8 es mucho más simple de configurar y usar, especialmente para una base de datos que solo requiere el acceso de una sola persona que trabaja en una sola computadora.

La sección 7.2.14 proporciona una breve introducción a SQLite.

Los principales sistemas de bases de datos patentados incluyen Oracle, Microsoft SQL Server y Microsoft Access. La interfaz de usuario predeterminada para estos productos de software se basa en menús y cuadros de diálogo, por lo que están más allá del alcance y el interés de este libro. Sin embargo, en todos ellos, al igual que con las interfaces predeterminadas para el software de base de datos de código abierto, es posible escribir código de computadora para acceder a los datos. Escribir estas consultas de datos es el tema del próximo capítulo.

Una clave primaria identifica de forma única cada fila de una tabla. Una clave principal es una columna de una tabla con un valor diferente en cada fila.

Una clave externa relaciona una tabla con otra dentro de una base de datos. Una clave externa es una columna de una tabla que hace referencia a los valores de la clave principal de otra tabla.

Se debe diseñar una base de datos de modo que la información sobre diferentes entidades resida en tablas separadas.

La normalización es una forma de producir un buen diseño de base de datos.

Las bases de datos pueden manejar grandes conjuntos de datos y conjuntos de datos con una estructura compleja, pero las bases de datos requieren un software específico y un cierto nivel de experiencia.

/>
Este trabajo tiene la licencia de Reconocimiento-No comercial-CompartirIgual 3.0 Nueva Zelanda de Creative Commons.