Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Bases de Datos General (http://www.forosdelweb.com/f21/)
-   -   Relación 1:1 (http://www.forosdelweb.com/f21/relacion-1-1-a-303858/)

Mary_ 01/06/2005 09:41

Relación 1:1
 
Hola, tengo una duda sobre las relaciones 1:1.
Si yo tengo una entidad relacionada 1:1 con una agregación de entidades (2 entidades relacionadas mediante relación N:M). Qué claves tendrían las entidades q relaciono? y más concretamente, qué clave ajena tendría la entidad que relaciono con la agregación?

Gracias.

Neuron_376 01/06/2005 12:55

Hola!
 
Creo que no entendi bien, pero quizas sea algo asi:

* tblCategorias
- catID

* tblSubCategorias
- scatID
- catID

Ahi es una relacion del tipo 1:N, aun asi si quieres una clave unica en tblSubCategorias, seria como

tblSubCategorias
ID
scatID
catID

Pero no se si te entendi bien.

Mary_ 01/06/2005 14:05

Hola, gracias pero me refería a relaciones 1:1, no 1:N.
En una relación 1:1 que tengo q poner a cada entidad como clave ajena,
clave principal de la otra tabla?. Y en mi caso es q tengo una entidad relacionada con una agregación (2 entidades relacionadas por N:M) por medio d una relación 1:1. Entonces no sé que clave ajena tengo q poner a la entidad.

Ejemplo:

Alumno(id alumno)
Curso(id curso)

Alumno y Curso tienen una relación N:M q da lugar a AlumnoCurso
AlumnoCurso(idlumno, idcurso)

Si yo tengo una entidad DetalleFactura relacionada con la agregación de las 3 anteriores por medio de una relación 1:1, qué clave ajena le pongo a esta entidad?

Espero haberme explicado un poco mejor.

Saludos

darkasecas 01/06/2005 14:17

que tal si agregas un idAlumCur a AlumnoCurso y usas esa clave?

Mary_ 01/06/2005 14:29

Podría ser pero como se supone que las entidades que nacen de relaciones
N:M tienen que tener como clave primaria la unión de las otras 2...
Sería correcto poner como clave ajena(idalumno, idcurso)?

darkasecas 01/06/2005 14:34

pues yo supongo que si, lo que puse es porque _a mi_ no me gusta mucho trabajar con claves compuestas, prefiero claves de un solo campo, se me hace mas sencillo, y pues a fin de cuentas es lo mismo, si le agregas el idAlumCur haria referencia al (idalumno, idcurso)

Mary_ 01/06/2005 14:56

ok, gracias, ahora lo pongo con más seguridad.

Neuron_376 01/06/2005 15:04

Hola
 
Aun me revolvi un poco, pero creo que la estructura que buscas es esta:

Alumnos
- AlumnoID
- [Toda la info del Alumno]

Cursos
- CursoID
- [Toda la info del curso]

Aqui, para que no tengas muchos problemas y se vea todo mas sencillo, puedes crear una tabla del tipo "Mapa", esto quiere decir que en otra tabla tendras las relaciones entre Alumnos y Cursos sin afectar la estructura de ninguna de tus dos tablas, algo como:

AlumnosCursos
- AlumnoID
- CursoID

A esta tabla le estableces un INDEX CLUSTERED UNIQUE Sobre (AlumnoID, CursoID) para asegurar la integridad.

Entonces tus registros son relamente relacionables, pero a la vez totalmente independientes, esto te ofrece mucha flexibilidad, y para este caso no creo que tengas que usar llaves foraneas especificas, etc para relacionarlos.

Espero haberte ayudado, y para facturas creo que es lo mismo, puedes hacer algo como:

AlumnosCursos
- AlumnoCursoID
- AlumnoID
- CursoID

AlumnosCursosFacturas
- FacturaID
- AlumnoCursoID
- [Info Factura]

Espero haberte ayudado...

Suerte!!

darkasecas 01/06/2005 15:42

hehe es lo mismo que yo le dije solo que mejor explicado, yo no soy muy bueno para explicar u.u

Neuron_376 01/06/2005 15:58

Ok.
 
Pero a ti tampoco te entendi, ni a ella, tal vez si sea eso lo que estaba buscando :-D

Suerte!!

Mary_ 02/06/2005 02:01

jejeje, sí era eso. Va, tan mal no m explicaría cuándo me respondiste lo q quiero :P. Gracias a los 2.

Mary_ 02/06/2005 02:58

Una duda, eso d INDEX CLUSTERED UNIQUE cómo se establece mediante el diseño?. Mediante el código sería algo así como
constraint indicealumnocurso primary key alumnoscursos(idalumno,idcurso)?
Lo d clustered unique no sé cómo se pondría y q significa exáctamente.

Gracias.

Mary_ 02/06/2005 03:27

En diseño ya lo ví, al dar con el botón secundario sobre la tabla -> índices y claves m aparece por defecto tickeado clustered y lo d unique no se puede seleccionar.

Neuron_376 02/06/2005 08:56

Hola
 
Si estas con SQL Server y es directo seria asi:

CREATE UNIQUE CLUSTERED INDEX [NOMBRE_INDEX] ON [dbo].[NOMBRE_TABLA]([idalumno], [idcurso]) ON [PRIMARY]
GO

Y no declares por separado ninguna llave primaria ni nada, solamente esta.

Y bueno, la verdad es que no te había entendido, pero creí que así sería padre manejarlo :-D

Suerte!!

Mary_ 02/06/2005 09:30

ok, gracias.


La zona horaria es GMT -6. Ahora son las 22:07.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.