Обеспечение корпоративных ограничений на связи с базой данных MySql - PullRequest
2 голосов
/ 29 августа 2011

Если у меня есть следующие отношения

Articles
articleId(PK)
title
content
date

И скажи, что у меня ограничение на предприятии:

There may be only 10 articles in this table at anyone time

Каков наилучший способ реализации этого корпоративного ограничения в базе данных mysql? Будет ли это чисто обработано кодом? Должен ли я что-то изменить в своей базе данных, чтобы обеспечить соблюдение таких ограничений?

Ответы [ 2 ]

1 голос
/ 29 августа 2011

Я бы использовал триггер.

Вы можете сделать это так:

DELIMITER $$

CREATE TRIGGER bi_articles_each BEFORE INSERT ON articles FOR EACH ROW
BEGIN
  DECLARE number_of_articles INTEGER;
  SELECT count(*) INTO number_of_articles FROM articles;
  IF number_of_articles > 10 THEN
    //select from a non_existing query to force an error and prevent the insert
    SELECT error 
    FROM `There may be only 10 articles in the article table at anyone time`;
  END IF;

END $$

DELIMITER ;

См:
http://dev.mysql.com/doc/refman/5.0/en/triggers.html
http://www.databasedesign -resource.com / mysql-triggers.html

Генерация ошибок немного неуклюжа, но в остальном она работает как шарм. Я использую это все время.

Преимущество триггера в том, что он гарантированно работает независимо от используемого вами вектора вставки, и он позволяет вам сохранять (использовать) стандартный SQL для вставок, удалений и обновлений, что может быть очень удобно.

0 голосов
/ 29 августа 2011

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

Если пользовательское ограничение нарушается, вы можете сообщить клиенту, какое ограничение нарушено (например, с помощью возвращаемых переменных), и пропустить, вставив статью.

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