Mysql中的位字段?

时间:2012-01-31 02:08:29

标签: sql

我有一个与数据库架构有关的简单问题,如何检查学生是否借用了某本书,让我说我有一个表Borrowtable,我有Student_id,Book_id ....作为该表的属性,什么否则我应该添加,以便跟踪student_id是否借了一本书???

我认为要添加另一个字段,如Status作为INT字段,值为1表示借用,0表示不借用。这是好主意还是有其他方法可以做到这一点?

Thankx

Lulzim。

4 个答案:

答案 0 :(得分:3)

您可能不需要其他列。正如名称BorrowTable所暗示的那样,您只需存储在此表中借用 的图书。如果他们被退回或没有借用,您可以将其从此表中删除。

答案 1 :(得分:2)

针对两种情况进行了编辑

场景1:不存储借用历史记录:

如果您无需跟踪用户的借用历史记录,则适用。借书是一次性的事件,不会被记住。

如果您的Borrowtable包含Student_idBook_id之间的地图,则无需另外一列来表明借用或未借用。

相反,您可以简单地依赖包含学生和书籍的行的存在。如果该行存在,则该书已经存在 借来的。如果该行已被删除或不存在,则该书尚未借用。

要测试任何用户是否可以借阅图书,只需检查表格中是否存在Book_id。如果是,则该书不可用。

场景2:存储用户的借阅历史记录:

如果您需要跟踪用户借用的内容,请再添加两列DATETIME类型的列,以跟踪借书日期和书籍的返回日期。

要测试图书是否可用于借阅,请使用以下查询:

SELECT Book_id FROM Borrowed WHERE Book_id=12345 AND NOW() BETWEEN Borrow_Date AND Return_Date;

如果任何行返回,则该图书目前已借用且无法使用。

答案 2 :(得分:1)

也许你应该在Borrowtable中有DateBorrowed和DateReturned的列。 您不需要位字段来指示学生是否借了这本书。对于给定的学生和书籍来说,存在的行应该足够了。

答案 3 :(得分:0)

您的表似乎是Many-to-many表(StudentBook表之间)。你可以假设一个学生如果在这张表中借用了这本书(学生要么借书,要么他没有)。如果有更多可能的选项,那么您需要再添加一列并拥有StatusID