Miércoles, 11 Abril 2012 13:53

Normalización de Base de Datos - II parte

Escrito por 
Valora este artículo
(0 votos)

Luego de la introducción anterior, vamos a ver ahora alguna regla práctica, o más precisamente algunas reglas prácticas que agrupadas se han dado en llamar la primera forma normal (1NF).

En palabras básicas, lo que debo obtener es una tabla que me permita identificar una línea como única dentro a la tabla.

Pero antes una pregunta capciosa (aunque no tanto): ¿qué es y para qué sirve una tabla?

Una tabla es un objeto de la base de datos que básicamente sirve para memorizar datos. Y básicamente estos datos pueden ser entidades (por ejemplo un libro) o relaciones (por ejemplo los libros escritos por un autor)... y esta, que parece una definición conocida y repetida hasta el cansancio, presenta una regla básica para el buen modelado:

EN LA TABLA DEBEMOS MEMORIZAR DATOS, JAMÁS MEMORIZAR INFORMACIÓN

No me detengo más sobre este concepto, que dá para otro artículo. Quise solo mencionarlo porque es importantísimo y demasiadas veces olvidado incluso por administradores de base de datos "experimentados".

La tabla está formada por una o más columnas (o atributos) que me permiten definir una línea (tupla).

Por ejemplo, si en una tabla memorizara los libros de una biblioteca, en cada línea de esta tabla identificaría un libro, y esto lo podría hacer por ejemplo por título, autor, editor, año de impresión, ISBN, cantidad de páginas, idioma (en el que está escrito), et

Se podría diagramar esta tabla de este modo:

tabla librosEs de notar que esta tabla no está bien diseñada. Sirve solo para este ejemplo

No obstante lo que tenemos que buscar ahora es una columna que nos identifique en modo unívoco cada una de las líneas (tuplas) de esta tabla... En otras palabras lo que estamos buscando es una "clave".

Las claves son justamente columnas (o atributos, o dominios) que permiten identificar cada uno de los renglones de una tabla. Estas claves no deben repetirse para más de un libro (en nuestro ejemplo), por lo que no podemos elegir como clave a la columna "autor" ya que un mismo autor puede haber escrito más de un libro.

Las posibles claves que surgen pueden ser:

  1. ISBN, ya que es un número único para un libro
  2. título+ autor (atención, es la suma de los dos) ya que un mismo autor puede escribir dos libros distintos pero estos se llamarán de distinto modo. No puedo elegir solo la columna título ya que dos autores pueden haber escrito libros con el mismo título (busquen la cantidad de libros que se llaman "sql" en internet, y tendrán una idea del por qué no puedo elegir solo esa columna)
  3. título+género+año de impresión podría ser otra clave...

Todas las claves posibles en una tabla se llaman "claves candidato" (candidate key). Luego yo elegiré una de ellas y la designaré como "clave primaria" (primary key).

NOTA: es un requisito que la tabla no tenga clave primaria "null"; en otras palabras si elegí la columna ISBN como clave primaria, tengo que completar ese valor para todos los libros completados en la tabla.

Para designar clave primaria tengo otra opción: crear una columna que no se refiere a ningún atributo de ningún libro pero que aseguro que será distinta en cada libro registrado en la tabla. Este es el caso, por ejemplo, de las columnas "identity" (generalmente se les pone nombre "id"). Estas columnas que se crean para designar clave primaria sobre ellas en una tabla pero que no describen ningún atributo de una entidad se denominan "claves artificiales" o "claves surrogadas" (mientras que las otras se denominan "claves naturales").

¿Conviene usar como clave primaria una que sea "natural" o una que sea "surrogada"? Si bien hay consideraciones a tener en cuenta en la elección, digamos en línea de máxima que para la mayoría de los casos, depende en buena parte del gusto del dba.

Seguiremos en otros artículos viendo las técnicas de modelado.

Leer 12570 veces Modificado por última vez en Miércoles, 30 Mayo 2012 17:08

Información adicional