|
|
|
Оцените БД.
|
|||
|---|---|---|---|
|
#18+
Всем добрый день. Сильно не пинайте я тут первый раз. Ситуация такая - есть задание для БД и пары запросов и есть вариант реализации задания. Прошу оценить его, и указать ошибки пожелания, думаю конечно, что все будет ужасно, но прошу понять, я только начинающий. Используется - MS SQL server 2008r2. Задание: Задание1. Необходимо спроектировать структуру данных для реализации задачи. Структура данных должна включать: таблицы, поля, типы данных, ограничения целостности и уникальности, необходимые ключи, индексы. Необходимо заполнить созданную структуру тестовыми данными. Описание: база данных “Школа”. Преподаватель может вести один или несколько предметов. По совместительству преподаватель может быть классным руководителем. Быть классным руководителем, но ничего не преподавать он не может. Школьники учатся в классах не более 30 человек в классе. Школьники изучают предмет у одного из преподавателей, ведущих данный предмет. Ежедневное расписание занятий любого класса должно включать не более 6 различных уроков. 1 урок = 1 час (академический) = 40 минут. 2. Необходимо сформировать SQL-запросы, реализующие следующие задачи а) Посчитать количество учеников, которые изучают математику б) Посчитать количество рабочих часов (не академических) в неделю преподавателя “Иванов И.И.” в) Вывести топ 3 преподавателей, обучающих максимальное количество учеников. Считать классное руководство также обучением. Результатом выполнения тестового задания должны являться 2 sql-скрипта. Первый - создающий структуру данных и заполняющий ее тестовыми данными. Второй скрипт должен включать в себя sql запросы, реализующие задачи. Допускается использование любых операторов, поддерживаемых MS SQL Server 2008 R2, но оптимальность запросов будет являться дополнительным плюсом. Реализация - Первый скрипт, создает БД и заполняет тестовыми данными: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. Второй скрипт, выполняет запросы: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. С нетерпением жду ваших комментариев. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2012, 16:16 |
|
||
|
Оцените БД.
|
|||
|---|---|---|---|
|
#18+
DmitriyNoneПрошу оценить его, и указать ошибки пожелания, думаю конечно, что все будет ужасно, но прошу понять, я только начинающий. Для начинающего очень и очень неплохо. Первое, что бросается в глаза - Вы зря объединили сущности "учитель" и "предметы, преподаваемые учителем" и нарушили вторую (кажется) нормальную форму. Кроме этого, я либо не врубился, как Вы сделали понятие "классный руководитель", либо там что-то не так. Ну ещё - имхо стоит всегда явно указывать null / not null для колонок. До второго скрипта, честно говоря, не добрался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2012, 17:52 |
|
||
|
Оцените БД.
|
|||
|---|---|---|---|
|
#18+
А табличка (teach_disc) где? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2012, 20:24 |
|
||
|
Оцените БД.
|
|||
|---|---|---|---|
|
#18+
softwarerКроме этого, я либо не врубился, как Вы сделали понятие "классный руководитель", либо там что-то не так.Я добавил поле Teach_Group в таблице Teach с ID группы которой данный учитель является классным руководителем. _______________________________________ Как я понял, я зря объединил таблицу сущности учителей Teach, и таблицу связей Teach_Disc. В ближайшее время исправлю эту ошибку. И поправлю исходный пост. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2012, 06:29 |
|
||
|
Оцените БД.
|
|||
|---|---|---|---|
|
#18+
2012-04-12 9:31 Долго переделывал, с утра был завал на работе :) Не нашел как править свои сообщения, так что придется создать еще один пост. Если есть люди которые знаю как это сделать, буду рад подсказке. В случае дальнейших исправлений придется делать так же. Есть пара вопросов: 1. Нужно ли указывать явно not null на полях primary key, identity, unique ? 2. В данной реализации я объединил поля фамилии, имя и отчества в одно поле, но как я понимаю в действующей базе их желательно разбить на отдельные поля ? Обновленный скрипт создания таблиц и заполнения данных: Таблица Teach была разбита на 2 - таблицу сущности учителей Teach и таблицу связей между учителями и предметами Teach_Disc. Так же было добавлено ограничение на уникальность поля Teach_fio таблицы Teach. Так же. Подумав еще немного я заметил, что в данной реализации нельзя добавить учителя - классного руководителя, так как при выполнении процедуры вставки, проверяется, есть ли у данного учителя уроки в расписании, но в расписании стоит ограничение на внешний ключ ссылающийся на уже существующих преподавателей. Поэтому я добавил еще одну процедуру upd_teacher которая по имени учителя(первый атрибут) делает его классным руководителем группы номер(второй атрибут). А в теле уже проверяет наличие уроков данного учителя в расписании. Следовательно не уверен в необходимости процедуры add_teacher, ввиду ее... бессмысленеости ? :) пока оставил. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. С нетерпением жду дальнейших предложений, вопросов и пожеланий :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2012, 10:11 |
|
||
|
Оцените БД.
|
|||
|---|---|---|---|
|
#18+
DmitriyNone: 1. Нужно ли указывать явно not null на полях primary key, identity, unique ? По их сути разве не понятно, что не может быть null??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2012, 20:29 |
|
||
|
Оцените БД.
|
|||
|---|---|---|---|
|
#18+
Random_Goodman, да конечно понятно, просто softwarer писал >> Ну ещё - имхо стоит всегда явно указывать null / not null для колонок вот я и спросил на всякий случай. А вообще по выполнению, что можете сказать ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.04.2012, 05:11 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=50&tid=1541736]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
42ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 197ms |
| total: | 316ms |

| 0 / 0 |
