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

Duda sobre armado de tabla

Estas en el tema de Duda sobre armado de tabla en el foro de Bases de Datos General en Foros del Web. Hola amigos de foros del web! quisiera armar una tabla para que guarde los amigos de cada usuario. la tabla que tengo armada es "solicitudamistades" ...
  #1 (permalink)  
Antiguo 31/12/2011, 00:54
 
Fecha de Ingreso: diciembre-2011
Ubicación: Montevideo
Mensajes: 6
Antigüedad: 13 años
Puntos: 1
Duda sobre armado de tabla

Hola amigos de foros del web!
quisiera armar una tabla para que guarde los amigos de cada usuario.

la tabla que tengo armada es "solicitudamistades" que me guarda quien envía la solicitud, quien la recibe, la fecha y si la aceptó, rechazó o esta pendiente...

Ahora, luego de que la aceptan, necesitaría hacer una tabla para guardar las amistades entre cada uno?, la cuestion es que no entiendo muy bien como tendría que estar ordenado eso

Había pensado hacer una nueva tabla llamada "amigos" y poner usuario y amigos, y guardar todos los amigos dentro de amigos pero separados por coma.. pero como me parece una chanchada y esta duda de ordenamiento de varios datos para un usuario la he tenido hace tiempo, aprovecho para preguntarla ahora.

Espero haberme explicado bien y agradezco la ayuda! :)
  #2 (permalink)  
Antiguo 31/12/2011, 15:49
 
Fecha de Ingreso: noviembre-2002
Ubicación: DF
Mensajes: 1.056
Antigüedad: 22 años
Puntos: 37
Respuesta: Duda sobre armado de tabla

De manera muy general:
TABLA: USUARIOS
idUsuario (PK) (autonumerico)
Nombre
... resto de los datos

TABLA: USUARIOS_AMIGOS
nombre:
idRelacion(PK) (autonumerico)
idUsuario (FK)
idAmigo (FK)


Asi, en la misma tabla USUARIOS tienes a todas las personas, y cada vez que exista una nueva relacion entre 2 usuarios, grabas un registro en USUARIOS_AMIGOS, UNICAMENTE Los campos de llave, el IdUsuario como el receptor y el idAmigo que es igual al idUsuario del usuario que solicito.

El campo idUsuario es Llave primaria en tabla de usuarios, y es 2 veces llave foranea en tabla de usuarios_amigos.
  #3 (permalink)  
Antiguo 31/12/2011, 17:00
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 sobre armado de tabla

En una tabla relacional como esta:
Cita:
TABLA: USUARIOS_AMIGOS
idUsuario (FK)
idAmigo (FK)
es absolutamente innecesario poner un id autinicremental, porque la clave primaria está formada por las dos PF al mismo tiempo, es decir, la PK es (idUsuario, idAmigo).

Por favor, leer un poco más de los fundamentos del modelo entidad-relación.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 03/01/2012, 00:16
 
Fecha de Ingreso: noviembre-2002
Ubicación: DF
Mensajes: 1.056
Antigüedad: 22 años
Puntos: 37
Respuesta: Duda sobre armado de tabla

Bueno, gnxsoloyo ya me puso tarea, lo de "absolutamente innecesario" no es tan cierto, ya que "porque la clave primaria está formada por las dos PF al mismo tiempo, es decir, la PK es (idUsuario, idAmigo)" no es cierto, en ese caso hablamos de claves foraneas, que no sustituyen a lo que se llama "clave primaria"

Tomado de: http://es.wikipedia.org/wiki/Normali...bases_de_datos

"En una tabla puede que tengamos más de una columna que puede ser clave primaria por sí misma. En ese caso se puede escoger una para ser la clave primaria y las demás claves serán claves candidatas.

Una clave ajena (foreign key o clave foránea) es aquella columna que existiendo como dependiente en una tabla, es a su vez clave primaria en otra tabla."

Esto da para mas, pero bueno, mi estimado ned_style, si quieres leer algo de normalizacion de bases de datos, pues adelante, cualquiera de las 2 opciones funcionara adecuadamente para lo que requieres.

Saludos
  #5 (permalink)  
Antiguo 03/01/2012, 03:43
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 sobre armado de tabla

Cita:
Bueno, gnxsoloyo ya me puso tarea, lo de "absolutamente innecesario" no es tan cierto, ya que "porque la clave primaria está formada por las dos PF al mismo tiempo, es decir, la PK es (idUsuario, idAmigo)" no es cierto, en ese caso hablamos de claves foraneas, que no sustituyen a lo que se llama "clave primaria"
Las dos FK en este caso, y pedona que te lo discuta, no "sustituyen" una clave primaria, sino que son la clave primaria. Son la clave primaria de una relación N:N, y sólo deben llevar un atributo adicional (y no un autoincremental en ese caso), si y sólo si existe en esa relación más de un caso en el que el par de FK puedan repetirse. En ese caso el atributo se denomina "discriminante".

Una relación N:N (que sólo se ve en el DER lógico), se transforma en el modelo físico en una tabla donde la PK está formada por las PK de las tablas que se relacionan. Así dicen las reglas de transformación. Esto es lo que se enseña en Bases de Datos I en cualquier facultad.

Finalmente: Por definición, una clave primaria (PK) es un campo o conjunto de campos que identifican unívocamente un registro dado en una tabla (o una tupla en una relación), pero no existe ninguna regla que especifique que la FK de una tabla no pueda ser al mismo tiempo la PK de esa tabla, caso que sería el de las entidades débiles dentro del DER lógico.

Si bien, ambos ejemplos podrían funcionar igual, lo que yo te propongo evitará por restricciones de definición de tablas, que existan inconsistencias, mientras que agregar un autoincremental puede generar duplicidades de par de FK. En otras palabras, lo que propones pone en riesgo la integridad referencial y la consistencia de datos buscada.
__________________
¿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: armado, tabla
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 22:16.