我正在为图书租赁创建一个非常简单的数据库系统。我有一个基本的MySQL数据库和一个PHP前端。我熟悉html / css / php / js / ajax,但有一个特殊功能我无法正确使用。
所以我有一张书桌和一张贷款表。每本书都有一个“数量”属性,每个贷款都有“书名(外键)”,“发行日期”和“返回日期”属性。
我想阻止为已经借出的每本副本的书籍创建新的贷款。
我不确定最好的解决方法 - 通常的做法是在数据库中加入一些逻辑,并使用额外的表或字段监控借出的副本数量?或者在前端处理这种逻辑会更好吗?
提前致谢。
答案 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