Formas Normales
En el modelo relacional de bases de datos, las formas normales son un criterio para determinar la vulnerabilidad de una tabla a inconsistncias o anomalías lógicas. Mientras más alta sea la forma normal que cumpla una tabla, menos vulnerable será. A continuación daré una resumida definición de las primeras 2 formas normales.
1a Forma Normal
Para que una base de datos cumpla la 1a forma normal cada columna debe ser atómica. Para la 1a forma normal se deben llevar a cabo los siguientes 3 puntos:
- Los atributos compuestos se deben separar en atributos simples (atómicos).
- Los atributos multivalorados se vuelven registros (tablas).
- En las relaciones de 1 a muchos, se elimina la tabla de la relación y se pone la clave primaria de la entidad '1' a la entidad 'muchos'. Esto solo aplica si la relación no tiene más atributos que las claves de las entidades.
2a Forma Normal
Para que una base de datos sea 2FN (cumple la 2a forma normal), primero debe ser 1FN y además todas las columnas que forman parte de una clave candidata deben aportar información sobre la clave completa. Una clave candidata es aquella que identifica de forma unívoca una clave completa (entidad).
Para ejemplificar lo anterior, aplicaré las formas normales a los 10 ejercicios anteriores que previamente ya había pasado del modelo Entidad-Relación al modelo Relacional, esto lo pueden encontrar en la publicación anterior de este blog.
Ejercicios
Ejercicio 1
- coche(nodeaccidentes, idcliente)
- cliente(idcliente)
Ejercicio 2
- cliente(DNI, nombre, apellidopaterno, apellidomaterno, calle, nocalle, codigopostal, ciudad, idconcesionario)
- telefono(DNI, telefono)
- mecanico(DNI, nombre, apellidopaterno, apellidomaterno, salario)
- concesionario(idconcesionario)
- automovil(matricula, modelo, marca, color, nuevo, unidades, kmrecorridos, DNI)
- repara(DNI, matricula, fecha, horas)
Ejercicio 3
- jugador(idjugador, nodecamiseta, nombre, apellidopaterno, apellidomaterno, idequipo)
- equipo(idequipo)
- partido(idpartido, resultado, idequipo)
- juega(goles, pases, faltas, idpartido, idjugador)
Ejercicio 4
- articulo(noarticulo, existencia, descripcion, idempresa)
- fabrica(nofabrica, artproducidos, noarticulo)
- telefonofabrica(nofabrica, telefono)
- empresa(idempresa)
- pedido(cabecera, nocliente, fechapedido, hora, cantidad, noarticulo, calle, nocalle, colonia, ciudad, idempresa)
- cliente(nocliente, calle, nocalle, colonia, ciudad, limitecredito, descuento, saldo, idempresa)
Ejercicio 5
- proveedor(RUT, paginaweb, calle, nocalle, comuna, ciudad, nombre, apellidopaterno, apellidomaterno)
- telefonoproveedor(RUT, telefono)
- producto(idproducto, nombre, precio, stock, RUT, idcategoria, idventa)
- categoria(nombre, idcategoria, descripcion)
- venta(idventa, RUT, fecha, descuento, precio, cantidad, total)
- cliente(RUT, calle, nocalle, comuna, ciudad, nombre, apellidopaterno, apellidomaterno)
- telefonocliente(RUT, telefono)
Ejercicio 6
- aeropuerto(codigo, nombre, pais, ciudad)
- avion(idavion, capacidad, modelo, novuelo)
- vuelo(novuelo, fecha, plazasvacias)
- programadevuelo(novuelo, lineaaerea, diasemana, escala, noescalas)
- despegaaterriza(novuelo, codigo)
- tomatierra(codigo, idavion)
Ejercicio 7
- olimpiada(ano)
- sede(ano, idsede)
- evento(fecha, duracion, noparticipantes, localizacion, idevento)
- equipamiento(idequipamiento)
- comisario(idcomisario)
- complejo(areatotal, localizacion, jefe, idsede)
- area(deporte, localizacion)
- tiene(idevento, idcomisario, tarea)
- necesita(idequipamiento, idevento)
Ejercicio 8
- entrenador(identrenador, nombre, apellidopaterno, apellidomaterno)
- jugador(idjugador, nombre, apellidopaterno, apellidomaterno, premio)
- partido(idpartido, modalidad, relevancia, marcador, fecha, premio, premioconsolacion)
- arbitro(idarbitro, nombre, apellidomaterno, apellidopaterno)
- torneo(idtorneo, ciudad, pais)
- entrena(identrenador, idjugador)
Ejercicio 9
- cine(nombrecine, calle, nocalle, colonia, ciudad)
- telefonocine(nombrecine, telefono)
- promocion(descripcion, descuento)
- sala(idsala, nombre, butacas, nombrecine, idfuncion)
- funcion(idfuncion, dia, hora, nombre, idcartelera, idsala)
- opinion(idopinion, comentario, fecha, calificacion, edad, nombre, apellidopaterno, apellidomaterno)
- pelicula(nombre, idficha, idfuncion)
- ficha(idficha, titulodistribucion, sitioweb, genero, subtitulos, titulooriginal, duracion, idioma, pais, estreno, ano, calificacion resumen)
- actor(nacionalidad, nombre, apellidopaterno, apellidomaterno, idactor)
- director(nacionalidad, nombre, apellidopaterno, apellidomaterno, iddirector)
- cartelera(idcartelera, nombrecine)
- participa(nombre, idactor, iddirector)
- presenta(nombre, nombrecine)
- tiene(nombrecine, descripcion)
Ejercicio 10
- pieza(id, nombre, )
- mueble(nombre, precio, nopiezas)
- estante(posicion, pasillo, altura)
- esta(posicion, nombre)
Conclusión
El trabajar con las formas normales es muy importante para proteger tu base de datos de cualquier error lógico o vulnerabilidad que pueda tener. Por lo dicho anteriormente, es muy importante conocerlas y saber trabajar con ellas para que tu sistema funcione de la mejor manera posible y no sea susceptible a ataques que involucren errores en tu lógica.
No hay comentarios.:
Publicar un comentario