Tema 2: Diseño de Bases de Datos relacionales
Introducción Propuesto por Codd en 1970 Base de los SGBD comerciales: Access, Oracle, etc. Características básicas: Toda la información se almacena en tablas Las relaciones entre los datos se representan explícitamente en las tablas
Tabla Información acerca de un tipo de objeto Parcela Código DNI propietario Extensión Tipo cultivo 123-B 24345434 1000 Olivo … 367-X 14656745 1231 Naranjo Impuesto Código Neto Ext. Min Ext. Máx 1 90.78 500 1100 2 132.58 1101 1500 …
Relación Permite relacionar información de varias tablas Parcela Código DNI Prop Extensión Tipo cultivo Impuesto Código Neto Ext. min Ext. max Impuestos_Pagados Cod_parcela Cod_impuesto Fecha
Atributo Cada uno de los campos de una tabla. Ej: tipo_cultivo Tipo de dato: texto, número, fecha, moneda, etc. Requerido Indexado: no, sí (sin duplicados), sí (con duplicados)
Relaciones Relaciona campos de tablas diferentes ¿Exigir integridad referencial? Sí: Actualizar en cascada los campos relacionados Eliminar en cascada los registros relacionados No Tipo de relación (cardinalidad): Uno a uno Uno a varios
Clave primaria Conjunto de uno o más atributos que tomados colectivamente permiten identificar de forma unívoca una fila de una tabla Claves candidatas: todos los posibles conjuntos de claves (mínimo conjunto de atributos) Clave primaria: clave candidata seleccionada Ejemplo: tabla Propietario {dni, num_seg_social, nombre, direccion} Claves candidatas={ {dni}, {num_seg_social} } Clave primaria={dni}
Clave ajena Es el campo (o campos) de una tabla que referencia a la clave primaria de otra tabla. Define la relación Parcela Código DNI Prop Extensión Tipo cultivo Impuestos_Pagados Cod_parcela Cod_impuesto Fecha Impuesto Código Neto Ext. min Ext. max
Ejercicios propuestos Dar la cardinalidad de las siguientes tablas con respecto a la relación: E1: Libro E2: Alumno R: Préstamo E1: Niño E2: Padre R: Hijo_de E1: Puente E2: Río R: Atraviesa Calcular la clave de las siguientes tablas: Libro={título, autor, año_publicación, ISBN} Alumno={dni, num_expediente, nombre, año_nacimiento} Río={nombre, caudad_medio}
¿Cómo se diseña una BD? Se estudia la realidad que se quiere representar Se estructura en forma de tablas que representan objetos Se establecen relaciones entre estos objetos
Información que queremos representar ¿Cómo se diseña una BD? Impuestos_Pagados Cod_parcela Cod_impuesto DNI_propietario Neto Nombre_prop Ext_min Extensión Ext_max Tipo_cultivo Fecha Información que queremos representar ¿Cómo hemos llegado a la estructura de tablas que hemos mostrado anteriormente?
Reglas básicas para el diseño de BDs Todos los atributos que no forman parte de ninguna clave candidata suministran información acerca de la clave completa. Claves candidatas= {cod_parcela, cod_impuesto} Impuestos_Pagados Cod_parcela Cod_impuesto DNI_propietario Neto Nombre_prop Ext_min Extensión Ext_max Tipo_cultivo Fecha Ej. DNI_propietario sólo aporta información acerca de cod_parcela, no sobre cod_impuesto. Establecer nuevas tablas!!
Reglas básicas Impuestos_Pagados Cod_parcela Cod_impuesto DNI_propietario Nombre_prop Extensión Ext_min Tipo_cultivo Ext_max Neto Fecha Parcela Cod_parcela DNI_propietario Nombre_prop Extensión Tipo_cultivo Impuestos_Pagados Cod_impuesto Fecha Impuesto Neto Ext_min Ext_max
Reglas básicas Los atributos que no forman parte de ninguna clave candidata proporcionan información acerca de la clave y acerca de otros atributos. Parcela Cod_parcela DNI_propietario Nombre_prop Extensión Tipo_cultivo Impuestos_Pagados Cod_parcela Cod_impuesto Fecha Impuesto Cod_impuesto Neto Ext_min Ext_max
Reglas básicas Parcela Cod_parcela DNI_propietario Extensión Parcela Tipo_cultivo Parcela Cod_parcela DNI_propietario Nombre_prop Extensión Tipo_cultivo Propietario DNI_propietario Nombre_prop
Ejercicios propuestos Obtener el esquema relacional del siguiente enunciado: Una autopista se define por su código, nombre y tipo Una autopista se divide en secciones Una sección se define por un código, nombre y número de carriles Una sección comienza y termina en una ciudad Una ciudad se define por su nombre y nº de habitantes
Ejercicios propuestos Dadas las entidades: TRAMO (código_tramo) CALLE (código, nombre, longitud) MANZANA (número) BARRIO (nombre) Diseñar una base de datos que represente que: un barrio está formado por muchas manzanas una manzana sólo pertenece a un barrio un tramo de una calle pertenece sólo a una calle una calle está compuesta de varios tramos un tramo contiene varias manzanas y una manzana contiene varios tramos dos tramos se pueden cruzar ¿Cómo se podría contestar a las siguientes preguntas? Calles a las que pertenece una manzana Barrio al que pertenece una calle Con cuántos tramos cruza un tramo en particular ¿Se podría conocer la longitud de cada tramo? ¿Y la longitud total de una calle si almacenamos la longitud de cada tramo?
Ejercicios propuestos Se desea generar una base de datos para almacenar información respecto la geografía española. En concreto, queremos almacenar información sobre ríos, mares, ciudades, provincias y comunidades autónomas. De cada ciudad queremos saber su nombre, cuántos habitantes tiene y en qué provincia se encuentra. Hay que tener en cuenta que dos ciudades de distintas provincias pueden tener el mismo nombre. De cada provincia, nos interesa conocer su nombre y qué ciudad es su capital. De cada comunidad autónoma, es interesante conocer su nombre, el número de provincias que pertenecen a ella y cuáles son estas provincias. En cuanto a cada mar, queremos almacenar su nombre y a qué provincias baña, indicando además cuántos kilométros de la costa de esa provincia es bañada por este mar. La información de los ríos será la más completa: además del nombre, nos interesa conocer en qué provincia nace, por qué ciudades pasa y en qué mar desemboca. Por otro lado, también queremos saber qué ríos son afluentes de otros ríos.