Таблица оценок включает в себя ссылки на учеников и потоки, а также оценку за курс.
Ключ ученика | Ключ потока | Оценка |
4.9 | ||
4.9 |
Таблица 10. Таблица оценок
Имя столбца | Тип данных | Ограничения |
student_id | INTEGER | NOT NULL PRIMARY KEY FOREIGN KEY |
stream_id | INTEGER | NOT NULL PRIMARY KEY FOREIGN KEY |
grade | REAL | NOT NULL |
Таблица 11. Столбцы таблицы grades
Обратите внимание, что в таблице оценок нет ключевого столбца «Ключ оценки». Вместо этого, мы определили ограничение первичного ключа сразу на два столбца — «Ключ ученика» и «Ключ потока». Дело в том, что ученик получает только одну среднюю оценку по всем практическим заданиям за курс (поток). Поэтому комбинация значений ключа ученика и ключа потока уникальна в пределах всей таблицы.
В этом случае применяем составной первичный ключ, который состоит из комбинации значений нескольких столбцов.
Столбец «Ключ ученика» ссылается на таблицу учеников, а столбец «Ключ потока» — на таблицу потоков. Оба этих столбца — кандидаты на определение в качестве внешних ключей.
Команда создания таблицы grades:
CREATE TABLE grades (student_id INTEGER NOT NULL, stream_id INTEGER NOT NULL, grade REAL NOT NULL, PRIMARY KEY(student_id, stream_id), FOREIGN KEY (student_id) REFERENCES students(id), FOREIGN KEY (stream_id) REFERENCES streams(id)); |
Составной первичный ключ задаётся отдельным выражением PRIMARY KEY(student_id, stream_id).
Проверим, что все таблицы успешно созданы, и выйдем из sqlite3.
sqlite>.tables courses grades streams students sqlite>.quit |