[Php-avanzado] Normalizacion Juan Manuel V1

Leonardo Tadei - Pegasus Tech Supply leonardot en pegasusnet.com.ar
Jue Dic 6 23:53:50 ART 2012


Hola Juan Manuel,

	si bien a la SRS le faltan un par de detalles, para ganar tiempo te
envío algunas correcciones que veo de las funcionalidades que ya están
listas:

El jue, 06-12-2012 a las 16:30 -0300, Juan Manuel P. escribió:
> Leo, si bien no me mandaste la correccion de la SRS por lo que
> hablamos ayer, me diste a entender que ya estaria casi terminada.
> Me puse a hacer la normalizacion de la BD la adjunto abajo.
> 
> Provincias
> [
>     pro_id:integer(autoincremental);
>     pro_name:Varchar(100);
> ]
> 
> Localidades
> [
>     loc_id:integer(autoincremental);
>     loc_name:Varchar(150);
>     loc_pro_id:integer; (FK)
> ]
> 
> Especies
> [
>     esp_id:integer(autoincremental);
>     esp_name:Varchar(100);
> ]
> 
> Razas
> [
>     raz_id:integer(autoincremental);
>     raz_name:Varchar(150);
> ]

	A Razas le falta la referencia a la Especie.

> Tamanos
> [
>     tam_id:integer(autoincremental);
>     tam_name:Varchar(25);
> ]
> 
> EstadosPublicacion
> [
>     est_id:integer(autoincremental);
>     est_name:Varchar(25); [Activo | Pendiente de Confirmación |
> Pendiente de Publicación | Rechazado]
> ]
> 
> Contactos
> [
>     con_id:integer(autoincremental);
>     con_name:Varchar(50);
>     con_email:Varchar(100);
> ]

	Según tu SRS te haría falta una tabla para Contacto de Mascota y otra
para Contacto Externo.
	Si por cómo funciona el sistema se pueden almacenar las dos cosas en
una misma tabla, entonces en la SRS podrías hablar solo de "Contacto" y
que toda la funcionalidad siga expresada correctamente y sin
ambigüedades.

> Mascotas
> [
>     mas_id:integer(autoincremental);
>     mas_name:Varchar(50);
>     mas_sexo: Byte (0-Macho |  1-Hembra);
>     mas_raz_id:integer;
>     mas_edad:integer;
>     mas_obs:text;
>     mas_tam_id:integer; (FK)
>     mas_loc_id:integer; (FK)
>     mas_est_id:integer; (FK)
>     mas_fecalta:timestamp;
> ]

	Varias cosas:
- primero y principal, tenés acá el mismo problema de concepto que con
los Contactos.
- hacé una tabla con los dos sexos y poné acá una referencia. No
hacerlo, además de dejarte la normalización incompleta, te llena el
código de IF preguntando si es 0 o 1 para ponerle el nombre, que
normalizando bien, aparece directamente en la proyección.
- no podés hacer solo una referencia a la Raza, porque en tu SRS se
pueden borrar y modificar, y de hacerlo cambiás las Mascotas publicadas
anteriormente.
- Idem para Tamaño, y para Especie.


> Mas_Pics
> [
>     mpic_id:integer(autoincremental);
>     mpic_mas_id:integer; (FK)
>     mpic_name:Varchar(50);
> ]

	Es poco 50 para el nombre de una imagen. Poné por lo menos 128.

> Mas_Codigos
> [
>     mcod_id:integer(autoincremental);
>     mcod_link:varchar(100);
>     mcod_mas_id:integer; (FK)
>     mcod_fecalta:timestamp;
> ]

	No encuentro justificación para que esto sea una tabla aparte... de
hecho, me parece que tenerlo aparte provoca circunstancias en que el
sistema fallaría.

> Mas_Situaciones
> [
>     msit_id:integer(autoincremental);
>     msit_name:Varchar(25);
> ]

	Qué es esta tabla ???

> RelMasCont
> [
>     rmc_mas_id:integer; (FK)
>     rmc_con_id:integer; (FK)
> ]

	Esta entiendo que desaparecería con la corrección que te menciono
arriba.

> Mas_Observaciones
> [
>     mobs_id:integer(autoincremental);
>     mobs_mas_id:integer; (FK)
>     mobs_con_id:integer; (FK)
>     mobs_calle:Varchar(100);
>     mobs_loc_id:integer; (FK)
> ]

	Posiblemente deba cambiar...

> Mas_Reuniones
> [
>     mreu_id:integer(autoincremental);
>     mreu_mas_id:integer;
>     mreu_con_id:integer;
> ]

	Lo mismo que para Mascota: si podrías poner las reuniones de Mascotas
Perdidas y de Mascotas Encontradas en la misma tabla, podrías en la SRS
especificarlo sin ambigüedades como una sola cosa.

> Sugerencias
> [
>     sug_id:integer(autoincremental);
>     sug_name:varchar(50);
>     sug_email:varchar(100);
>     sug_texto:varchar(500);
> ]

	Según tu SRS las sugerencias no se guardan, solo se envían. O esta
tabla sobra o el RF está incompleto.

> TAdmins
> [
>     tad_id:integer(autoincremental);
>     tad_name:Varchar(100);
> ]
> 
> Admins
> [
>     adm_id:integer(autoincremental);
>     adm_nombre:Varchar(50);
>     adm_apellido:Varchar(50);
>     adm_user:Varchar(20);
>     adm_pass:Varchar(20);
>     adm_email:Varchar(100);
>     adm_tad_id:integer; (FK)
> ]
> 
> Tablas_Autorizadas
> [
>     tab_id:integer(autoincremental);
>     tab_name:Varchar(30);
> ]

	Qué es esto???

	Si es lo que supongo, lo que se autoriza es el acceso a
funcionalidades, que expresado para las tablas (lo que no siempre es
posible) te da por cada tabla permiso para ver, agregar, modificar y
borrar.

> Autorizaciones
> [
>     aut_id:integer(autoincremental);
>     aut_name:Varchar(15);
> ]
> 
> Permisos
> [
>     per_tad_id:integer; (FK)
>     per_tab_id:integer; (FK)
>     per_aut_id:integer; (FK)
> ]

	Y si esto es el acceso ver, agregar, modificar y borrar de cada tabla,
no se justifica, porque no existen más que estas 4 cosas para hacer
sobre los datos.


	Bueno Juan Manual, como te decía, esto es para avanzar un poco.

	Por favor, concentrate en terminar la SRS para darle un contexto fijo a
esto, porque si no vamos a ir y venir demasiadas veces, porque cada
cambio en la SRS tiene un impacto en la normalización.

	Por otra parte, es habitual que normalizando se descubra algo del
sistema que no se había pensado, y que esto requiera actualizar la SRS,
como le pasó a un Cesar la iteración anterior, pero con la SRS validada,
estos ajustes son mínimos.

	Seguimos!

-- 
Leonardo Tadei
leonardot en pegasusnet.com.ar
Web: http://leonardo.tadei.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