Normalizacion

Bases de Datos Ejercicio de Normalización Profesora: Andrea Rodríguez [email protected] Ayudante: Gonzalo Hidalgo hidalgog@

Views 190 Downloads 0 File size 44KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Bases de Datos Ejercicio de Normalización Profesora: Andrea Rodríguez [email protected] Ayudante: Gonzalo Hidalgo [email protected]

ENUNCIADO Se tiene la siguiente especificación de Bases de Datos. Analice si el siguiente modelo relacional representa el problema y estudie su normalización. Si es necesario, ajustelo para que cumpla los requerimientos establecidos. Se desea fabricar el módelo de una base de datos que almacene información sobre un ejército de soldados. El ejercito esta formado por batallones, los cuales son liderados por un capitán. En cada batallón hay un grupo determinado de soldados, y esta asignado a una zona particular (base terrestre). Cada soldado tiene su rut, sus nombres y apellidos, su dirección, ciudad y tiempo de permanencia en el batallón. Cada soldado puede tener una labor específica, como doctor, artillero, mecánico, ingeniero, infantería, etc. El rango de capitán puede considerarse una labor. El ejercito completo esta liderado por un grupo de generales, que también pueden ser capitanes de un batallón (en caso de que ese batallón no disponga de uno). Existen armerías, que almacenan todas las armas y equipamiento disponible; cada batallón tiene su propia armería y se almacena la cantidad asignada a cada batallón, además de vehículos existentes, como tanques, jeeps y camiones de carga, entre otros. Del equipamiento interesa saber la cantidad asignada a cada batallón, el tipo de equipamiento (rifles, granadas, lanza misiles, etc.) y la cantidad de municiones asignada, lo mismo para los vehículos. Cabe destacar que las armerías estan ubicadas en cada base terrestre. Un soldado no puede pertenecer a dos distintos batallones y un capitan no puede liderar más de uno. Para las bases terrestres, se necesita saber el nombre de la base, la ubicación física (coordenadas terrestres), y la capacidad máxima de soldados. Cada vehículo tiene una descripción, modelo, patente y capacidad máxima de pasajeros; las armas tienen un número de modelo, tipo de munición, munición máxima y peso físico. MODELO RELACIONAL

vehiculo( vehiculo patente, modelo, descripción, capacidad, nombre_armeria, ubicación ) soldado( soldado rut_soldado, nombres, apellidos, direccion, ciudad, permanencia, tipo_oficio ) arma( arma id_arma, modelo, tipo_munición, munición_máxima, peso, cantidad, nombre_armeria, ubicación ) esta_en( esta_en nombre_batallon, rut_soldado, nombre_base, ubicación, cantidad ) equipo_arma( quipo_arma id_arma, nombre_batallon ) equipo_vehiculo( equipo_vehiculo patente, nombre_batallon ) batallon( batallon nombre_batallon, rut_capitan, cantidad_soldados ) base( base nombre_base, ubicación, capacidad )

1

DESARROLLO Antes de comenzar a analizar la normalización del modelo relacional, hay que ver si se cumplen todos los requerimientos establecidos. • No esta establecido quienes son los generales que lideran el ejercito completo. Una solución a esto podría ser agregar una atributo es_general con valores TRUE o FALSE, a la entidad soldado. • No se especifica la cantidad de armas asignada a cada batallón. La solución a esto es agregar el atributo cantidad a las entidades equipo_arma. • Si dejamos nombre_batallon como clave primaria en la entidad esta_en estaríamos dejando que los soldados puedan pertenecer a varios batallones, lo cual no está permitido. • No se especifica a que base esta asignado un batallón. Para ello basta agregar el atributo nombre_base a la entidad batallon. Con los arreglos anteriores, el modelo relacional queda como sigue: MODELO RELACIONAL 2

base( base nombre_base, ubicación, capacidad ) soldado( soldado rut_soldado, nombres, apellidos, direccion, ciudad, permanencia, tipo_oficio, es_general ) batallon( batallon nombre_batallon, rut_capitan, cantidad_soldados, nombre_base ) esta_en( esta_en nombre_batallon, rut_soldado, nombre_base, ubicación, cantidad ) arma( arma id_arma, modelo, tipo_munición, munición_máxima, peso, cantidad, nombre_armeria, ubicación ) vehiculo( vehiculo patente, modelo, descripción, capacidad, nombre_armeria, ubicación ) equipo_arma( equipo_arma id_arma, nombre_batallon, cantidad ) equipo_vehiculo( equipo_vehiculo patente, nombre_batallon )

ESTUDIO DE LA NORMALIZACION PRIMERA FORMA NORMAL (1NF) •



El atributo descripcion de la entidad vehiculo puede ser NULO perfectamente si consideramos que no todos los vehículos poseen una descripción. Una solución sería eliminar el atributo o agregar una entidad extra descripción, con cardinalidad 1,1 con vehículo. El atributo permanencia de la entidad soldado es ambiguo. Es mejor eliminar ese atributo y agregar dos atributos: fecha_ingreso y fecha_egreso (o simplemente fecha_egreso si es que no interesa saber cuando fue qué entró al batallon)

SEGUNDA FORMA NORMAL (2NF) •

Los atributos ubicación de las entidades vehiculo y arma estan repitiendo información para cada arma que pertenece a una misma armeria. Como cada armería esta ubicado en cada base, se puede eliminar dichos atributos. También se tiene que agregar el atributo nombre_armeria a la entidad base. Si se asigna dicho atributo como clave primaria, se estarían permitiendo varias armerias por base, lo cual no se conoce en el enunciado. Si ese no fuese el caso, se puede cambiar el atributo nombre_armeria por nombre_base para dar más consistencia en el modelo.

2

• •

Los atributos nombre_base y ubicación de la entidad esta_en repiten información sobre la base, por lo que no son necesarios, considerando que esta información se puede obtener de las demás entidades. El atributo rut_capitan de la entidad batallon podría dar ambiguedades si se considera capitan como un tipo de oficio (atributo tipo_oficio de la entidad soldado). Lo mejor es no considerar capitán como un oficio y asignar únicamente el cargo por el atributo rut_capitan.

TERCERA FORMA NORMAL (3NF) • •

Dependiendo de cómo se especifice el atributo direccion en la entidad soldado, se podría obviar el atributo ciudad. Sin embargo, esto sólo depende del comportamiento de los datos. El atributo cantidad de la entidad esta_en no es necesario porque se puede calcular la cantidad de soldados que pertenecen a un batallón con una consulta, lo mismo para el atributo cantidad_soldados de la entidad batallon.

Con todo lo antes mencionado, el módelo relacional quedaría como sigue. MODELO RELACIONAL 3

base( base nombre_base, ubicación, capacidad, nombre_armeria ) soldado( soldado rut_soldado, nombres, apellidos, direccion, ciudad, fecha_ingreso, fecha_egreso, tipo_oficio, es_general ) batallon batallon( lon nombre_batallon, rut_capitan, nombre_base ) esta_en( esta_en rut_soldado, nombre_batallon ) arma( arma id_arma, nombre_armeria, cantidad, modelo, tipo_munición, munición_máxima, peso ) vehiculo( vehiculo patente, nombre_armeria, modelo, capacidad ) equipo_arma( equipo_arma id_arma, nombre_batallon, cantidad ) equipo_vehiculo( equipo_vehiculo patente, nombre_batallon, cantidad )

EJERCICIOS COMPLEMENTARIOS Discutir y analizar como se podrían implementar las siguientes agregaciones. Mantener el estado actual de normalización y estudiar si el modelo relacional esta en cuarta forma normal o BCNF. • Agregar el tipo de oficio ‘conductor’ y guardar la lista de conductores de vehículos junto con sus respectivas patentes. Un conductor sólo puede conducir un vehículo. • Agregar más rangos y mantener una relación de subordinados, como almirantes, tenientes, coroneles, oficiales, etc. • Guardar los años de experiencia de los soldados. Para un soldado con un rango alto, guardar todos los años de trayectoria hasta el momento actual. Además, guardar los datos de ingreso y egreso a cada batallón que ha sido asignado. • Un batallón puede ser comandado por varios capitanes. • Guardar más información sobre las bases, como por ejemplo, cuales de ellas poseen armamento nuclear, pista de aterrizaje, hospital y centro de comunicaciones, entre otros. • Almacenar el equipamiento que se le asigna a cada soldado, y no a un batallón en gneral. Guardar que especificamente esta portando un soldado cualesquiera. • Guardar la posición de las tres bases más cercanas a una en particular. Cualquier error o duda hacerla al correo [email protected] .

3