我在MSSQL 2012数据库中有四个表,我不知道是否需要更改设计或坚持我制作的约束,我认为虽然有效,但我觉得有点麻烦。考虑以下玩具示例:
考虑一个图书馆借出书籍和杂志,并希望跟踪贷款。问题是杂志和贷款有不同的状态,所以我最终得到了这些表格:
如何确保不能使用状态缺货的图书进行日志记录?
我目前的解决方案是在调用函数checkStates()的日志上做一个检查约束,检查下面的计数是否大于0:
SELECT count(*) FROM Logs l INNER JOIN Media m ON l.Media = m.ID INNER JOIN MediaState ms ON ms.ID = m.MediaState WHERE m.MediaType != ms.MediaType
答案 0 :(得分:0)
我建议有一个表来保存每个单元的数量(媒体,媒体类型)。然后使用存储过程来发布单位
检查是否
的存储过程currentStock - Loaned - Reserved - [Ordered Units] >= 0
如果满足以上条件,则会在Log表中插入一个条目。否则,它会返回一条用户友好的消息,说Out of stock
... bla bla ..
还在您的日志表中添加一个名为BIT
的{{1}}列,默认情况下将其设置为Returned
,当返回Item时将其设置为1。