====== Diseño Físico de Bases de Datos de Bases de Datos ====== ===== Diseño Lógico de una BD===== Una vez que hemos realizado el diseño lógico de datos tan solo debemos de aplicarlo a un SGBD concreto. Dependiendo del diseño físico escogido, tendremos un abanico de posibilidades en cuanto al software disponible. En nuestro caso hemos optado por un modelo relacional por lo que tendremos que escoger entre los SGBD relacionales disponibles. En este bloque nos centramos en Access, SGBD de la suite //Office// de //Microsoft//. Alumno(#id, dni, cod_matricula, nombre, apellidos, fecha_nacimiento, dirección, foto) Mediante un SGBD almacenaremos una base de datos, y dentro de la BD crearemos las tablas que contengan los campos indicados en el modelo relacional. {{ :bloque3:tabla.png?700 |}} ===== Diseño Físico de una BD ===== En el diseño físico de la base de datos, aparte de indicar los campos (columnas) de una tabla, vamos a definir muchos más aspectos de la tabla y de sus relaciones. Para ellos cada SGBD ofrece unas herramientas con las que indicar los tipos de datos de cada columna de la tabla, las restricciones o formato de los datos, el dominio de los datos, etc. Una vez que tenemos el diseño físico de nuestra base de datos, procederemos a añadir datos, manipularlos y recuperarlos. En este bloque nos centraremos en el diseño físico de bases de datos con el SGBD //MS Access//. ===== SGBD Access ===== Es el SGBD incluido en la suite //Office// de //Microsoft//. //LibreOffice Base// es otro programa similar incluido en otra suite ofimática. A diferencia de la mayoría de SGBD que emplean una arquitectura //cliente-servidor//, Access es una aplicación para escritorio. Ventajas: * Interfaz gráfica que facilita la rápida elaboración gestión y análisi de bases de datos * Apto para casi cualquier nivel de experiencia previa * Uso sencillo y fácil de aprender * Facilita el diseño físico de bases de datos * Permite su uso en aplicaciones web gracias al soporte de productos de Microsoft Limitaciones: * Menos estable que otros SGBD más potentes ante un grande volumen de datos * Rendimiento y capacidad limitada debido a que guarda toda la BD en un solo fichero * No permite el acceso simultáneo de usuarios sin necesidad de software especial * Descenso notable de rendimiento cuando más de un usuario accede de forma paralela * De pago y solo disponible para Windows ==== Crear una Bases de Datos ==== Para comenzar a trabajar con Access el primer paso va a ser crear una base de datos vacía. Una base de datos vacía no se trata de un fichero vacío: al crear una base de datos vacía se almacenan en ella algunos datos administrativos y objetos del sistema, inicialmente ocultos al usuario y programador. El fichero de una base de datos Access tiene extensión ''accdb'' (Access DataBase). =====Tablas===== ==== Crear Tabla ==== Una vez decididos los campos que necesitamos almacenar en la tabla, pasaremos a crear la tabla. Para ello seleccionaremos en la sección //Tablas// la opción //Crear una nueva tabla en vista Diseño//. Access nos mostrará un formulario para la definición de los campos. Esta ventana se denomina de //diseño de tabla// frente a la de //vista de tabla// que permitirá más adelante introducir los datos. ====Tipos de Datos==== El atributo autonumérico solo se debe usar para claves primarias simples. Si una clave primaria es además clave ajena, tampoco se usará el atributo autonumérico. ^Tipo de datos^ Descripción^ |Texto|Puede ser corto el cual tiene capacidad limitada o largo| |Número|Números enteros o reales de diferente capacidad| |Autonumérico|Número entero que se autoincrementa para cada nuevo registro apropiado para claves primarias de una sola columna| |Fecha/Hora|Para datos de fechas, horas o compuestos| |Moneda|Representa valores monetarios| |Si/No|Representa valores lógicos true/false| |Objeto OLE|Objeto de otra aplicación vinculado: sonido, imagen, video, etc.| |Hipervínculo|Vínculo a sitio web| |Datos Adjuntos|Empleado para añadir archivos| |Calculado|Campos calculados actualizados de forma automática| |Asistente para búsqueda|Permite una lista de valores obtenidos de otras tablas, o introducidos por nosotros| ==== Propiedades y Restricciones de los datos ==== Además de seleccionar un tipo de datos para un campo de una tabla, en la sección inferior se permite configurar algunas propiedades o restricciones para cada campo: ^Propiedad^ Descripción^ |Tamaño del campo|Permite indicar el tamaño máximo de datos introducidos| |Formato|El formato en el que se muestra el valor de un campo| |Máscara de entrada|Permite forzar al usuario a introducir los datos siguiendo un formato concreto. Se usa para texto y fechas/horas| |Título|En caso de que queramos que aparezca un nombre distinto al nombre de la columna| |Valor por defecto| El valor que contiene el campo en caso de que no se introduzca nada| |Regla de validación|Condición que debe cumplir el dato introducido. Por ejemplo ">=10"| |Texto de Validación|Mensaje que muestra Access al introducir un dato que incumpla la //Regla de Validacion//| |Requerido|Para indicar que un campo es obligatorio; no puede quedar vacío| |Indexado|Añadir un tipo de índice para mejorar las búsquedas sobre este campo, o indicar si se permiten valores repetidos| ====Máscara de Entrada de datos==== Definen el modo en el que el usuario debe introducir los datos en un campo. Se usan principalmente para los campos de texto y de fecha/hora: ^Carácter ^Descripción^ |0|Dígito (0 a 9, entrada obligatoria; signos más [+] y menos [-] no permitidos).| |9| Dígito o espacio (entrada no obligatoria; signos más y menos no permitidos).| |#| Dígito o espacio (entrada no obligatoria; las posiciones en blanco se convierten en espacios; se permiten los signos más y menos).| |L| Letra (A-Z, entrada obligatoria).| |?| Letra (A-Z, entrada opcional).| |A| Letra o dígito (entrada obligatoria).| |a| Letra o dígito (entrada opcional).| |&| Cualquier carácter o un espacio (entrada obligatoria).| |C| Cualquier carácter o un espacio (entrada opcional).| |. , : ; - / |Marcador de posición decimal y separadores de millares, fecha y hora. (El carácter utilizado dependerá de lo establecido al hacer doble clic en Configuración regional en el Panel de control de Windows).| |<| Convierte a minúsculas todos los caracteres que siguen.| |>| Convierte a mayúsculas todos los caracteres que siguen.| |!| Hace que la máscara de entrada se muestre de derecha a izquierda, en lugar de hacerlo de izquierda a derecha. Los caracteres escritos en la máscara siempre la rellenan de izquierda a derecha. Puede incluir el signo de exclamación en cualquier lugar de la máscara de entrada.| |\| Hace que el carácter que viene a continuación se muestre como carácter literal. Se utiliza para presentar cualquiera de los caracteres detallados en esta tabla como caracteres literales (por ejemplo, \A se muestra sencillamente como A).| |Contraseña |Al establecer la propiedad Máscara de entrada (InputMask) a la palabra Contraseña, se crea un cuadro de texto de entrada de contraseña. Cualquier carácter escrito en este cuadro de texto se almacena como tal, pero se muestra como un asterisco (*).| Ejemplos de uso: ^Máscara de entrada ^Ejemplos de valores^ |(000) 000-0000 |(206) 555-0248| |(999) 999-9999! |(206) 555-0248| |(000) AAA-AAAA| (206) 555-TELE| |>L????L?000L0| GREENGR339M3| |>L0L 0L0| T2F 8M4| |00000-9999|98115-3007| |>LLL00000-0000| DB51392-0493| ==== Clave Primaria ==== Para poder relacionar registros entre diferentes tablas es necesario identificar a cada registro de la tabla (fila) de forma inequívoca. De este modo la clave primaria de una tabla pueden ser un campo o un conjunto de campos, cuya combinación no se puede repetir en ningún otro registro de la tabla. El tipo de datos autonumérico es un tipo diseñado para que actúe como clave primaria, ya que para cada nuevo registro siempre ofrecerá un valor distinto. Solo se debe aplicar en claves primarias de una sola columna: nunca para claves primarias compuestas por dos o más columnas. {{ :bloque3:access-pk.png?300|}} Otros ejemplos de columnas que pueden ser clave primaria son: dni, matricula, codigo de SS, ISBN, etc. Para definir una columna o conjunto de columnas como clave primaria en Access: * Seleccionar el campo/s a utilizar y pulsar sobre el botón **Clave Principal** en la barra de herramientas. * Seleccionar el campo/s y hacer clici derecho y seleccionar **Clave Principal** en el menú. * Para seleccionar varios campos, pulso en la barra de la izquierda y arrastro seleccionando los campos. ==== Guardar el Diseño ==== Después de introducir todos los campos y definir sus tipos y atributos, podremos pasar a utilizar la tabla, introduciendo, modificando y utilizando los datos que puede almacenar. Antes deberemos guardar la definición de la tabla, utilizando por ejemplo el icono "Guardar". Access pedirá un nombre para la nueva tabla. =====Relaciones entre Tablas===== {{ :bloque3:access-relaciones.png?100|}} Access dispone de un potente generador de relaciones. Para iniciarlo y agregar tablas a la ventana de relaciones hay que hacer clic en el icono Relaciones. Accedo a esta sección desde la pestaña **Herramientas de bases de datos**. ====Mostrar Relaciones==== Si aún no se ha definido ninguna relación, aparecerá automáticamente el cuadro de diálogo //Mostrar tabla//. Si no aparece, en la ficha Diseño, haga clic en //Mostrar tabla.// En el cuadro de diálogo Mostrar tabla se muestran todas las tablas y consultas de la base de datos. Selecciona las tablas a relacionar y, a continuación, haga clic en //Agregar//. Al terminar de añadir tablas pulsar en //Cerrar//. ====Relacionar tablas==== Una relación entre tablas siempre se da entre una //Clave Primaria// y una //Clave Ajena//. Para relacionar dos tablas debemos **arrastrar el campo clave primaria y soltarlo en el campo clave ajena que le hace referencia** de la tabla con la que queramos relacionarla. Sobre todo en las relaciones 1:1 es muy importante seguir ese orden: arrastramos la clave primaria y la soltamos en la clave ajena; no al revés. En el momento que realizamos una relación, el campo que referencia a la clave primaria pasa a ser **clave ajena**. En ese momento se nos desplegará una ventana //Modificar relaciones// en la que debemos asegurarnos que los campos a relacionar son los correctos. Además ofrece 3 opciones: * **Exigir integridad referencial**: activa o desactiva la integridad referencial entre los campos de las tablas seleccionadas. Las demás opciones no pueden activarse si no se activa ésta. **Siempre marcamos esta opción**. * **Actualizar en cascada**: si se activa, hace actualizaciones en cascada. Esto quiere decir que si modificamos el valor de una clave primaria, se modificarán los valores de las claves ajenas que le hacen referencia. * **Eliminar en cascada**: si se activa, hace borrados en cascada. Esto significa que si elimino un registro de una tabla cuya clave primaria es referenciada por otras tablas, también se eliminarán los registros de las tablas relacionadas. {{ vimeo>621867696?medium }} > Video: Diseño físico y Relaciones en Access {{ vimeo>668807438?medium }} > Video: Relaciones reflexivas en Access ====Aspectos a tener en cuenta ==== * Todo campo que trabaja como **clave ajena** no puede ser de tipo **autonumérico**, independientemente de que pueda ser al mismo tiempo clave primaria. * Todo campo que trabaja como clave ajena, debe ser del mismo tipo que la clave primaria con la que se relaciona. Esto quiere decir que si la clave primaria es por ejemplo "Texto corto" la clave ajena también, o si la clave primaria es autonumérico y en las propiedades es de tipo **entero largo** la clave ajena debe ser numérico de tipo **entero largo**. =====Introducción de datos ===== Para introducir datos en una tabla debemos pasar al modo //Vista Hoja de Datos//. Podemos Introducir los datos directamente sobre la celda concreta, podemos pegar filas completas o grupos de filas. También podemos introducir datos en una tabla a partir de los datos de otras tablas con una //consulta de datos anexados//. ====Generar datos de prueba ==== Mediante la aplicacion web [[https://www.mockaroo.com|Mockaroo]] podemos generar datos de prueba para Access ya que permite exportar los datos en formato //Excel//. En este [[bloque4:sql#generar_datos_de_prueba|video del bloque 4]] se explica el funcionamiento de algunos generadores de datos, mostrando el funcionamiento de //Mockaroo//. Para ello crearemos la estructura de los datos dependiendo de las columnas de la tabla que deseamos poblar, y exportaremos los datos en formato //Excel//. Despues abrimos el fichero //Excel//, copiamos los datos y los pegamos en la tabla que corresponda. =====Consultas===== Se conocen como //Consultas// al tipo de operaciones de inserción, borrado, actualización o visualización de datos sobre una base de datos. Es la finalidad principal del uso de una base de datos. En el SGBD Access las consultas se dividen en dos grupos: **consultas de Acción** (inserción, borrado, actualización) y **consultas de Selección** (búsqueda de datos que cumplan ciertas condiciones). ====Consultas de acción ==== Son consultas que permiten modificar los datos de una tabla, incluso la creación de una nueva tabla con datos. * **Consulta de eliminación**: elimina registros de una o más tablas dependiendo de si cumplen ciertas condiciones. * **Consulta de actualición**: actualiza valores en los registros de una o más tablas dependiendo de unas condiciones. * **Consulta de datos anexados (inserción)**: Agrega registros a una tabla a partir de otras tablas. * **Consulta de creación de tabla**: crea una nueva tabla a partir de los datos de otras tablas. {{ vimeo>621867741?medium }} > Video: Consultas de acción en Access ==== Consultas de selección ==== Se emplean para buscar y consultar datos contenidos en las tablas. Pueden realizarse sobre una sola tabla o que muestren datos de diferentes tablas relacionadas en sí. === Condiciones === Para restringir los datos que queremos que muestre una consulta podemos indicar una serie de criterios: * **Valores constantes**: Queremos que se muestren los datos en los que una columna tiene un valor concreto. {{ :bloque3:valores-constantes-access.png?400 |}} * **Operadores de comparación**: No permite establecer criterios para valores de una columna en comparación con otros, mayor que un cierto valor, distinto a cierto valor, mayor a un fecha, etc. {{ :bloque3:operadores-comparacion-access.png?400 |}} * **Operadores lógicos**: Podemos unir criterios mediante los operadores lógicos ''AND'' y ''OR'': Y/O en Access. En caso de establecer criterios con el operador //OR//, también podemos plantearlo como se indica en la imagen de la derecha: {{ :bloque3:operadores-logicos-access.png?450 |}} * **Valores nulos**: Si queremos establecer como criterio si una columna tiene valor o no, usamos ''Es Nulo'' ó ''Es NoEs Nulo''. En el siguiente video se muestran algunos ejemplos de consultas de selección: {{ vimeo>663531352?medium }} > Video: Consultas de selección ---- (c) {{date> %Y}} Fernando Valdeón