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

Creación de base de datos

Estas en el tema de Creación de base de datos en el foro de Mysql en Foros del Web. Buenas tardes, me gustaría saber si alguien puede ayudarme con una práctica de diseño de bases de datos. La práctica consiste en crear una base ...
  #1 (permalink)  
Antiguo 08/05/2014, 06:27
 
Fecha de Ingreso: mayo-2014
Mensajes: 4
Antigüedad: 10 años, 6 meses
Puntos: 0
Exclamación Creación de base de datos

Buenas tardes, me gustaría saber si alguien puede ayudarme con una práctica de diseño de bases de datos. La práctica consiste en crear una base de datos (tablas), incluir un atributo derivado y utilizar disparadores. El problema en un principio es la creación de las tablas. Podrías ayudarme por favor?

El enunciado es el siguiente:
Se desea gestionar la información correspondiente a la Vuelta ciclista España a lo largo de las distintas ediciones. Para ello es necesario almacenar información sobre los ciclistas y equipos partiipantes en cada edición, así como los tiempos empleados por los ciclistas en cada una de las etapas.

Un ciclista profesional se identifica a traves del numero de ficha y de el se conoce también su nombre, su fecha de nacimiento, su nacionalidad y el año en el que pasó al campo profesional. Para cada equipo se almacena su nombre, que será único, así como su nacionalidad. En cada edición de la vuelta, los equipos inscribirán a los ciclistas. Un ciclista puede haber pertenecido a distintos equipos pero solo a uno en cada edición.

Una etapa, que puede ser en línea o contrarreloj, se celebra un dia determinado con un origen, un destino y una longitud que se mide en km. Las etapas se identifican mediante un numero que indica su orden dentro de la prueba-

Un ciclista emplea un determinado tiempo en completar los km de una determinada etapa. Esta información información resulta fundamental para realizar la clasificación individual y por equipos. También se debe controlar los ciclistas que han abandonado una etapa y por tanto abandonan la vuelta.

Hay diferentes eventos que pueden aparecer en una etapa como son las metas volantes, los puertos de montaña y la llegada. DE los eventos se desea conocer el tipo, el lugar y el punto kilometrico dentro de la etapa en donde se situan. Hay que considerar que en un punto km de una etapa solo puede aparecer un evento. Para cada evento la organización ha establecido cuantos puntos sumarán los corredores que superen dicho evento en uno de los tres primeros puestos. Por tanto, para completar estas clasificaciones, se de conocer los ciclistas que han ocupado los tres primeros lugares en cada uno de los eventos de una etapa.

Escribir un script SQL que permita, como mínimo:
- crear las tablas implicadas teniendo en cuenta las restricciones de integridad adecuadas.
-el diseño deberá incluir al menos un atributo derivado, por ejemplo número de ediciones de la vuelta ciclista en las que ha participado cada corredor, número de equipos participantes en cada edición...
-cargar un pequeño juego de datos de prueba inicial en dichas tablas.
-crear los disparadores necesarios para mantener actualizado el atributo derivado, de modo que se actualice automaticamente.
-suponiendo que los corredores están identificados como usuarios de la base de datos con un código coincidente con su login de usuario, crear una vista con los permisos adecuados para que cada corredor pueda consultar el número de etapas en las que ha participado en cada edición y el tiempo total empleado por edición.


Las tablas que tengo realizadas son las siguientes:
Código:
CREATE table CICLISTA(
	NUMFICHA integer not null primary key check (NUMFICHA >0),
	NOMBRE varchar (20) not null, 
	APE1 varchar (20) not null,
	APE2 varchar (20) not null,
	NACIONALIDAD varchar (10) not null,
	DEBUT date default sysdate not null,
	EQUIPO varchar (20) not null references EQUIPO (NOMBRE));

CREATE table EQUIPO (
	NOMBRE varchar (20) not null primary key,
	NACIONALIDAD varchar (10) not null);

CREATE table ETAPA (
	TIPO varchar (10) not null check (TIPO ='LINEA' OR TIPO ='CONTRARRELOJ',
	DIA date default sysdate not null,
	ORIGEN varchar (10) not null primary key, 
	DESTINO varchar (10) not null primary key,
	LONGITUD integer not null check (LONGITUD >0),
	NUMORDEN Integer not null primary key check (NUMORDEN >0),
        PRIMERO integer not null references CICLISTA (NUMFICHA),
	SEGUNDO integer not null references CICLISTA (NUMFICHA),
        TERCERO integer not null references CICLISTA (NUMFICHA));	
	
        

CREATE table EVENTO (
	TIPOE varchar (10) not null check (TIPOE = 'META' OR TIPOE = 'LLEGADA' OR TIPOE= 'PUERTO'),
	LUGAR varchar (10) not null primary key,
	PTOKM integer not null primary key (PTOKM >=0),
	NUMORDENE integer not null references ETAPA (NUMORDEN),
	PRIMERO integer not null references CICLISTA (NUMFICHA),
	SEGUNDO integer not null references CICLISTA (NUMFICHA),
        TERCERO integer not null references CICLISTA (NUMFICHA));
¿Habría que crear más tablas? ¿Cómo podemos saber el numero de ediciones y en cuáles ha participado cada ciclista?

Por favor necesito ayuda urgente!!
Gracias de antemano
  #2 (permalink)  
Antiguo 08/05/2014, 06:47
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Creación de base de datos

Lo siento pero no se hacen tareas ni escolares ni universitarias. Si lo intentas tu solo y haces preguntas concretas se te ayudará si no no!!!

(el foro es de MySql y este no soporta "check")
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 08/05/2014, 07:51
 
Fecha de Ingreso: mayo-2014
Mensajes: 4
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Creación de base de datos

Gracias por responder. En realidad no quiero que me hagais la práctica, sino no me hubiese molestado en empezarla. Lo que me gustaría saber es si se necesitarían más tablas. El problema que tengo es que no se si hacer una tabla para las ediciones de la vuelta ciclista y relacionarla con el resto de las tablas. De esta manera podría saber cuantas vueltas ciclistas ha hecho cada ciclista. Esa es la principal duda.
  #4 (permalink)  
Antiguo 08/05/2014, 07:57
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: Creación de base de datos

El tema de las tablas dependerá del modelado del sistema, sus entidades y relaciones. Emepzar poniendo las tablas es un error, sólo puedes modelar físicamente una base sin realizar un DER, cuando ya tienes bastante experiencia.

¿Has hecho algún DER del sistema descripto en la consigna?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 08/05/2014, 08:01
 
Fecha de Ingreso: mayo-2014
Mensajes: 4
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Creación de base de datos

Sí, ya tengo hecho un diagrama
  #6 (permalink)  
Antiguo 08/05/2014, 08:42
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: Creación de base de datos

Subelo a algún repositorio publico y lo vemos. El 90% de los defectos de la base se pueden ver en el modelo lógico de Entidades.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 12/05/2014, 02:23
 
Fecha de Ingreso: mayo-2014
Mensajes: 4
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Creación de base de datos

Este es el diagrama que tengo:

https://mega.co.nz/#!xRsCUCZD!gV-WVp9NtPIBMhHCjEu03pKc4duLPCoG3E21SOCQDjY

Muchas gracias

Etiquetas: creación, disparadores, sql, tablas, vistas
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 10:06.