связи таблиц в mysql

50
08 июня 2018, 15:10


На ERD-диаграмме часть схемы моей бд.

Вопросы:

  1. Как в MySQL сделать составной первичный ключ, атрибуты которого подтягиваются из 2 таблиц(таблица reports).

  2. Поправьте, если не прав: при такой связи, когда я удалю какую-то запись из таблицы accounts/lessons, все записи таблицы reports с удаленными значениями тех таблиц удаляться в след за ними? Если нет, скажите как это реализовать.

  3. Тот же вопрос для, только для таблиц answers и questions.

Если какой-то отчет удаляется, хочу чтобы записи ответов к этому отчету тоже стирались.

Я думаю по структуре примерно понятно что я хочу. Есть некий набор видеоуроков с вопросами к каждому из них(разного кол-ва могут быть). И есть отчеты с ответами каждого пользователя к конкретному уроку. Вообще прокомментируйте структуру таблиц\связей. Правильно ли вообще спроектировал?

Answer 1
  1. 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
    
  2. Зависит от того, что вы укажете в секции ON DELETE ключа. Допустимые значения
    • CASCADE — дочерняя запись удаляется при удалении родительской
    • SET NULL — ссылке присваивается значение NULL. Если у самого поля стоит атрибут NOT NULL то при удалении родительской записи возникнет ошибка
    • RESTRICT или NO ACTION — удаление родительской записи невозможно, пока на нее есть ссылки

И помните, в MySQL внешние ключи поддерживают только движки InnoDB и NDB версии 7.3 и выше. Остальные оператор FOREIGN KEY проглотят, но создадут обычный индекс

READ ALSO
загрузка данных из файла

загрузка данных из файла

У меня mySql 80, я создал базу данных через консоль на локальном компьютере, создал таблицу, пытаюсь записать данные из файла тоже через консоль...

36
Ресурсоемкость запросов в БД

Ресурсоемкость запросов в БД

Есть таблица в MYSQL c полями "id", "категория", "год", "картинка" и другие На сайте выводятся различные блоки: Например, блок "Другие посты"Делается...

14
Вывести года из таблицы по 1 разу

Вывести года из таблицы по 1 разу

Есть таблица с полям id, name и yearТам очень много записей у которых частенько совпадают года, как мне вывести из таблицы все года, но только по одному...

36
Обработка форм в php, как решить?

Обработка форм в php, как решить?

Примечание: Должно получиться что-то наподобие этого: пришла строка «Моя строка», а выйти в браузер должно: «о тоа»

19