2010-12-01 13 views
1

これはかなり基本的な質問です、私は初心者です:)データベース設計:完全なトランザクション履歴と現在のステータスのクイックルックアップを保存しますか?

私は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) 

これは、トランザクションの完全なリストを取得するために問題なく動作します。しかし、私が本の現在の状態を知りたいのであれば、その本の取引をすべて検索し、最新のものを見つけなければならないでしょう。

これは合理的ですか?それは将来の証拠ですか?

私はデータベースがそれほど大きくなるとは考えていませんが、データベースの標準化を解除することなく、書籍の現在の状態を保存する効率的な方法はありますか?

感謝していただきありがとうございます。

答えて

1

よく設計されたデータベースでは、書籍のすべての取引を検索して最新のものを検索することはありません。少なくとも、データベース設計者は索引を作成し、dbmsは索引を使用します(おそらく)。

MySQLはこれを実行できます。私はDjangoに馴染んでいないので、MySQLがそれを実行するのに十分スマートであるかどうかを知ることはできません。しかし、そうでなければ私は少し驚いているだろう。

私の地元の図書館から、書籍、CD(音楽と書籍の両方)、カセットテープ、地図、DVD、ビデオゲーム、教育用ソフトウェア、おもちゃなどをチェックアウトしました。フレームワーク。

関連する問題