Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Duda, ayuda, diseño de base de datos mysql, clave primaria y foraneas

Estas en el tema de Duda, ayuda, diseño de base de datos mysql, clave primaria y foraneas en el foro de Bases de Datos General en Foros del Web. hola, espero me puedan ayudar con las siguientes dudas que planteare, basicamente con lo que son claves primarias... hasta ahora he trabajado con tablas sencillas ...
  #1 (permalink)  
Antiguo 02/02/2010, 19:28
Avatar de franblack  
Fecha de Ingreso: noviembre-2008
Ubicación: Caracas
Mensajes: 25
Antigüedad: 16 años
Puntos: 0
Exclamación Duda, ayuda, diseño de base de datos mysql, clave primaria y foraneas

hola, espero me puedan ayudar con las siguientes dudas que planteare, basicamente con lo que son claves primarias...
hasta ahora he trabajado con tablas sencillas en mysql y quiero ir un poco mas alla con varias tablas usando las claves primarias y claves foraneas que despues de tanto leer en internet, no veo claramente porque "siempre" usar un "id_campo" para todos los ejemplos que he visto.


partiendo de que mi base de datos es para almacenar información personal segun el numero de cedula o identificación de la persona, las tablas de esta base de datos quedarian asi.

tabla cedula ( idcedula, cedula, nombre, pais(FK) )
tabla direccion de casa ( idcasa, cedula(fK), telefonos, direccion, estado(FK), departamento o municipio (FK) )
tabla direccion de trabajo ( idtrabajo, cedula(FK), telefonos, dirección, estado (FK), departamento o municipio (FK) )


tabla pais ( idpais, pais )
tabla estado ( idestado, estado )
tabla municipio o departamento ( Idmunicipio, municipio )


mi dudas son la siguientes,

partiendo de que se como introducir la información desde un formulario html usando php a una base de datos mysql,

1era, necesitaria del campo "idcedula" en mi tabla cedula?

2do, mi clave primaria tendria que ser "cedula" en la tabla cedula para poder trabajarla como "Foreign key" en las otras 2 tablas ?

3ero, necesitaria de una clave primaria en mis otras 2 tablas ? direccion de casa y de trabajo ?


muchas gracias por su tiempo en leer esta pregunta que para ustedes quizas sean basicas.

muchas gracias, esperando me puedan ayudar, pues de ello depende poder terminar mi proyecto.
  #2 (permalink)  
Antiguo 02/02/2010, 19:57
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Duda, ayuda, diseño de base de datos mysql, clave primaria y foraneas

Cita:
1era, necesitaria del campo "idcedula" en mi tabla cedula?
No. Si el número de ese documento denominado "cédula" es único e irrepetible, no requieres ningún otro. Ese de por sí mismo sería PK.
Distinto sería si la tabla (que en todo caso debería llamarse "Persona" porque la entidad que se identifica es una persona) si esa persona pudiera tener más de un documento, entonces ni el ID sería una cédula ni podría servir como PK.
Pero en tu modelo es suficiente con ese número.

Cita:
2do, mi clave primaria tendria que ser "cedula" en la tabla cedula para poder trabajarla como "Foreign key" en las otras 2 tablas ?
Una FK es siempre PK en su tabla origen. No existe otra opción. Así es el modelo E-R.
Como tip agregado: Por una cuestion mnemotécnica, es conveniente que el campo que contiene el mismo dato en diferentes tablas, se llame de la misma forma en todas ellas. Por esa razón no es práctico que campo que se llame solamente "ID", sino agregarle algo que nos recuerde mejor de dónde proviene (persona_id, automovil_id, casa_id, etc).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: clave, diseño, mysql, primaria, foreignkey
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:28.