[Php-avanzado] Hasta que punto conviene Normalizar una DB

Leonardo Tadei - Pegasus Tech Supply leonardot en pegasusnet.com.ar
Jue Abr 28 11:04:53 ART 2011


Hola Gonzalo,

El mar, 26-04-2011 a las 16:43 -0700, gonzalo rama escribió:
> Leo, primero te mande mal la url .. :( es esta:
> http://soynn.com/diagrama.db.2.png

	Ahora sí veo cambios...

> Y te explico el tema del video_file; un vídeo puede tener varios
> archivos de vídeo, por ejemplo de diferente calidad e idioma del
> audio. Con ese sentido se creo vídeo_file. El campo video_id (tabla
> video_file) hace referencia al Id del vídeo al que corresponde ese
> archivo.
> 
	Se entiende.
	En el gráfico muchas cosas tienen lang_id, pero no aparece una tabla
Languages.
	Asumamos que está por ahí y que se relaciona con todas las tablas que
hacen referencia al lang_id y sigamos adelante.

> Ahora mi pregunta es: ¿Esta mal normalizado? . Planteando la
> situación: partiendo de una búsqueda en al tabla title_descripcion se
> desea listar todos los vídeos y de ser una serie todos el árbol de
> temporadas con sus vídeos, titulos y descripciones. 

	Por algo que decís en el párrafo de arriba, parece que sí está mal
normalizado.
	Decis "...listar todos los vídeos y de ser una serie..." lo que implica
que no todos los videos son de una serie.
	Sin embargo tenés una relación 1-1 con Episode, lo que significa que
todos los videos tienen que tener sí o sí un Episodio, y por lo tanto
una Season y una Serie.

	A todo esto, hay otra cosa que se me escapa: me queda claro que un
Video tendrá tantos títulos y descripciones como idiomas distintos se
carguen al sistema, pero entonces, el título y la descripción no
dependen del Video_File, en lugar de depender del Video ???

	Con este almacenamiento, le podés poner a un video un título en chino,
pero esto no significa que tengas el video_file realmente en chino.
	(Si esto además hace referencia a enlaces o archivos, no aparece un
campo para este dato en Video_File)

> .. ¿es mejor plantear por separado todas las tablas de relaciones 1 a
> N ? por ejemplo: season_has_episode  ,  video_has_video_file, 

	Tu pregunta no tiene sentido :(.
	Si tenés una relación 1-1, entonces _tenés_ que tener un campo en la
Tabla_A que haga referencia a la clave primaria de la Tabla_B. (como acá
hacés con los lenguajes).
	Si tenés una relación 1-N, entonces _tenés_ que tener un campo en la
Tabla_B que haga referencia a la clave primaria de la Tabla_A, y tendrás
N registros en B por cada uno de A.
	Si tenés una relación N-N, entonces _tenés_ que tener una tabla que
contenga las relaciones entre los registros de la Tabla_A y de la
Tabla_B. (como acá hacés con los géneros).

	Lo que tienen este tipo de problemas, al igual que organizar libros o
música, es que todo es malditamente N-N... pero no soy yo ni la
normalización: es el tipo de problema.


> Muchas gracias!.

	Por anda.
	Muy bueno lo de acotar el problema a solo los videos, ya que la
solución es idéntica para las otras entidades, y así es más simple de
ver.

	Respuesta a tu cuestión en el asunto:
- Hasta que punto conviene Normalizar una DB?
- Luego de normalizar en 3FN los datos, vemos si se puede simplificar
algo para este problema en particular.


-- 
Leonardo Tadei
leonardot en pegasusnet.com.ar
Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key



Más información sobre la lista de distribución Php-avanzado