none
Consulta de Modelar tablas de grupos RRS feed

  • Pregunta

  • Hola.

    En un SS2012.

    Tengo tabla Estudiantes:

    ID_Estudiante INT

    Tabla Grupo:

    Id_Grupo INT

    Pues bien, debo agrupar Estudiantes en Grupos, asi que haria lo siguiente:

    Tabla Agrupaciones

    Id_Agrupacion INT

    Id_Grupo INT

    Id_Estudiante INT

    Mi problema es que existe la necesidad de agrupar también grupos, ejemplo:

    Estudiante 1 pertenece al grupo 1

    Estudiante 2 pertenece al grupo 2

    Grupo 1 y 2 pertenece al grupo 3.

    Como podría modelar aquello.

    Saludos.


    DBA SQL Server Santiago/Chile

    viernes, 17 de agosto de 2018 23:56

Respuestas

  • Hola CMAPM:

    Tabla Estudiantes

    Id int

    Id_grupo int

    Tabla grupos

    Id_Grupo int

    Padre int

    -----

    Cada estudiante tiene exclusivamente un grupo.

    Cada grupo tiene un grupo al cual pertenece. De manera que con padre te montas una estructura jerárquica de padre/hijo

    Un saludo

    sábado, 18 de agosto de 2018 6:07
  • Hola CMAPM:

    Supongo que eso no varía mucho el escenario. Desde mi opinión la manera más fácil de implementar.

    create table estu (id_estudiante int identity (1,1), nombre varchar(10))
    go
    create table grupo (id_grupo int, padre int, nombre varchar(10))
    go
    create table agrupa (id_agrupa int identity(1,1), id_grupo int, id_estudiante int)
    go
    insert into estu (nombre) values ('a'),('b'),('c'),('d'),('e'),('f'),('g'),('h'),('i'),('j')
    go
    insert into grupo (id_grupo, padre, nombre) values (0, null, 'raiz'),
    (1, 0, 'Deportes'),
    (2, 0, 'Prensa'),
    (3, 1, 'Equipo'),
    (4, 1, 'individ.'),
    (5, 3, 'Fútbol'),
    (6, 3, 'Baloncesto'),
    (7, 4, 'Atletismo'),
    (6, 4, 'Natación')
    go
    
    insert into agrupa (id_grupo, id_estudiante)
    values (5,1),(5,2),(7,1),(2,3)
    go
    select * 
    	from estu e inner join agrupa a on e.id_estudiante = a.id_estudiante 
    				inner join grupo g on a.id_grupo = g.id_grupo
    order by e.nombre
    

    La tabla grupo, tiene un padre y utilizas la tabla de agrupaciones. Pero la jerarquía la mantienes con los grupos.

    Un saludo

    • Marcado como respuesta CMAPM martes, 21 de agosto de 2018 12:51
    lunes, 20 de agosto de 2018 14:13

Todas las respuestas

  • Hola CMAPM:

    Tabla Estudiantes

    Id int

    Id_grupo int

    Tabla grupos

    Id_Grupo int

    Padre int

    -----

    Cada estudiante tiene exclusivamente un grupo.

    Cada grupo tiene un grupo al cual pertenece. De manera que con padre te montas una estructura jerárquica de padre/hijo

    Un saludo

    sábado, 18 de agosto de 2018 6:07
  • Hola Javi.

    La tabla Grupo NO contiene los estudiantes, la tabla grupo es una tabla para dar un nombre al grupo, ejemplo:

    Grupo1 Deportes

    Grupo2 Prensa

    Entonces debe exisir la tabla llamada Agrupaciones, pues es ahi donde se le indica que estudiantes componen ciertos grupos, cada estudiantes puede tener N grupos y no es exclusivo de 1 solo grupo.

    Saludos Cordiales.


    DBA SQL Server Santiago/Chile

    lunes, 20 de agosto de 2018 13:52
  • Hola CMAPM:

    Supongo que eso no varía mucho el escenario. Desde mi opinión la manera más fácil de implementar.

    create table estu (id_estudiante int identity (1,1), nombre varchar(10))
    go
    create table grupo (id_grupo int, padre int, nombre varchar(10))
    go
    create table agrupa (id_agrupa int identity(1,1), id_grupo int, id_estudiante int)
    go
    insert into estu (nombre) values ('a'),('b'),('c'),('d'),('e'),('f'),('g'),('h'),('i'),('j')
    go
    insert into grupo (id_grupo, padre, nombre) values (0, null, 'raiz'),
    (1, 0, 'Deportes'),
    (2, 0, 'Prensa'),
    (3, 1, 'Equipo'),
    (4, 1, 'individ.'),
    (5, 3, 'Fútbol'),
    (6, 3, 'Baloncesto'),
    (7, 4, 'Atletismo'),
    (6, 4, 'Natación')
    go
    
    insert into agrupa (id_grupo, id_estudiante)
    values (5,1),(5,2),(7,1),(2,3)
    go
    select * 
    	from estu e inner join agrupa a on e.id_estudiante = a.id_estudiante 
    				inner join grupo g on a.id_grupo = g.id_grupo
    order by e.nombre
    

    La tabla grupo, tiene un padre y utilizas la tabla de agrupaciones. Pero la jerarquía la mantienes con los grupos.

    Un saludo

    • Marcado como respuesta CMAPM martes, 21 de agosto de 2018 12:51
    lunes, 20 de agosto de 2018 14:13