[Php-avanzado] Normalizacion Juan Manuel V3

Juan Manuel P. tucu_21 en hotmail.com
Sab Dic 8 16:41:05 ART 2012


Leo hice las correcciones que me mencionas te respondo abajo de cada una, borro lo que no tiene correccion y copio la nueva Normalizacion.

In his heart, in his eyes
In his soul, there’s no sign of thunder
Screams, can you hear the screaming
When another restless soul must die

> From: leonardot en pegasusnet.com.ar
> To: php-avanzado en pato2.fi.mdp.edu.ar
> Date: Sat, 8 Dec 2012 16:18:44 -0300
> Subject: Re: [Php-avanzado] Normalizacion Juan Manuel V3
> 
> Hola Juan Manuel,
> 
> 	Es una solución tan mala (o tan buena) como el campo discriminador.
> 	Todo lo que no esté en 3FN te va a traer unas consecuencias u otras en
> el código.
> 	De todas formas y como te decía, las imágenes son un complemente que no
> hace al núcleo del problema, y al menos el impacto quedará acotado al
> manejo de las imágenes.
> 	Recordá poner un comentario en esta tabla en la normalización para
> aclarar esta decisión y los motivos.
> 

Opte por tener las 3 tablas de imagenes, en si no me significan mayor problema, lo que si es que los nombres de los campos en las tres tablas van a ser los mismos, solamente cambia el nombre de cada tabla, de manera que las consultas que se realicen sean mas sencillas de intercambiar para cada sutiacion de Mascota.

> > > > Mas_Codigos
> > > > [
> > > > mcod_id: integer(autoincremental);
> > > > mcod_link: varchar(100);
> > > > mcod_mas_id: integer; (FK)
> > > > mcod_sit_id:integer;(FK)
> > > > mcod_fecalta: timestamp;
> > > > ]
> > > 
> > > Esta tabla no va.
> > > El link de aprobación depende directamente y solo depende de la
> > Mascota
> > > X a que corresponde, por tanto la normalización no dice que tiene
> > que
> > > estar en tabla aparte, sino como parte de la entidad de la que
> > depende.
> > 
> > Ok, la borre. Igual el sentido de esta tabla era no almacenar los
> > codigos por demasiado tiempo. Se supone que pasado los 3 dias cada
> > codigo se borraria, incluso antes si el contacto valida el email.
> 
> 	El sentido de existir o no de una tabla lo da la normalización, y no la
> duración del dato u otros factores...
> 	Si no querés mantener el dato, luego de validado asignale NULL.
> 
> 
> > > Con el id de situación, estás usando acá de nuevo un campo
> > > discriminador. En este caso, no es una cuestión lateral del
> > > almacenamiento, así que sí vas a tener que normalizarlo y crear un
> > > almacenamiento para las Observaciones de cada Mascota X que las use.
> > > 
> > > Releyendo la SRS para validar la normalización, me acabo de dar
> > cuenta
> > > de que no le encuentro sentido a tener una Observación de Mascota
> > > Encontrada.
> > > Está bueno que si uno ve una Mascota Perdida, pueda avisar que la
> > vio
> > > en determinado lugar. Pero en qué situación alguien reportaría que
> > vio
> > > una Mascota Encontrada? 
> > 
> > La reportaria si la conoce, actualmente tengo 2 conocidos que han
> > encontrado en la calle a 2 perros. Suponete que hay alguien que ve la
> > foto y los reconoce, entonces completaria un Aviso de Observacion de
> > Mascota Encontrada, de esta forma el sistema pone en contacto a la
> > persona que reporta que lo conoce al perro y la persona que
> > actualmente lo encontro.
> 
> 	Ahhh... ahora caigo con qué es lo que me desentonaba.
> 	Según tu descripción, esto no es una "Observación de Mascota
> Encontrada" sino un "Conocimiento de Mascota Encontrada" porque lo que
> se alguien reporta es que conoce al animal que otro encontró.
> 
> 	Es importante que la frase que define a cada cosa tenga el sentido
> correcto, porque si no uno se forma una idea diferente a lo que es la
> cosa.
> 
> 	No sé si el nombre "Conocimiento de Mascota Encontrada" es el mejor de
> todos, pero seguro que es más fidedigno a la cuestión que "Observación
> de Mascota Encontrada".
> 
> 	Qué nombre te parece mejor ponerle a esto? Por qué?
> 

Lo cambie en la Normalizacion y en la BD por "Reconocimiento", creo que representa de manera fidedigna la cuestion en si.

Si queres que te reenvie la SRS avisame, hice el cambio en cada RF y en el diccionario, paso de llamarse "Aviso de Observacion de Mascota Encontrada" a llamarse "Aviso de Reconocimiento de Mascota Encontrada"

> > > No cambies nada en la SRS sobre esto: te quería comentar esta
> > cuestión.
> > > 
> > > 
> > > 
> > > > Mas_Reuniones
> > > > [
> > > > mreu_id: integer(autoincremental);
> > > > mreu_mas_id: integer;
> > > > mreu_sit_id:integer;(FK)
> > > > mreu_con_id: integer;
> > > > ]
> > > 
> > > No me doy cuenta qué es esta tabla... 
> > > Me explicás?
> > > 
> > Es para los avisos de Reunion. Cuando un contacto encuentra a la
> > mascota,(ya sea si esta perdido que lo encontro, o si es encontrado
> > que se ubico a la familia)  completa este aviso, para que el sistema
> > pase la mascota como Reunida. Sucede que esto es necesario almacenarlo
> > porque si alguien no confirma el mail enviado la mascota no pasaria
> > nunca a Reunida.
> 
> 	Entonces tiene demasiado impacto en el software tener acá un campo
> discriminador en vez de tener esto bien normalizado.
> 	Creá un almacenamiento para Aviso de Reunión de Mascota Perdida y otro
> para Aviso de Reunión de Mascota Encontrada.

> > NORMALIZACION V3
> > Mas_Reuniones_Encontradas
> > [
> >     mre_id: integer(autoincremental);
> >     mre_mase_id: integer; (FK) 
> >     mre_link: varchar(100);
> > ]
> 
> 	
> 	El nombre de estas dos tablas de arriba no debería tener la palabra
> "Aviso" ???
> 	Cuesta bastante entender a qué funcionalidad dan soporte si no lo
> dice...
> 
Le agregue la palabra Avisos a cada una de las 4 tablas, para que tenga relacion con la SRS, acote los nombre del resto porque sino quedan demasiado extensos, en su lugar agrego un comentario en cada una de las tablas de las tablas.


NORMALIZACION V4

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);
    raz_esp_id:integer;(FK)
]

Tamanos
[
    tam_id: integer(autoincremental);
    tam_name: Varchar(25);
]

Estados_Publicacion
[
    est_id: integer(autoincremental);
    est_name: Varchar(25); [Activo | Pendiente de Confirmación | Pendiente de Publicación | Rechazado]
]

Contactos_Mascotas
[
    con_id: integer(autoincremental);
    con_name: Varchar(50);
    con_email: Varchar(100);
]

Contactos_Externos
[
    cext_id: integer(autoincremental);
    cext_name: Varchar(50);
    cext_email: Varchar(100);
]

Sexos
[
    sex_id:integer(autoincremental);
    sex_name:Varchar(20);
]

Mascotas_Perdidas
[
    mas_id: integer(autoincremental);
    mas_name: Varchar(50);
    mas_sex:Varchar(20);
    mas_sex_id:integer;(FK)
    mas_raza: Varchar(150);
    mas_raz_id:integer;(FK)
    mas_edad: integer;
    mas_obs: text; - allow NULL
    mas_tamano: Varchar(25);
    mas_tam_id:integer;(FK)
    mas_loc: Varchar(150);
    mas_loc_id:integer:(FK)
    mas_prov: Varchar(100);
    mas_est_id: integer; (FK)
    mas_con_id:integer(FK);
    mas_link: varchar(100); - allow NULL
    mas_fecalta: timestamp;
]

Mascotas_Encontradas
[
    mas_id: integer(autoincremental);
    mas_name: Varchar(50);
    mas_sex:Varchar(20);
    mas_sex_id:integer;(FK)
    mas_raza: Varchar(150);
    mas_raz_id:integer;(FK)
    mas_edad: integer;
    mas_obs: text; - allow NULL
    mas_tamano: Varchar(25);
    mas_tam_id:integer;(FK)
    mas_loc: Varchar(150);
    mas_loc_id:integer:(FK)
    mas_prov: Varchar(100);
    mas_est_id: integer; (FK)
    mas_con_id:integer(FK);
    mas_link: varchar(100); - allow NULL
    mas_fecalta: timestamp;
]


Mascotas_Reunidas
[
    mas_id: integer(autoincremental);
    mas_name: Varchar(50);
    mas_sex:Varchar(20);
    mas_sex_id:integer;(FK)
    mas_raza: Varchar(150);
    mas_raz_id:integer;(FK)
    mas_edad: integer;
    mas_obs: text; - allow NULL
    mas_tamano: Varchar(25);
    mas_tam_id:integer;(FK)
    mas_loc: Varchar(150);
    mas_loc_id:integer:(FK)
    mas_prov: Varchar(100);
    mas_est_id: integer; (FK)
    mas_con_id:integer(FK);
    mas_link: varchar(100); - allow NULL
    mas_fecalta: timestamp;
]

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

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

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


Avisos_Obs_P
[
    avi_id: integer(autoincremental);
    avi_mas_id: integer; (FK) 
    avi_cext_id: integer; (FK)
    avi_calle: Varchar(100);
    avi_loc_id: integer; (FK)
    avi_loc:Varchar(150);
    avi_prov:Varchar(100);
    avi_link: varchar(100);
]

Avisos_Rec_E
[
    avi_id: integer(autoincremental);
    avi_mas_id: integer; (FK) 
    avi_cext_id: integer; (FK)
    avi_calle: Varchar(100);
    avi_loc_id: integer; (FK)
    avi_loc:Varchar(150);
    avi_prov:Varchar(100);
    avi_link: varchar(100);
]

Avisos_Reu_P
[
    avir_id: integer(autoincremental);
    avir_mas_id: integer; (FK) 
    avir_link: varchar(100);
]

Avisos_Reu_E
[
    avir_id: integer(autoincremental);
    avir_mas_id: integer; (FK) 
    avir_link: varchar(100);
]

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

Tipo_Admins
[
    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)
]
 		 	   		  
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://www3.fi.mdp.edu.ar/pipermail/php-avanzado/attachments/20121208/b53eb834/attachment-0001.html>


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