Caso de estudio: “Dependencia Funcional”

Hoy fui a la facultad a la materia Gestión de Datos e hicimos un ejercicio de la guía de actividades prácticas. Estamos dando el tema “Dependencia funcional y normalización”. El enunciado es este:

Se desea construir una BD para gestionar la información de los electores en un censo electoral con los siguientes supuestos semánticos:

  • Un elector es identificado por su DNI (D). Todos los electores tienen DNI. Un elector tiene un nombre (N), fecha de nacimiento (F) y sexo (S)
  • Un municipio se identifica por la provincia a la que pertenece (P) y su código de municipio (C). No pueden existir dos municipios con igual código en la misma provincia.
  • Dos municipios pueden tener el mismo nombre (B) pero sólo si pertenecen a provincias diferentes
  • Una mesa está identificada por su municipio, número de distrito (T), número de sección (NS) y número de mesa (M). Los números de distrito se pueden repetir para municipios diferentes pero no dentro del mismo municipio. Igual ocurre con los números de sección respecto de los distritos y con los números de mesa respecto de las secciones.
  • Un elector está inscrito en una mesa, incluida en una sección, a su vez incluida en un distrito, que a su vez pertenece a un municipio.
  • Un elector tiene una dirección, es decir, una calle (L) y un número de calle (E).
  • Todos los electores que residen en la misma calle del mismo municipio están inscritos en la misma sección, aunque pueden estar en mesas diferentes según el número de la calle.

Se pide:

  1. Realizar un modelo de tablas que represente la BD a ser utilizada por el sistema tratando de minimizar la cantidad de tablas.
  2. Llevar el modelo anterior a la tercera forma normal (3FN).

Sinceramente yo no tenía ni idea como arrancar, esto lo dimos en la clase de teoría hace dos semanas creo y no me acordaba nada, asique agarré el libro y me puse a leer. Termino de leer la primer forma normal, comienzo a hacerlo, y la profesora explica como resolverlo. Escuho, atiendo, y me pongo a resolverlo de la forma que explicó. Me quedó así:

  • DNI(D) ->Nombre(N), Fecha de nacimiento(F), Sexo(S)
  • Calle(L), Provincia(P), Código(C) -> Número de sección(NS)
  • Provincia(P), Código(C), Calle(L), Número de calle(E), Número de sección(NS), Número de distrito(T) -> Número de mesa(M)
  • Provincia(P), Código(C) -> Nombre(B)
  • DNI(D) ->Número de sección(NS)
  • DNI(D) ->Calle(L), Número de calle(E)

Justo cuando terminamos de hacer esto, la profesora empieza a desarrollarlo en el pizarrón y agrega una dependencia funcional que nosotros no teníamos:

  • DNI(D) -> Nombre(N), Fecha de nacimiento(F), Sexo(S), Calle(L), Provincia(P), Código(C), Número de sección(NS), Número de calle(E), Número de distrito(T), Número de mesa(M), Nombre(B)

Resumiendo, el DNI determina todos los otros campos. Con los chicos que lo estaba haciendo empezamos buscar a ver si se nos había pasado un axioma en dónde podía llegar a estar dicha relación, aunque sin éxito, no la encontramos. Uno de nosotros pregunta:

  • Alumno: “¿Porqué DNI determina Provincia(P) y Código(C)? Por ejemplo”
  • Profesora: “Mmm… No sé como explicártelo, creo que se deduce del enunciado, es como en la vida, vos sabés dónde votas con tu DNI. Osea, podés saber todos los datos de tu mesa”

En ese momento, sinceramente, no podía creer lo que nos estaba diciendo: “No sé como explicártelo” y además, “Creo que se deduce del enunciado”. Supongo que si hay un enunciado de un problema es para que lo respetemos y que no queden cosas que se sobre entienden, porque justamente esto es lo que trae consigo muchos problemas a la hora de interpretar algo.

Igualmente, me quedó picando y capaz que tenga razón, que se deduzca del enunciado porque existen las reglas de Armstrong con las cuales se pueden inferir en otras dependencias funcionales. Asique cuando llegué a mi casa me puse a leer éstas reglas y a ver si llegaba a la respuesta de la profesora. Estas son las reglas:

  • Reflexividad: si B es subconjunto de A, entonces A->B
  • Aumento: si A->B, entonces AC->BC
  • Transitividad: si A->B y B->C, entonces A->C

De estas tres reglas se pueden deducir otras tres más:

  • Descomposición o proyección: si A->BC, entonces A->B y A->C
  • Unión o adición: si A->B y B->C, entonces A->BC
  • Pseudo-Transitividad: A->B y DB->E, entonces AD->E

La que acabo de encontrar (es la primera vez que lo hago realmente) es esta:

  • Por Unión: DNI(D) -> Nombre(N), Fecha de nacimiento(F), Sexo(S), Calle(L), Número de calle(E), Número de sección(NS).

En ningún lado veo que exista la dependecia de Provincia(P) y Código(C) con DNI(D). Por lo tanto no entiendo de dónde está sacando que sabiendo el DNI de un persona se puede saber la Mesa(M) en cuál vota o la Provincia(P) en la cual vive. Por lo tanto el resto del ejercicio por supuesto que lo tenía todo mal hecho ya que yo trabajé sobre la base de datos del enunciado y ella trabajó sobre la de la vida misma

4 pensamientos en “Caso de estudio: “Dependencia Funcional”

  1. Matías dice:

    Cuando yo cursé Base de Datos tuvimos algo similar al ver 4ta Forma Normal. Irónicamente, ese tipo de cosas son las que hacen el desarrollo, mantenimiento y optimización de base de datos un problema increíble. No importa qué es lo que hagas, siempre estás tratando de modelar un problema del mundo real.

    Como si eso fuese poco, esa base de datos está pegada a un sistema real con sus propias limitaciones. Y a veces hay que hacer la vista gorda a ciertas normalizaciones o al evitar duplicación de información para hacer las cosas más sencillas y/o eficientes en otro lado.

    Si el problema hubiese requerido poder obtener un historial de las mesas en las que la gente votó en algún momento entonces la dependencia funcional de tu profesora pierde sentido (al fin y al cabo uno puede cambiar de domicilio) Entonces o bien el sistema tiene la limitación de sólo poder proveer información según los últimos datos, o se hace más complejo siendo la relación entre domicilios y DNIs una entidad aparte con la lógica extra de poder identificar el actual de los anteriores.

    Se les llama decisiones de diseño.

  2. euribates dice:

    La dependencia funcional, informalmente, es “si conocido el dato A, puedo inferir el dato B, entonces hay una dependencia funcional A -> B”. Formalmente, hay una D.F. entre A y B si en todas las tuplas en que A tiene un valor X, B tiene un mismo valor Y. O sea, Para todo t1 y t2 pertenecientes a R, si t1.a = t2.a, entonces t1.b = t2.b

    ¿Porqué DNI determina Provincia(P) y Código(C)? Porque si sé el DNI, puedo saber en que mesa esta, si sé la mesa, sé el municipio (y el número de distrito y número de sección), y si sé el municipio, sé la provincia.

  3. humitos dice:

    euribates:

    Creo que entiendo las dependecias funcionales, pero lo que no entiendo es de dónde sale la relación DNI -> Mesa(M).

  4. jileon dice:

    Ok, viene del siguiente punto:


    Un elector está inscrito en una [Y solo una, añado] mesa, incluida en una sección, a su vez incluida en un distrito, que a su vez pertenece a un municipio.

    Es decir, si conozco el DNI, solo hay una mesa donde ese señor puede votar, por tanto DNI -> Mesa. Al reves no existe depedencia funcional: Si conozco la mesa no conozco el DNI, porque hay muchos DNI asociados a la misma mesa.

    Obviamente, los atributos DNI y mesa (seguramente) estarán en tablas diferentes, si hacemos un diseño normalizado, pero aqui estamos en la fase previa a dicho diseño.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: