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

时间:2010-12-01 17:58:17

标签: mysql database-design django-models

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

我正在使用Django& amp;来构建一个库数据库。 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)

这样可以获得完整的交易清单。但是,如果我想获得一本书的当前状态,我必须搜索所有书籍的交易并找到最新的。

这是明智的吗?它是面向未来的吗?

我不预见数据库会变得那么大,但是有没有更有效的方法来存储图书的当前状态,而不会使数据库失真?

感谢所有建议!

1 个答案:

答案 0 :(得分:1)

精心设计的数据库不会搜索所有图书的交易以查找最新的。至少,数据库设计者将创建索引,dbms将(可能)使用它们。

MySQL可以做到这一点;我对Django不太熟悉,知道它是否足够聪明,让MySQL能够做到这一点。如果不是,我会有点惊讶。

关于它是否明智和未来证明 - 来自我当地的图书馆我查阅了书籍,CD(音乐和书籍),盒式磁带,地图,DVD,视频游戏,教育软件,玩具和框架艺术品。