通过检查其他表中的条件来限制MySQL表中的记录数

时间:2018-01-13 12:07:55

标签: mysql

我正在为图书租赁创建一个非常简单的数据库系统。我有一个基本的MySQL数据库和一个PHP前端。我熟悉html / css / php / js / ajax,但有一个特殊功能我无法正确使用。

所以我有一张书桌和一张贷款表。每本书都有一个“数量”属性,每个贷款都有“书名(外键)”,“发行日期”和“返回日期”属性。

我想阻止为已经借出的每本副本的书籍创建新的贷款。

我不确定最好的解决方法 - 通常的做法是在数据库中加入一些逻辑,并使用额外的表或字段监控借出的副本数量?或者在前端处理这种逻辑会更好吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

有几种可能性来处理这个问题。在数据库级别执行此操作是确保数据始终正确的好方法。

一个选项是用于存放书籍的存储过程。它会检查表格并仅在书籍可用时插入。不利的一面是,如果您不使用该程序,则您没有任何保证数据是正确的。

另一个选项是触发器,如果​​试图插入贷款表而没有任何可用的书籍,则会引发错误。要抛出错误并阻止插入,您可以在触发器中使用以下代码行:

SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'insert not allowed because bla bla';

另一种选择是使用一个表,其中包含每本可用书籍的记录,您只需在其中设置isAvailable标志或指示其是否可用的日期。结构可能是这样的

books table
-----------
id
title
author
...


book_copies table
-----------------
book_id
book_copy_number


loans table
-----------
id
book_copy_id
loan_date
return_date