[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