/includes/app/scripts/create_database.php

https://github.com/roobie/g19db_infc20 · PHP · 222 lines · 154 code · 52 blank · 16 comment · 2 complexity · a047eb1242c25b4bc633cd6660fc6e9a MD5 · raw file

  1. <?php
  2. require 'database_props.php';
  3. ini_set('display_errors', 'On');
  4. error_reporting(E_ALL | E_STRICT);
  5. try {
  6. $db = new PDO($pdo_connection_string, $user, $password);
  7. //====================================================================
  8. // TABLE DROPS && DEFS
  9. //====================================================================
  10. //--- BEGIN: DROPS ---
  11. $db->query("DROP TABLE IF EXISTS student_section");
  12. $db->query("DROP TABLE IF EXISTS section");
  13. $db->query("DROP TABLE IF EXISTS course_requirements");
  14. $db->query("DROP TABLE IF EXISTS studies");
  15. $db->query("DROP TABLE IF EXISTS has_studied");
  16. $db->query("DROP TABLE IF EXISTS course");
  17. $db->query("DROP TABLE IF EXISTS student");
  18. //--- END: DROPS ---
  19. //--------------------------------------------------------------------
  20. $db->query("CREATE TABLE IF NOT EXISTS `g19db`.`student` (
  21. `idstudent` INT NOT NULL AUTO_INCREMENT ,
  22. `social_security_number` VARCHAR(12) NULL ,
  23. `first_name` VARCHAR(45) NOT NULL ,
  24. `last_name` VARCHAR(45) NOT NULL ,
  25. `address` VARCHAR(255) NOT NULL ,
  26. `phone_number` VARCHAR(45) NOT NULL ,
  27. `email` VARCHAR(45) NOT NULL ,
  28. `type` VARCHAR(45) NOT NULL ,
  29. PRIMARY KEY (`idstudent`) ,
  30. UNIQUE INDEX `social_security_number_UNIQUE` (`social_security_number` ASC) )
  31. ENGINE = InnoDB");
  32. //---
  33. $db->query("CREATE TABLE IF NOT EXISTS `g19db`.`course` (
  34. `idcourse` INT NOT NULL AUTO_INCREMENT ,
  35. `code` VARCHAR(45) NULL COMMENT ' ' ,
  36. `name` VARCHAR(45) NULL ,
  37. `points` VARCHAR(5) NOT NULL ,
  38. PRIMARY KEY (`idcourse`) )
  39. ENGINE = InnoDB");
  40. //---
  41. $db->query("CREATE TABLE IF NOT EXISTS `g19db`.`section` (
  42. `idsection` INT NOT NULL ,
  43. `idcourse` INT NOT NULL ,
  44. `name` VARCHAR(45) NOT NULL ,
  45. PRIMARY KEY (`idsection`, `idcourse`) ,
  46. INDEX `fk_course_section` (`idcourse` ASC) ,
  47. CONSTRAINT `fk_course_section`
  48. FOREIGN KEY (`idcourse` )
  49. REFERENCES `g19db`.`course` (`idcourse` )
  50. ON DELETE NO ACTION
  51. ON UPDATE NO ACTION)
  52. ENGINE = InnoDB");
  53. //---
  54. $db->query("CREATE TABLE IF NOT EXISTS `g19db`.`student_section` (
  55. `idstudent` INT NOT NULL COMMENT ' ' ,
  56. `idsection` INT NOT NULL ,
  57. `name` VARCHAR(45) NULL ,
  58. `description` VARCHAR(45) NULL ,
  59. `grade` VARCHAR(45) NULL ,
  60. `points` VARCHAR(5) NULL ,
  61. PRIMARY KEY (`idstudent`, `idsection`) ,
  62. INDEX `fk_section_assignment` (`idsection` ASC) ,
  63. INDEX `fk_student_assignments` (`idstudent` ASC) ,
  64. CONSTRAINT `fk_section_assignment`
  65. FOREIGN KEY (`idsection` )
  66. REFERENCES `g19db`.`section` (`idsection` )
  67. ON DELETE NO ACTION
  68. ON UPDATE NO ACTION,
  69. CONSTRAINT `fk_student_assignments`
  70. FOREIGN KEY (`idstudent` )
  71. REFERENCES `g19db`.`student` (`idstudent` )
  72. ON DELETE NO ACTION
  73. ON UPDATE NO ACTION)
  74. ENGINE = InnoDB");
  75. //---
  76. $db->query("CREATE TABLE IF NOT EXISTS `g19db`.`course_requirements` (
  77. `idcourse` INT NOT NULL ,
  78. `idcourse_required` INT NOT NULL ,
  79. PRIMARY KEY (`idcourse`, `idcourse_required`) ,
  80. INDEX `fk_course` (`idcourse` ASC) ,
  81. INDEX `fk_course_required` (`idcourse_required` ASC) ,
  82. CONSTRAINT `fk_course`
  83. FOREIGN KEY (`idcourse` )
  84. REFERENCES `g19db`.`course` (`idcourse` )
  85. ON DELETE NO ACTION
  86. ON UPDATE NO ACTION,
  87. CONSTRAINT `fk_course_required`
  88. FOREIGN KEY (`idcourse_required` )
  89. REFERENCES `g19db`.`course` (`idcourse` )
  90. ON DELETE NO ACTION
  91. ON UPDATE NO ACTION)
  92. ENGINE = InnoDB");
  93. //---
  94. $db->query("CREATE TABLE IF NOT EXISTS `g19db`.`studies` (
  95. `idstudent` INT NOT NULL ,
  96. `idcourse` INT NOT NULL ,
  97. PRIMARY KEY (`idstudent`, `idcourse`) ,
  98. INDEX `fk_student_studies` (`idstudent` ASC) ,
  99. INDEX `fk_course_studies` (`idcourse` ASC) ,
  100. CONSTRAINT `fk_student_studies`
  101. FOREIGN KEY (`idstudent` )
  102. REFERENCES `g19db`.`student` (`idstudent` )
  103. ON DELETE NO ACTION
  104. ON UPDATE NO ACTION,
  105. CONSTRAINT `fk_course_studies`
  106. FOREIGN KEY (`idcourse` )
  107. REFERENCES `g19db`.`course` (`idcourse` )
  108. ON DELETE NO ACTION
  109. ON UPDATE NO ACTION)
  110. ENGINE = InnoDB");
  111. //---
  112. $db->query("CREATE TABLE IF NOT EXISTS `g19db`.`has_studied` (
  113. `idstudent` INT NOT NULL ,
  114. `idcourse` INT NOT NULL ,
  115. `grade` VARCHAR(45) NOT NULL ,
  116. PRIMARY KEY (`idstudent`, `idcourse`) ,
  117. INDEX `fk_student_has_studied` (`idstudent` ASC) ,
  118. INDEX `fk_course_has_studied` (`idcourse` ASC) ,
  119. CONSTRAINT `fk_student_has_studied`
  120. FOREIGN KEY (`idstudent` )
  121. REFERENCES `g19db`.`student` (`idstudent` )
  122. ON DELETE NO ACTION
  123. ON UPDATE NO ACTION,
  124. CONSTRAINT `fk_course_has_studied`
  125. FOREIGN KEY (`idcourse` )
  126. REFERENCES `g19db`.`course` (`idcourse` )
  127. ON DELETE NO ACTION
  128. ON UPDATE NO ACTION)
  129. ENGINE = InnoDB");
  130. $db->query("
  131. DELIMITER $$
  132. DROP PROCEDURE IF EXISTS view_ten_youngest_students; $$
  133. CREATE PROCEDURE `g19db`.`view_ten_youngest_students` ()
  134. BEGIN
  135. SELECT *
  136. FROM student
  137. WHERE social_security_number IS NOT NULL
  138. ORDER BY social_security_number DESC
  139. LIMIT 10;
  140. END $$");
  141. $db->query("
  142. DELIMITER $$
  143. DROP PROCEDURE IF EXISTS students_with_no_fails; $$
  144. CREATE PROCEDURE `g19db`.`students_with_no_fails` ()
  145. BEGIN
  146. SELECT e.idstudent
  147. FROM student e
  148. WHERE e.idstudent IN (
  149. SELECT s.idstudent
  150. FROM student s, has_studied h
  151. WHERE s.idstudent = h.idstudent
  152. GROUP BY s.idstudent
  153. HAVING h.grade IN ( 'A', 'B', 'C', 'D', 'E')
  154. );
  155. END $$");
  156. //--- END: CREATES ---
  157. //====================================================================
  158. // RELEASE THE connection
  159. $db = null;
  160. } catch (PDOException $e) {
  161. print "Error!: " . $e->getMessage() . "<br/>";
  162. echo "Error!: " . $e->getMessage() . "<br/>";
  163. $e;
  164. header("Location: application.php?error=" . $e->getMessage() );
  165. }
  166. // Redirects to the referring page.
  167. if (header("Location: ".$_SERVER["HTTP_REFERER"]) == 'localhost') {
  168. header("Location: ".$_SERVER['HTTP_REFERER']);
  169. }
  170. ?>