SQL - Diseño de Base

 
Vista:
sin imagen de perfil

Diseño de Base

Publicado por Hernan (3 intervenciones) el 11/05/2010 21:42:36
Hola, quería consultarles lo siguiente.
Estoy haciendo la típica base para administración de colegios: Alumnos, Docentes, Cursos, Padres, etc, etc.

Ahora lo siguiente Alumnos, Docentes y Padres tienen teléfonos. 1 o muchos.

Por ende, yo crearia una tabla:

Teléfono
IdAlumno
Numero
TipoTelefono

y tendria una FK a la tabla Alumnos. ¿Debo hacer lo mismo para las otras tablas? es decir, si solo voy a almacenar Telefonos, por que tener una tabla de telefonos para cada uno.
Si lo hago todo junto, se me complica con las FK porque los Alumnos, docentes y Padres sus IDs son Identity (empezando en 1).

Se me ocurrieron 10 mil formas de NO hacerlo (como asignarles Id mayor a 1 millon a Alumnos, a 10 millones a Docentes y a 100millones a Padres), pero quisiera saber como resolver esto.

Gracias!
Hernan.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

RE:Diseño de Base

Publicado por Leonardo Josue (1173 intervenciones) el 12/05/2010 17:04:19
Buenos días Hernan:

Existen muchas formas para poder modelar lo que necesitas, todo depende de qué tanto quieras trabajar.

La opción más facil que tendrías sería manejar un campo Teléfono para cada una de las tablas (Alumnos, Docentes, Padres), dejándolo como varchar y donde el usuario pudiera capturar más de un teléfono. Podrías también manejar un campo Móvil para almacenar también números de teléfono celular o movil.

Ahora bien, esto sería válido si se trata de un proyecto escolar, pero si se trata de un proyecto más formal entonces deberías hacer cambios más significativos. En primer lugar me imagino que además del teléfono existen otros campos que se pueden presentar en las tres tablas (Alumnos, Docentes, Padres), tales como Nombre, Apellido, Dirección, Correo Electrónico, etc. Yo hubiera optado por generar una sola tabla llamada Personas con un atributo TipoPersona, y manejar un catálogo TiposPersonas más o menos así

IdTipoPersona|Descripcion
1|Alumno
2|Docente
3|Padre

De esta manera entonces la tabla Personas tendría una estructura más o menos así:

idPersona|Nombre|idTipoPersona
1|Hugo Donald|1
2|Paco Donald|3
3|Mickey Mouse|2

ahora si, con esta tabla puedes hacer una tabla de Teléfonos de la siguiente manera:

idTeléfono|idPersona|Teléfono|TipoTeléfono
1|1|999-9999|movil
2|2|123-4567|casa
3|2|111-1111|movil
4|2|222-2222|trabajo

Tal vez esta tampoco sea la mejor solución, y como puedes ver las opciones son muchas y muy variadas, así es que tú tienes la última palabra.

Saludos.
Leo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Diseño de Base

Publicado por Hernan (3 intervenciones) el 12/05/2010 17:14:10
Gracias por tus comentarios. Habia pensado en eso, pero encuentro las siguientes contras, si tengo otros campos como Sueldo para docentes que evidentemente no corresponde en Alumno tendria que generar otra tabla con IdPersona y me quedaria

Persona ---------- Alumno
----------- Docente

Pero quiero evitar las tablas con relaciones 1 a 1, porque sabemos que para hacer Alta de Docentes debo primero insertar en Persona y luego en Docente, si falla algun iinsert debo hacer un rollback y ya es demasiado complejo (pensa que tengo que hacer Insert, Delete, Update y un join para selects).

Es decir si se produce un error en alguna tabla tengo que manejar transacciones.
No me convence, ademas, pretendo usar LINQ y no se como maneja la herencia en tablas.

Con este tema pretendo generar un debate productivo y poder escuchar todas las opiniones. Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Diseño de Base

Publicado por Luis (1 intervención) el 19/05/2010 17:07:52
Hola Hernan, como estas? gusto en saludarte, tengo varias consultas y quiero que por favor me orientes segun tus conocimientos.
-Sé muchas sentencias SQL, entiendo como estas pueden modificar datos, crear tablas para almacenar informacion, alterarlas etc, pero aún no he puesto en práctica estos conocimientos y creo poder hacerlo, qué debo instalar en mi pc? ¿Qué motor de base de datos debo instalar para poder desarrollar ejercicios y asi poner en práctica mis conocimientos en SQL? Realmente me interesa aparender, he estado viendo en mysql.com y he descargado el mysql-connector-odbc, por favor si me pudieras orientar a como y que debo instalar para comenzar a trabajar en mis ejercicios de SQL. De antemano muchas gracias. ATTE. Luis
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Diseño de Base

Publicado por jorge (1 intervención) el 26/05/2010 08:32:02
quiero aprender a programar,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar