Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: Shon en 10 Diciembre 2010, 16:00 pm



Título: Duda sobre claves primarias
Publicado por: Shon en 10 Diciembre 2010, 16:00 pm
Hola!!!

Avisar que mis conocmientos de sql y mysql son mínimos.

les cuento que quiero hacer,

Quiero una tabla clientes con información básica, pe:

-----------
clientes
------------
idclientes
nombre
apellidos
...
------------

Quiero hacer otra tabla de informacion detallada de otros temas que pertenezcan a estos usuarios, pe deportes que practica:

deportes
-------------
iddeportes
idclientes
tipo
lugar
....

Y más tablas así: trabajo, ocio, etc...

Mi duda es, en la tabla deportes, para relacionar esta con el cliente en concreto, debo poner iddeportes como primaria y idclientes como foránea, o directamente se pone idclientes como primaria y foranea al mismo tiempo?

Un saludo y gracias  ;)


Título: Re: Duda sobre claves primarias
Publicado por: cassiani en 10 Diciembre 2010, 16:17 pm
Te lo explicare con un sencillo ejemplo.
Cuando vas a crear las relaciones en tu base de datos primero debes tener claro como harás las relaciones, debes crear las tablas padre antes que las hijas.

 Una tabla padre se puede relacionar de uno a muchos por ejemplo:

pk = primary key - clave primaria
fk = foreign key - clave foránea

Citar
Tabla País
IdPais pk
Nombre_Pais

esa sería nuestra tabla padre, sabemos que un país tiene muchos estados, entonces la relación es de 1 a muchos.

creamos la tabla hija.

Citar
tabla Estados
idEstado pk
NombreEstado
IdPais fk

la tabla hija en este caso es quien debe llevar la clave foránea, es decir, el cambo que relaciona con la pk de la tabla padre.

Citar
Tabla País                                   Tabla Estados
IdPais pk --------------------------     Id Estado
Nombre_Pais                           |      NombreEstado
                                                 |->  IdPais fk
                                   
Hay otro tipo de relaciones como las de 1 a 1, pero ese es otro tema.
Código:
http://sistemas.itlp.edu.mx/tutoriales/basedat1/index.htm


Título: Re: Duda sobre claves primarias
Publicado por: JuanRaGD en 10 Diciembre 2010, 16:19 pm
Buenas.

En la tabla deportes tendrias que poner idDeporte como PK(primary key) y idCliente como FK(foreign key), tienes que ver bien como se relacionan las tablas porque puede haber otra tabla que las relacione.
 
Ej de tablas:
<Cliente>1---<Realizan>-----N<Deportes> en este caso tenes 1 cliente realiza muchos deportes te queda la id de cliente en la tabla deportes sin la tabla realizan.

<Cliente>N---<Realizan>-----N<Deportes> en este caso tenes muchos clientes pueden realizar muchas deportes XD y la diferencia esta en que las PK idCliente y idDeportes van en la tabla Realizan.
Te queda:
Cliente(IdCliente,Nombre,Apellido,bla bla)
Deportes(IdDeportes,Tipo,Lugar,bla bla)
Realizan(IdCliente,IdDeportes)

Tienes que ver cual es tu caso, cualquier cosa si estoy mal en algo que alguien me corrija, de esa forma aprendemos  :P

Saludos.


Título: Re: Duda sobre claves primarias
Publicado por: Shon en 10 Diciembre 2010, 16:44 pm
A ver, por lo que he leido en ese tutorial y lo que me comentáis, lo que yo quiero debe ser una relación uno a uno o eso creo jeje

Un cliente tendrá una información laboral.
Y una información laboral corresponderá a un sólo cliente.

Este razonamiento estaría bien, verdad?

Si está bien, entonces:

la tabla clientes tiene su idclientes que es su pk.

La tabla informacionlaboral que pk tendría?
Yo creo que tendría que ser directamente la pk idclientes de la tabla clientes:

create table clientes (
idclientes int not null auto_increment,
nombre varchar(50),
etc,
primary key(idclientes)
);

create table informacionlaboral (
idclientes int not null,
empresa varchar(50),
...
Aquí le meto fk a idclientes que relacione a idclientes a tabla clientes, o tengo que declarar una pk por narices. O se puede declarar fk y pk a idclientes a la vez?


Gracias!!!