none
llaves primarias RRS feed

  • Pregunta

  • buenas noches mi profesor de base de datos me deja el siguiente caso:

    - Cree las tablas con las siguientes estructuras:

     

    Tabla de socios

    Documento, nombre, domicilio crear la llave primaria

    Tabla Deportes

    Código, nombre, profesor, crear la llave primaria

    Tabla de inscripciones

    documento, codigodeporte, año, matricula, 'p'=paga, 'd'=deudor, crear las siguientes llaves primarias (documento,codigodeporte,año)

    al poner dos llaves primarias que es lo permitido y una llave foranea necesito insertar algunos datos a la tabla inscripcion que estan repetidos pero me sale error porque las llaves primarias no se les puede duplicar los datos que puedo hacer con eso y con estas consultas: 

    Muestre el nombre del socio, el nombre del deporte en que se inscribió y el año empleando diferentes tipos de join.

    10- Muestre todos los datos de las inscripciones (excepto los códigos) incluyendo aquellas inscripciones cuyo código de deporte no existe en "deportes" y cuyo documento de socio no se encuentra en "socios".

    11- Muestre todas las inscripciones del socio con documento que haya registrado varios deportes en varios años.

    por favor ayudenme 

    martes, 24 de septiembre de 2019 0:11

Todas las respuestas

  • Hola mickey1909:

    al poner dos llaves primarias que es lo permitido y una llave foranea necesito insertar algunos datos a la tabla inscripcion que estan repetidos pero me sale error porque las llaves primarias no se les puede duplicar los datos que puedo hacer con eso y con estas consultas:

    Eso no es correcto. Sólo puede haber una llave primaria, pero si puede estar compuesta por varios campos.

    Create Table inscripciones(
      documento varchar(20) constraint fkDocs foreign key
         references documentos (documento), codigodeporte bigint
    , año int
    , ....
    , primary key (documento, codigodeporte, año)
    );

    Y no se puede insertar registros duplicados nunca.

    Muestre el nombre del socio, el nombre del deporte en que se inscribió y el año empleando diferentes tipos de join.

    Te esta solicitando que uses por ejemplo INNER JOIN/LEFT JOIN/RIGHT JOIN

    Diferentes tipos de joins

    https://javifer2.wordpress.com/2019/09/16/combinaciones-entre-tablas-inner-left-right-full/

    Puedes hacer socios inner join deportes inner join inscripciones. O socios left join deportes left join inscripciones O ....

    10- Muestre todos los datos de las inscripciones (excepto los códigos) incluyendo aquellas inscripciones cuyo código de deporte no existe en "deportes" y cuyo documento de socio no se encuentra en "socios".

    Si para lo anterior has utilizado la segunda opción ya lo tienes resuelto.

    11- Muestre todas las inscripciones del socio con documento que haya registrado varios deportes en varios años.

    Esto lo puedes resolver de muchas maneras.

    Select inscripciones.documento, s.nombre, 
    count(distinct codigoDeporte) as deportes, 
    count(distinct año) as anuales 
    from inscripciones inner join socios s
    on inscripciones.documento = s.documento
    group by inscripciones.documento, s.nombre

    Luego tendrás que utilizar having para restringir los que no encajen en lo solicitado.

    Group by 

    https://javifer2.blogspot.com/search/label/group%20by

    Having

    https://carmoreno.com.co/sql/2017/02/09/Diferencia-entre-having-y-where/

    Aunque el ejemplo del having es para oracle, solo hay que cambiar en la definicion de la tabla por esta

    CREATE TABLE peliculas(
    	codigo int NOT NULL,
    	nombre VARCHAR(40) NOT NULL,
    	director VARCHAR(30) DEFAULT 'Desconocido',
    	fecha_lanzamiento DATE,
    	genero VARCHAR(20),
    	recaudo float,
    	PRIMARY KEY(codigo)
    );



    martes, 24 de septiembre de 2019 4:10