Duda en Base de Datos (Diseño)

Publicado en 'Programación' por celsoxvi, 18 Nov 2011.





  1. celsoxvi

    celsoxvi Miembro de bronce

    Registro:
    1 Mar 2009
    Mensajes:
    1,196
    Likes:
    72




    Hola Gente, Bueno tengo una Duda en el diseño que estoy haciendo y tengo lo Siguiente:

    persona:
    idpersona
    nombre
    apellido
    direccion

    cliente
    idpersona
    dni

    vendedor
    idpersona

    Tanto Cliente como vendedor heredan de persona sus Atributos. Y bueno mi duda va a esto, tengo una tabla venta

    venta
    ventaid
    fechaventa

    yo lo que quiero es relacionar la tabla venta con el cliente y con el vendedor ya que necesito saber quien es el cliente y quien realiza la venta, pero si relaciono se duplicara el idpersona tanto del cliente como del vendedor.

    Lo que tenia en mente, pero no se si es dable; es crear un campo mas tanto en vendedor y cliente que se llame clienteid y vendedorid y al momento de relacionar que solamente llamen a las claves PK clienteid y vendedorid. No se si se podra ya que al momento de relacionarlo automaticamente me baja tambien el idpersona (SGBD MySQL y Workbench como Herramienta CASE).

    Y una ultima Duda.

    Tengo una Tabla Proveedor, Cada proveedor tiene uno o muchos representante de venta (Que tiene los Mismo campos que Persona), Pero es aqui en donde vuelo, Si heredar de persona sus atributos por medio de una relacion a la tabla represententa y de la tabla representante hacer una relacion a la tabla proveedor sabiendo que el campo en comun sera idpersona.

    Espero que me puedan ayudar. Gracias.
     


  2. xtian11

    xtian11 Miembro nuevo

    Registro:
    9 Oct 2011
    Mensajes:
    8
    Likes:
    0
    hola
    En tu primera duda. No es que se este duplicando .. en teoría es el mismo campo pero son datos diferentes.. me parece q si esta bien.. . te estas confundiendo un poco..
    En tu tabla venta iria asi
    Ventaid,
    fechaventa,
    idcliente,
    idvendedor
    Idcliente apuntaría a idpersona de la tabla cliente y idvendedor apuntaría a idpersona de la vendedor..


    Son datos diferentes. Pero tiene el mismo origen… son relaciones de uno a uno..


    Observación.. el campo de dni en cliente como q me parece q no va ahí… es es un dato de persona..


    Tu segunda consulta
    Utilizaría una tabla intermedia(representates_venta) que estaría realacionado con proveedor y representates y represtantes estaría relacionado con persona


    tablas

    Proveedor ---> representantes _venta <--- representantes <---- persona
    campos

    Idproveedor --> idrepresentante <- id_representante <- idpersona
    Idproveedor idpersona

    cuidate
     
  3. celsoxvi

    celsoxvi Miembro de bronce

    Registro:
    1 Mar 2009
    Mensajes:
    1,196
    Likes:
    72
    Hola, Gracias por responder mis dudas, cualquier otra duda lo haré por este medio, nos vemos.
     
  4. initiald

    initiald Miembro frecuente

    Registro:
    12 Jun 2010
    Mensajes:
    142
    Likes:
    19
    Hola veo que estas utilizando herencia para la persistencia, pero te dejo un articulo que te dará distintas formas para llegar a la misma solución.

    Fuente : Click para entrar a la WEB
     
    Última edición: 20 Nov 2011
  5. celsoxvi

    celsoxvi Miembro de bronce

    Registro:
    1 Mar 2009
    Mensajes:
    1,196
    Likes:
    72
    Claro, lo habia pensado hacer de esa forma si por ejemplo

    persona:
    idpersona
    nombre
    apellido
    direccion

    tipoDePer
    idPer
    Nombre

    Cosa que Muchas Personas pertenecen a un Tipo y un Tipo tiene Muchas Personas.

    ----- mensaje añadido, 20-nov-2011 a las 12:54 -----

    Pero ya tengo digamos esta forma en mi Tabla Persona, tanto para Cliente, representante y personal. Aquí la Imagen.

    [​IMG]

    Esto es lo que tengo hasta ahora, esto es lo que me preocupa por que de aquí comienzo a programar, necesito sus opiniones y haber que mas puedo hacer. Alguna Sugerencia mas para agregar, Si por ejemplo quiero manejar digamos, usuarios y contraseña, tanto para cliente, personal y representante en donde creo la tablita.
     
    Última edición: 20 Nov 2011
  6. initiald

    initiald Miembro frecuente

    Registro:
    12 Jun 2010
    Mensajes:
    142
    Likes:
    19
    Bueno como el sistema el personal o empleados me imagino que el sistema esta hecho para ellos entonces serian los unicos que tienen accesso al sistema entonces la relacion podria ir ahi de uno a uno, donde la tabla usuario dependa de personal. Por el contrario si los clientes y personal tienen acceso al sistema con roles o privilegios determinados la relación iría con personal.

    Ahora lo que no especificas en tu modelo es si el personal o empleados tienen un mismo cargo o pueden ser (Secretarios, Administradores, Vendedores etc.) para esto tendrias que crear otra tabla cargo relacionado con personal donde personal depende de cargo.

    Tambien con respecto a la tabla cliente, personal o represtante como piensas hacer la relacion, no veo ningun atributo o campo foraneo que vincule a las dos tablas.

    Por pura curiosidad el representante no es un empleado mas o es alguien externo a la empresa.
     
    Última edición: 20 Nov 2011
  7. celsoxvi

    celsoxvi Miembro de bronce

    Registro:
    1 Mar 2009
    Mensajes:
    1,196
    Likes:
    72
    A Claro. Bueno vamos por estos Puntos:

    - Si como tu Dices, Solo la Tabla Personal tendrá Acceso al Sistema, asi que Creare una Tabla llamada:

    personalsys
    codusuarioID
    nombreuser
    password

    - en la tabla personal hay un campo llamado tipoID(FK) que esta relacionada con una tabla llamada TipoPersonal en donde ahí he agregado los registros:

    1 - Vendedor
    2 - Almacenero
    ...

    - Bueno el Representante viene hacer del Proveedor, Osea que un Proveedor puede tener 1 o muchos Representantes y el representante viene a tener casi todas los atributos de la tabla persona.
     
  8. initiald

    initiald Miembro frecuente

    Registro:
    12 Jun 2010
    Mensajes:
    142
    Likes:
    19
    Después de a ver aclarado todas mis observaciones y al a ver mencionado que existe una tabla proveedor de la cual depende representante. Solamente unas observaciones mas:

    1. En la tabla tipo de documentos cuantos registros contendrá.
    2. En el caso de TipoZona, TipoVia y UbiGeo son valores que cambiaran con el tiempo, me refiero a que aumentaran las filas o disminuirán o se mantendrán la cantidad constante durante mucho tiempo.

    Porque si son valores constantes en el tiempo, como por ejemplo los distritos de lima que en el tiempo es bien raro que aumente o disminuya un distrito, la persistencia de este se puede dejar de lado y utilizar arrays en memoria.
     
    Última edición: 21 Nov 2011
  9. celsoxvi

    celsoxvi Miembro de bronce

    Registro:
    1 Mar 2009
    Mensajes:
    1,196
    Likes:
    72
    1.- Tendrán 5 Registro de Acuerdo a la tabla del Ministerio de Trabajo
    2.- Si, esas 3 tablas sus Datos no Varían (Tal vez con el Tiempo), Pero se ha puesto por Motivos académicos, osea que todo funcione desde la Base de Datos nada mas.

    Verdad, Si esta bien que se cree una tabla de personalsys y que valla relacionada con la tabla personal para que cuando aya un personal este se le asigne un usuario y contraseña. Gracias.

    personalsys
    codusuarioID
    nombreuser
    password
     
  10. celsoxvi

    celsoxvi Miembro de bronce

    Registro:
    1 Mar 2009
    Mensajes:
    1,196
    Likes:
    72
    Una Pregunta, que otros Campos le puedo agregar a la tabla cliente.