На ERD-диаграмме часть схемы моей бд.
Вопросы:
Как в MySQL сделать составной первичный ключ, атрибуты которого подтягиваются из 2 таблиц(таблица reports).
Поправьте, если не прав: при такой связи, когда я удалю какую-то запись из таблицы accounts/lessons, все записи таблицы reports с удаленными значениями тех таблиц удаляться в след за ними? Если нет, скажите как это реализовать.
Тот же вопрос для, только для таблиц answers и questions.
Если какой-то отчет удаляется, хочу чтобы записи ответов к этому отчету тоже стирались.
Я думаю по структуре примерно понятно что я хочу. Есть некий набор видеоуроков с вопросами к каждому из них(разного кол-ва могут быть). И есть отчеты с ответами каждого пользователя к конкретному уроку. Вообще прокомментируйте структуру таблиц\связей. Правильно ли вообще спроектировал?
CREATE TABLE reports (
account_id INTEGER NOT NULL,
lesson_id INTEGER NOT NULL,
`datetime` TIMESTAMP NOT NULL,
checked BOOLEAN,
PRIMARY KEY (account_id, lesson_id),
CONSTRAINT fk_reports_account_id FOREIGN KEY (account_id)
REFERENCES accounts (id) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT fk_reports_lesson_id FOREIGN KEY (lesson_id)
REFERENCES lessons (id) ON DELETE CASCADE ON UPDATE CASCADE,
)ENGINE=InnoDB
ON DELETE ключа. Допустимые значения
CASCADE — дочерняя запись удаляется при удалении родительскойSET NULL — ссылке присваивается значение NULL. Если у самого поля стоит атрибут NOT NULL то при удалении родительской записи возникнет ошибкаRESTRICT или NO ACTION — удаление родительской записи невозможно, пока на нее есть ссылкиИ помните, в MySQL внешние ключи поддерживают только движки InnoDB и NDB версии 7.3 и выше. Остальные оператор FOREIGN KEY проглотят, но создадут обычный индекс
Сборка персонального компьютера от Artline: умный выбор для современных пользователей