001_platform_table_setup.schema.sql 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. CREATE TABLE roles (
  2. id_rol SERIAL PRIMARY KEY,
  3. nombre VARCHAR(50) UNIQUE NOT NULL
  4. );
  5. CREATE TABLE usuarios (
  6. id_usuario SERIAL PRIMARY KEY,
  7. nombre VARCHAR(100) NOT NULL,
  8. apellidos VARCHAR(150),
  9. email VARCHAR(150) UNIQUE NOT NULL,
  10. fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  11. activo BOOLEAN DEFAULT TRUE,
  12. id_rol INT NOT NULL,
  13. CONSTRAINT fk_usuario_rol
  14. FOREIGN KEY(id_rol)
  15. REFERENCES roles(id_rol)
  16. );
  17. CREATE TABLE credenciales (
  18. id_credencial SERIAL PRIMARY KEY,
  19. id_usuario INT UNIQUE NOT NULL,
  20. password_hash TEXT NOT NULL,
  21. ultimo_login TIMESTAMP,
  22. CONSTRAINT fk_credencial_usuario
  23. FOREIGN KEY(id_usuario)
  24. REFERENCES usuarios(id_usuario)
  25. ON DELETE CASCADE
  26. );
  27. CREATE TABLE profesores (
  28. id_profesor SERIAL PRIMARY KEY,
  29. id_usuario INT UNIQUE NOT NULL,
  30. especialidad VARCHAR(100),
  31. CONSTRAINT fk_profesor_usuario
  32. FOREIGN KEY(id_usuario)
  33. REFERENCES usuarios(id_usuario)
  34. ON DELETE CASCADE
  35. );
  36. CREATE TABLE alumnos (
  37. id_alumno SERIAL PRIMARY KEY,
  38. id_usuario INT UNIQUE NOT NULL,
  39. nivel VARCHAR(50),
  40. CONSTRAINT fk_alumno_usuario
  41. FOREIGN KEY(id_usuario)
  42. REFERENCES usuarios(id_usuario)
  43. ON DELETE CASCADE
  44. );
  45. CREATE TABLE cursos (
  46. id_curso SERIAL PRIMARY KEY,
  47. nombre VARCHAR(150) NOT NULL,
  48. descripcion TEXT,
  49. fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  50. id_profesor INT NOT NULL,
  51. CONSTRAINT fk_curso_profesor
  52. FOREIGN KEY(id_profesor)
  53. REFERENCES profesores(id_profesor)
  54. );
  55. CREATE TABLE matriculas (
  56. id_matricula SERIAL PRIMARY KEY,
  57. id_alumno INT NOT NULL,
  58. id_curso INT NOT NULL,
  59. fecha_matricula TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  60. CONSTRAINT fk_matricula_alumno
  61. FOREIGN KEY(id_alumno)
  62. REFERENCES alumnos(id_alumno)
  63. ON DELETE CASCADE,
  64. CONSTRAINT fk_matricula_curso
  65. FOREIGN KEY(id_curso)
  66. REFERENCES cursos(id_curso)
  67. ON DELETE CASCADE,
  68. CONSTRAINT unique_matricula
  69. UNIQUE(id_alumno, id_curso)
  70. );
  71. CREATE TABLE actividades (
  72. id_actividad SERIAL PRIMARY KEY,
  73. titulo VARCHAR(200) NOT NULL,
  74. descripcion TEXT,
  75. fecha_publicacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  76. fecha_entrega TIMESTAMP,
  77. puntuacion_maxima NUMERIC(5,2),
  78. id_curso INT NOT NULL,
  79. CONSTRAINT fk_actividad_curso
  80. FOREIGN KEY(id_curso)
  81. REFERENCES cursos(id_curso)
  82. ON DELETE CASCADE
  83. );
  84. CREATE TABLE entregas (
  85. id_entrega SERIAL PRIMARY KEY,
  86. id_actividad INT NOT NULL,
  87. id_alumno INT NOT NULL,
  88. fecha_entrega TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  89. contenido TEXT,
  90. estado VARCHAR(50) DEFAULT 'pendiente',
  91. CONSTRAINT fk_entrega_actividad
  92. FOREIGN KEY(id_actividad)
  93. REFERENCES actividades(id_actividad)
  94. ON DELETE CASCADE,
  95. CONSTRAINT fk_entrega_alumno
  96. FOREIGN KEY(id_alumno)
  97. REFERENCES alumnos(id_alumno)
  98. ON DELETE CASCADE
  99. );
  100. CREATE TABLE calificaciones (
  101. id_calificacion SERIAL PRIMARY KEY,
  102. id_entrega INT UNIQUE NOT NULL,
  103. nota NUMERIC(5,2),
  104. observaciones TEXT,
  105. fecha_calificacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  106. CONSTRAINT fk_calificacion_entrega
  107. FOREIGN KEY(id_entrega)
  108. REFERENCES entregas(id_entrega)
  109. ON DELETE CASCADE
  110. );
  111. CREATE TABLE progreso (
  112. id_progreso SERIAL PRIMARY KEY,
  113. id_alumno INT NOT NULL,
  114. id_curso INT NOT NULL,
  115. porcentaje NUMERIC(5,2) DEFAULT 0,
  116. CONSTRAINT fk_progreso_alumno
  117. FOREIGN KEY(id_alumno)
  118. REFERENCES alumnos(id_alumno)
  119. ON DELETE CASCADE,
  120. CONSTRAINT fk_progreso_curso
  121. FOREIGN KEY(id_curso)
  122. REFERENCES cursos(id_curso)
  123. ON DELETE CASCADE,
  124. CONSTRAINT unique_progreso
  125. UNIQUE(id_alumno, id_curso)
  126. );
  127. CREATE TABLE horarios (
  128. id_horario SERIAL PRIMARY KEY,
  129. id_curso INT NOT NULL,
  130. dia_semana INT NOT NULL CHECK (dia_semana BETWEEN 1 AND 5),
  131. hora_inicio TIME NOT NULL,
  132. hora_fin TIME NOT NULL,
  133. aula VARCHAR(50),
  134. CONSTRAINT fk_horario_curso
  135. FOREIGN KEY(id_curso)
  136. REFERENCES cursos(id_curso)
  137. ON DELETE CASCADE
  138. );
  139. CREATE TABLE proyectos (
  140. id_proyecto SERIAL PRIMARY KEY,
  141. id_curso INT NOT NULL,
  142. titulo VARCHAR(200) NOT NULL,
  143. descripcion TEXT,
  144. fecha_entrega TIMESTAMP,
  145. estado VARCHAR(50) DEFAULT 'en curso',
  146. porcentaje_completado NUMERIC(5,2) DEFAULT 0,
  147. CONSTRAINT fk_proyecto_curso
  148. FOREIGN KEY(id_curso)
  149. REFERENCES cursos(id_curso)
  150. ON DELETE CASCADE
  151. );
  152. CREATE TABLE proyectos_estudiantes (
  153. id_proyecto INT NOT NULL,
  154. id_alumno INT NOT NULL,
  155. PRIMARY KEY (id_proyecto, id_alumno),
  156. CONSTRAINT fk_pe_proyecto
  157. FOREIGN KEY(id_proyecto)
  158. REFERENCES proyectos(id_proyecto)
  159. ON DELETE CASCADE,
  160. CONSTRAINT fk_pe_alumno
  161. FOREIGN KEY(id_alumno)
  162. REFERENCES alumnos(id_alumno)
  163. ON DELETE CASCADE
  164. );
  165. CREATE TABLE examenes (
  166. id_examen SERIAL PRIMARY KEY,
  167. id_curso INT NOT NULL,
  168. titulo VARCHAR(200) NOT NULL,
  169. temario TEXT,
  170. fecha TIMESTAMP NOT NULL,
  171. duracion_minutos INT NOT NULL,
  172. modalidad VARCHAR(50),
  173. CONSTRAINT fk_examen_curso
  174. FOREIGN KEY(id_curso)
  175. REFERENCES cursos(id_curso)
  176. ON DELETE CASCADE
  177. );