- Duda para definir un modelo de BD

Iniciado por Happiness, 9 Marzo 2014, 22:39 PM

0 Miembros y 1 Visitante están viendo este tema.

Happiness

- Antes de exponer mi caso, quiero aclarar que en si no e realizado nada en concreto ya que primero quiero comenzar con la logica de la BD la cual no la tengo muy clara.

- En segundo lugar resaltar que soy novata en esto de las BD así que agradecería mucho si es posible que me ayuden explicandome como si tuviera 7 añitos xP.

- Y en tercer lugar quiero aclarar que no busco que me hagan la BD, solo busco que me expliquen como deberia ser su estructura claro siendo esta de una manera eficiente.

- Bueno esto es lo que debo hacer espero explicarme bien, generar un registro de estudiantes para una escuela aparte de eso también debo generar un registro para los representantes, sin embargo me han pedio un sistema de parentesco el cual, seria algo asi cuando yo busque a alguien puede ser por cedula (que pienso yo que es lo más ideal) supongamos que a un representante este me traiga toda su información y anexo el sistema debe traerme unicamente la información de su hijo/a o hijos/as inscrito y mostrarme todo en una misma pag, pero en si ese no es el problema que tengo porque yo en mi ignorancia xP haría una tabla en la BD llamada representante y otra estudiante y en esta crearía una clave foránea la cual va a contener la CI del representante.

Por ejemplo Hago el registro del representante.
Nombre       Apellido         ClaveP
Sebastian     Cardegan     20.000.000

Hago el registro del estudiante y supongamos que este es hijo de Sebastian.
Nombre       Apellido         ClaveP          ClaveFora
Junior         Cardegan      30.214.456     20.000.000 -> Obviamente como es hijo de Sebastian lleva su CI

- Entonces a la hora de hacer la búsqueda en la aplicación que lo hago por CI es fácil traer y mostrar en una pag todos los campos que contengan la misma CI simplemente haciendo comparaciones en las tablas de la BD.

- Ok por ese lado creo yo quw estoy bien pero el problem se presenta aquí dado que también la escuela debe ser capaz de realizar búsqueda de un alumno y debe cumplir con la misma función si lo busco y lo encuentro entonces tráeme todo su información y la del padre, en eso estoy clara y se como hacerlo pero y si Estudiante tiene un hermano/a ? Obviamente También debo de mostrarlo pero como lo muestro? dado que yo busco por CI a los Alumnos, supongamos lo siguiente.

Por ejemplo Hago el registro del representante.

Nombre         Apellido          ClaveP          ClaveFora
Sebastian     Cardegan     20.000.000        30.214.456

Hago el registro del estudiante.

Nombre       Apellido       ClaveP          ClaveFora
Junior          Cardegan   30.214.456     20.000.000 -> Obviamente como es Hijo de Sebastian lleva su CI
Meliza         Cardegan   30.215.425     20.000.000 ->  Obviamente como es Hija de Sebastian lleva su CI
Jonathan       Martinez    30.542.685    20.245.254 -> Seria Hijo de Otra Persona.
Issac          Espinoza    31.252.212    25.212.245 -> Hijo de otra persona.

- Cuando busque a Junior por CI 30.214.456 es fácil traer a Sebastian porque aplico el mismo método de la Clave Foránea, pero y Meliza dónde queda? Como la muestro? Y cuando busque a Meliza por su CI como muestro a Sebastian? Obviamente cuando busque a Sebastian puedo mostrar tanto a Junior como a Meliza dado que en su campo de clave foránea tiene la CI de Sebastian, pero el Problema es con estudiantes y no solo eso si son 3 hijos que tiene un representante? Como seria ?  

Por ejemplo Hago el registro del representante.


Nombre         Apellido          ClaveP          ClaveFora
Sebastian     Cardegan     20.000.000        30.214.456

Hago el registro del estudiante.

Nombre       Apellido       ClaveP        ClaveFora
Junior          Cardegan   30.214.456     20.000.000 -> Obviamente como es Hijo de Sebastian lleva su CI
Meliza         Cardegan   30.215.425     20.000.000 ->  Obviamente como es Hija de Sebastian lleva su CI
Abrahan      Cardegan   31.245.952     20.000.000 ->  Obviamente como es Hija de Sebastian lleva su CI
Jonathan       Martinez    30.542.685    20.245.254 -> Seria Hijo de Otra Persona.
Issac          Espinoza    31.252.212    25.212.245 -> Hijo de otra persona.

- Se me complica la cosa porque si busco a uno de los 3 hijos supongamos que a Meliza entonces debo mostrar en los resultados a Junior y Abrahan también, pero como lo hago?.

- Espero puedan aclararme esta duda Gracias por cualquier ayuda que me puedan brindar.


EFEX

Por que definir claves foraneas.. usa las claves primarias.

Código (sql) [Seleccionar]

CREATE TABLE representante(
    ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT, -- Definimos una clave primaria que se auto incremente...
    Nombre VARCHAR(30),
    Apellido VARCHAR(30)
);

CREATE TABLE estudiante(
    ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    IDpadre INT(15),                            -- Relacionamos con la tabla representante...
    Nombre VARCHAR(30),
    Apellido VARCHAR(30)
);


http://sqlfiddle.com/#!2/e0897/1

Cita de: Happiness en  9 Marzo 2014, 22:39 PM
- Se me complica la cosa porque si busco a uno de los 3 hijos supongamos que a Meliza entonces debo mostrar en los resultados a Junior y Abrahan también, pero como lo hago?.

Utilizando JOIN y 'simulando' un FULL JOIN en mysql la otra forma es usar funciones.

Asi es como lo pensaria yo, puede que exista otras fromas.
GITHUB 

Happiness

- EFEX tu tan servicial xP muchas gracias por la ayudadita, buscare sobre los Join y Full Join nunca habia escuchado sobre ellos creo que una vez vi algo relacionado con los Inner Join creo que se escribe asi y cualquier cosa te comento.

- Por otro lado tu primera sugerencia me genero una pequeñita duda, recordando que debo hacer una aplicacion y por ende debo realizar una interfaz en la cual estaran contempladas los formularios de registro, pues no se como que me enrrede o le estoy dando muchas vueltas a esto porque fijate suponiendo que estos son los minimos datos viables para el formulario obviamente lleva mas pero estos son los que me interesan por ahora.

Registro del representante.
Nombre          Apellido         ID -> Este pequeñin es auto incrementable por lo que vi
Sebastian      Cardegan        1
Marta           Zambrano        2
Susana           Sarahy          3

Registro de Estudiantes.
ID    IDPADRE    NOMBRE    APELLIDO
1        1             Junior    Cardegan
2        1             Meliza    Cardegan
3        1           Abrahan    Cardegan
4        3          Jonathan    Martinez
5        3            Issac    Espinoza

- De hay pues a la hora de hacer busquedas... Hmmm como las hago? pues yo tenia pensado hacer un Input en la cual el usuario ingresara la CI de la persona y por hay empezar un Metodo para realizar la busqueda, pero como me lo muestras tu no se pero me confunde :/ , a parte IDPADRE en el registro de estudiantes es un campo que me imagino yo que se debe de exigir en el formulario de registro de los estudiantes en la aplicacion, nose pero lo veo mas complicado porque tengo que mostrar el ID del representante en la interfaz dado que a la hora de registrar al estudiante el que este haciendo el regristo debe tener presente cual es el ID del papa para colocarsela al Hijo.

- Yo veo mas razonable usar CI porque digo yo que subconcientemente una persona se le hace mas facil relacionar una CI que un numero que practicamente para el es Aleatorio.

- No se ese es mi razonamiento :/ o creo que no logro ver tu ejemplo claramente. Tu que piensas?

EFEX

Primero ingresas el Representante despues en otro formulario para agregar Estudiantes podes listar todos los representantes agregados en un <select> o un <input> con nombre y apellido del representante o por su CI como quieres hacerlo.

El ID es solo para relacionar los padres y estudiantes.
GITHUB 

Happiness

- Oye EFEX xP , que buena idea nunca se me habria ocurrido algo como eso jajaja, aunque jamas e listado informacion de una BD en una etiqueta Select tendre que investigar sobre eso. Muchas gracias...