Как убедиться, что внешний ключ может появляться в таблице только ограниченное количество раз - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь создать несколько простых таблиц. У меня есть одна таблица со списком участников, а другая - со списком участников через внешний ключ memberNo. Могу ли я ограничить вторую таблицу, чтобы отдельный внешний ключ мог появляться только три раза, например?

CREATE TABLE members(memberNo varchar(6) NOT NULL,
    fname varchar(10),
    lname varchar(10),
    PRIMARY KEY (memberNo));

CREATE TABLE activities(actNo varchar(6) NOT NULL,
    type varchar(30),
    memberNo varchar(6) NOT NULL,
    PRIMARY KEY(actNo),
    FOREIGN KEY(memberNo) REFERENCES Members(memberNo),
    %CHECK(count(memberNo) < 6));

Возможно, это очень просто, но я не могу найти решение, поэтому я, вероятно, задаю вопрос неправильно. Я знаю, что я не хочу, чтобы memberNo был УНИКАЛЬНЫМ в таблице действий, но разрешено встречаться только ограниченное число раз.

1 Ответ

0 голосов
/ 02 мая 2018

В MySQL нет простого способа сделать это. Вот два метода, использующие триггеры.

Один из способов - для insert триггера подсчитать количество строк в activities для данного члена и не допустить обновления, превышающие пороговое значение.

Второй метод состоит в том, чтобы изменить members так, чтобы в нем был столбец с количеством действий - обычно требуются триггеры на insert, delete и, возможно, update в activities. Затем это значение можно использовать в триггере insert для действий для проверки значения.

Возможны два других метода. Если все ваши модификации данных заключены в хранимые процедуры, вы можете реализовать их в хранимых процедурах, а не в базе данных. При проектировании систем я часто использую этот подход, но вы должны быть очень осторожны, чтобы все модификации контролировались.

Наконец, если вы хотите разрешить только два или три действия, у вас может быть отдельный столбец в элементах, относящихся к каждому. Я не в восторге от этого подхода, но он удовлетворяет потребность в небольшом количестве действий на участника.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...