MySQL 1:10 фиксированная связь. Как реализовать это на уровне базы данных?

Можно ли реализовать отношение 1:N, которое имеет 10 строк many ссылка на 1 строку из one таблица максимум?

// ID int
INSERT INTO one VALUES (1);
// ...
INSERT INTO one VALUES (25);

//ID int, one_id int
INSERT INTO many VALUES (1,1);
// ...
INSERT INTO many VALUES (1,10);
INSERT INTO many VALUES (1,11); // ERROR!

INSERT INTO many VALUES (2,11); // working
// ...
INSERT INTO many VALUES (2,20); // working
INSERT INTO many VALUES (2,21); // ERROR!

1 ответ

Решение

Вы можете сделать это с помощью триггера:

create trigger trg_mytable_max10 before insert on mytable
for each row
begin
  declare cnt int;
  set cnt = (select count(*) from mytable where col1 = new.col1);
  if cnt = 10 then
    signal sqlstate '45000' set message_text = 'only 10 records per col1 allowed';
  end if;
end;

http://rextester.com/EORH56497

Другие вопросы по тегам