Mysql 数据库设计:存储完整的事务历史记录并快速查找当前状态?

Mysql 数据库设计:存储完整的事务历史记录并快速查找当前状态?,mysql,database-design,django-models,Mysql,Database Design,Django Models,这是一个非常基本的问题,我是初学者:) 我正在使用Django和MySQL构建一个库数据库。数据库具有书籍和用户的概念,以及交易的概念,其中用户取出或归还一本书 我需要能够: 获取特定书籍的完整交易列表-谁签出以及何时签出 快速获取书籍的当前状态 我曾想过使用这样的表格,但这种设计有问题吗 class Book(models.Model): name = models.CharField() class User(models.Model): name = models.Ch

这是一个非常基本的问题,我是初学者:)

我正在使用Django和MySQL构建一个库数据库。数据库具有书籍用户的概念,以及交易的概念,其中用户取出或归还一本书

我需要能够:

  • 获取特定书籍的完整交易列表-谁签出以及何时签出
  • 快速获取书籍的当前状态
我曾想过使用这样的表格,但这种设计有问题吗

class Book(models.Model):
    name = models.CharField()
class User(models.Model):
    name = models.CharField()
TRANSACTION_TYPES = (
    ('I', 'Check in'),
    ('O', 'Check out'),
)
class Transaction(models.Model):
    book = models.ForeignKey(Book)
    user = models.ForeignKey(User)
    type = models.CharField(max_length=1, choices=TRANSACTION_CHOICES)
    date_added = models.DateTimeField(auto_now_add=True)
这对于获取完整的事务列表是可行的。但是,如果我想获得一本书的当前状态,我必须搜索该书的所有交易,并找到最近的交易

这是否合理?这是未来的证明吗

我不认为数据库会变得那么大,但是有没有一种更有效的方法来存储书籍的当前状态,而不去规范化数据库


感谢您的建议

一个设计良好的数据库不会搜索整本书的所有交易以找到最近的交易。至少,数据库设计者将创建索引,dbms(可能)将使用它们

MySQL可以做到这一点;我对Django不够熟悉,不知道让MySQL来做这件事是否明智。如果不是这样,我会有点惊讶


至于它是否明智和经得起未来考验——我从当地图书馆借出了书籍、CD(包括音乐和书籍)、磁带、地图、DVD、视频游戏、教育软件、玩具和装裱艺术品。

一个设计良好的数据库不会搜索所有书籍的交易,以找到最新的交易。至少,数据库设计者将创建索引,dbms(可能)将使用它们

MySQL可以做到这一点;我对Django不够熟悉,不知道让MySQL来做这件事是否明智。如果不是这样,我会有点惊讶

至于它是否明智和经得起未来考验——我从当地图书馆借出了书籍、CD(音乐和书籍)、磁带、地图、DVD、视频游戏、教育软件、玩具和装裱艺术品