![]() |
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. |
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. |
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 |
que tal si agregas un idAlumCur a AlumnoCurso y usas esa clave? |
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)? |
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) |
ok, gracias, ahora lo pongo con más seguridad. |
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!! |
hehe es lo mismo que yo le dije solo que mejor explicado, yo no soy muy bueno para explicar u.u |
Ok. Pero a ti tampoco te entendi, ni a ella, tal vez si sea eso lo que estaba buscando :-D Suerte!! |
jejeje, sí era eso. Va, tan mal no m explicaría cuándo me respondiste lo q quiero :P. Gracias a los 2. |
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. |
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. |
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!! |
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.