[Php-avanzado] Tesis Diego Oliva
Leonardo Tadei - Pegasus Tech Supply
leonardot en pegasusnet.com.ar
Lun Dic 1 23:58:44 ART 2008
Hola Diego!
El vie, 28-11-2008 a las 14:16 -0200, Oliva, Diego M. escribió:
> > > Bue, lo mío era la agenda, empezando, tiene el login y sector
> > > registro de nuevo usuario, el cual debe completar nombre de usuario,
> > > contraseña, y sus datos para la agenda (los que disponga), pero
> > > obligados nombre, apellido, dirección, teléfono y mail. Va a pasar por
> > > una validación, escalable por el administrador del sistema, la cual
> > > tendría, aceptación automática, validacion contra autenticación de mail
> > > por vinculo url (ampliable a soporte de restricción de registro contra
> > > dominios permitidos de mail) o por último, validación por el administrador.
> > >
> >
> > Es decir, el usuario completa los datos pero hasta que el admin no le
> > da el Ok, no podrá entrar al sistema.
> > Es así?
> >
> Es elegible por el adminsitrador... va a tener
> entre esas opciones... la ultima seria que él es el que decide si un
> usuario que quiere registrarse puede acceder al sistema...
Ok... mandale una alerta por mail, pobre Administrador...
> >
> > > El teléfono que quede en espera quedará asignado a una categoría llamada A Designar.
> > >
> >
> > Mmmm... no lo veo usable.
> > Y que tal un tagging por usuario? Así si un usuario dice que el
> > teléfono es de tipo "perejil", esta categoría no estará disponible para
> > otros usuarios... Si al crear un usuario tenés unos tags razonables
> > predefinidos, en gral no se agregarán muchos más.
> >
> Asi lo habia pensado originalmente, pero despues me
> arrepenti porq la mayoria de los datos ivan a estar repetidos... es
> como que me asustó la cantidad de registros que tendria esa tabla...
> pero sí me parece lo más practico...
No te asustes por la cantidad de datos: los RDBMS están justamente para
eso... un millón de registros en una tabla no es tanto si tiene el
índice correcto.
> > > Por otro lado, cada contacto también podrá ser categorizado
> > > dentro de grupos, los cuales estarán regidos por las mismas reglas que
> > > los tipos de los teléfonos. Y también, será posible clasificar un
> > > contacto de "Público", de forma tal que cualquier otro usuario pueda ver
> > > dichos datos.
> > >
> >
> > Si esto lo usás para determinar la visibilidad de un contacto a los
> > demás usuarios, las categorías deben ser fijas.
> >
>
> No, los grupos son independientes de la clasificacion
> "Público", si un contacto es público o no va a estar regido por el
> booleando de la tabla...
y cómo se entera un usuario de los grupos?
y cómo sabe qué usuarios estarán dentro de un grupo?
> Por otro lado, cada contacto va a estar dentro de un
> grupo, del estilo, Grupo de "Amigos", Grupo del "Trabajo", Grupo de
> "Familiares", etc... y la idea era que dichas categorias también
> estuvieran reguladas por el administrador, pero, de vuelta, si es
> preferible que los grupos sean independientes a cada usuario, mejor.
Pero la idea de los grupos de este trabajo no es solo organizativa,
sino que es el parámetro para compartir con otros.
Originalmente, un usuario era miembro de un grupo, y podía compartir
contactos con su grupo o no.
Sin este requerimiento el trabajo queda pobre en procesos...
> > No hay que recorrer!!!
> > Lo importante del SQL es que siempre evita una recorrida, ya que
> > restringís la proyección a los datos que te interesan solamente.
> > En este caso, inventando los nombres de las tablas, sería:
> >
> > SELECT * FROM Datos WHERE id_usuario=3
> >
> > en dónde "3" es el id del usuario logueado.
> >
>
> Verdad...
> > > ============================================
> > > Tablas ->
> > > ============================================
> > >
> > > Mails_permitidos:
> > >
> > > ID (INT)
> > > MAILS
> > >
> >
> > Esto es para la restricción de dominios permitidos para nuevos usuarios
> > que mencionás más arriba? Si es así, Mails no es un buen nombre...
> >
>
> En efecto, es para eso, y estos no son los
> nombres que voy a dejar... mi intencion es tratar de inventarme alguna
> regla para generar todos nombres cortos y entendibles...
Generá nombres descriptivos. Si son cortos, mejor, pero que sean bien
descriptivos.
Después si no al leer una consulta no se entiende la intención, porque
"mails" significa en tu cabeza "correo electrónico" y vos la usás para
filtrado por nombres de dominio
> > > Usuarios:
> > >
> > > ID (INT)
> > > **ID_DATOS (INT)
> > > *USUARIO (VARCHAR 20)
> > > CONTRASEÑA (VARCHAR 64)
> > > HASH_CREACION (VARCHAR 64)
> > > ACTIVO (BOOLEAN)
> > > ADMINISTRADOR (BOOLEAN)
> > >
> >
> > Qué función cumple el Hash ???
> >
>
> para la validacion de los usuarios por url... una
> clave md5 o sha aleatoria, que va a estar en la url que se envie por
> mail para dar de alta el usuario, para la validacion...
Ok.
> > > Telefonos:
> > >
> > > ID (INT)
> > > TELEFONO (VARCHAR 15)
> > > INTERNO (VARCHAR 5)
> > > ID_TIPO (INT)
> > > ID_DIRECCION (INT)
> > > ID_DATOS (INT)
> > > PRINCIPAL (BOOLEAN)
> > >
> >
> > Arriba decís que los teléfonos se asocian a una dirección, pero cómo se
> > comporta esto para el caso de los móviles?
> > No entiendo cual es el objetivo de esta asociación...
> >
> Los telefonos fijos van a estar asociados a las
> direcciones... los moviles no. pasa que mi razonamiento fue que, un
> telefono fijo, esta fijo, en una direccion, y, por tanto, estaria
> bueno poder relacionar un telefono con su emplazamiento fijo...
>
> en el caso de los celulares no, solo el celular y su
> descripcion...
Mmmm... un teléfono es un teléfono... esto no justifica separar ambas
tablas en dos.
A lo sumo creá una tabla de teléfonos "pelada" con un código que
indique el tipo, y si el tipo es "fijo" podés traer direcciones
asociadas.
> > > Tipo_Tel:
> > >
> > > ID (INT)
> > > NOMBRE (VARCHAR 15)
> > > ACTIVO (BOOLEAN)
> > >
> >
> > Qué es "activo"? Un borrado lógico? y por qué no físico?
> >
>
> el activo lo habia puesto como que indicador, por el
> hecho de que un usuario quiere otra categoria de telefono, pero como
> depende de que el administrador la apruebe, que quede en la base de
> datos pero no activa, y si el adminsitrador la aprueba, entonces se
> activa... ahora, si se usan por usuario, entonces no va a tener
> utilidad ese campo...
Esto de que el sistema no se pueda usar hasta que el administrador lo
apruebe te aseguro que es una política horrible: cortás la
escalabilidad, agregás administración innecesaria, convertís en manual
algo naturalmente automático, hacés que el usuario tenga que esperar...
> > > Datos:
> > >
> > > ID (INT)
> > > NOMBRE (VARCHAR 50)
> > > APELLIDO (VARCHAR 50)
> > > FOTO (VARCHAR 50) (Cuando sepa donde las voy a guardar seguro
> > > lo vario...)
> > > PUBLICO (BOOLEAN)
> > > ID_GRUPO (INT)
> > > ID_USUARIO (INT)
> > >
> >
> > Esto significa que cada contacto puede pertenecer a un grupo
> > distinto... no está mal, pero no lo aclarás arriba, y en la propuesta
> > mia el usuario pertenece a un grupo, y decide si a ese contacto lo ve
> > solo él, su grupo, o todos.
> >
> Si, osea, arriba esta, cada contacto es
> clasificable dentro de un grupo, cada usuario tendria sus grupos,
> segun el actual planteamiento, y, a su ves, cada contacto puede
> ser.. .digamos... etiquetado, como publico, de forma tal que lo van a
> poder ver todos los usuarios...
Te lo discuto más arriba. Si los grupos de la agenda serán para
clasificar los datos de un usuario, la tesis queda flaca... habría que
agregarle algo más.
Si es solo esto tu tesis se resume a un ABM más largo, normalizado y
nada más. La única query interesante es ver los contactos públicos o
no... un simple WHERE publico=si en la misma query que trae los datos.
> ahora... no entendi esto... '[...] y decide si
> a ese contacto lo ve solo él, "su grupo", o todos. '
> no estoy planteando distinos grupos para los
> usuarios.... que me perdi?
De la idea de los grupos de personas compartiendo contactos!
Groupware!!!
> > > Grupos:
> > >
> > > ID (INT)
> > > NOMBRE (VARCHAR 30)
> > > ACTIVO (BOOLEAN)
> > >
> >
> > Idem la pregunta del borrado lógico.
> >
>
> lo mismo que para los tipos de telefono...
Arrrggghhhhh!!!! ;-)
> > > Mails:
> > >
> > > ID (INT)
> > > MAIL (VARCHAR 50)
> > > ID_DATOS (INT)
> > > PRINCIPAL (BOOLEAN)
> > >
> > > Webs:
> > >
> > > ID (INT)
> > > WEB (VARCHAR 100)
> > > DESCRIPCION (VARCHAR 50)
> > > ID_DATOS (INT)
> > > PRINCIPAL (BOOLEAN)
> > >
> > > Moviles:
> > >
> > > ID (INT)
> > > MOVIL (VARCHAR 15)
> > > DESCRIPCION (VARCHAR 50)
> > > PRINCIPAL (BOOLEAN)
> > > ID_DATOS (INT)
> > >
> >
> > Mmm... tatar os teléfonos fijos y los móviles por separado no sé si es
> > buena idea...
> > Cómo lo justificás?+
> >
>
> lo plantee asi por el tema de las direcciones...
Con un discriminante funciona mejor.
Más arriba está discutido.
> > > Direcciones:
> > >
> > > ID (INT)
> > > DIRECCION (VARCHAR 100)
> > > DESCRIPCION (VARCHAR 50)
> > > ID_CIUDAD (INT)
> > > PRINCIPAL (BOOLEAN)
> > >
> > > Ciudades:
> > >
> > > ID (INT)
> > > CIUDAD (VARCHAR 30)
> > > PREFIJO (VARCHAR 10)
> > > ID_PROVINCIA (INT)
> > >
> > > Provincias:
> > >
> > > ID (INT)
> > > PROVINCIA (VARCHAR 30)
> > > PREFIJO (VARCHAR 10)
> > > ID_PAIS (TINYINT)
> > >
> > > Paises:
> > >
> > > ID (TINYINT)
> > > PAIS (VARCHAR 30)
> > > PREFIJO (VARCHAR 3)
> > >
> >
> > Para los prefijos de paises usás los ISO, de 2 letras.
> > No sé si IRAM o alguien tiene un prefijo estándar de Provincias.
> > Para qué usarías el prefijo de la ciiudad?
> >
>
>
> los prefijos no son de las ciudades, provincia, pais
> en si, si no de los telefonos que se encuentren en ellas, mi intencion
> es que se deban escribir los telefonos como si se los fuera a llamar
> localmente, y en el caso de encontrarse en otro pais, saber los
> codigos... por ejemplo, para llamar a mi telefono desde... no se...
> japon... marcar 00 o +, dependiendo de alla, y luego 54, prefijo
> argentina, 11, prefijo buenos aires, 223, prefijo mar del plata, y
> finalmente el telefono... se entiende? no se... me parecio practico...
> aunq si me faltaria codigos postales...
Ah! Yo estaba pensando en otra cosa.
Entonces salta más a la vista lo de los móviles, que también tienen
código DDN y código DDI pero no están fijados a una dirección.
Por otra parte, esto no te resuelve cómo hacer una llamada desde fuera
a un teléfono, porque no tenés el código de ingreso al DDN o DDI de cada
país.
Las provincias no tienen prefijos telefónicos.
Esto está para replantearlo, pero no solo la normalización, sino la
intención del sistema, como contexto de la normalización.
Saludos!
PD: en la parte de login de usuario y sus datos personales ya podés ir
trabajando...
--
Leonardo Tadei
leonardot en pegasusnet.com.ar
http://blog.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