2017-03-02 4 views
0

ここでの一般的な質問は、SQLの場合、「最新のエントリは常に最高のインデックスにある」などと頼りますか?トランザクションのリストのSQLテーブル - ソートが必要ですか?

特に、私はsqlalchemy(pythonベースのORM)とsqliteデータベース(sqlite_autoincrement = True)を使用して、いくつかのアイテムの回収と返品を追跡しています。私はこれのために「ローン」テーブルを持っています。私にとっては、新しいエントリ(常にPythonのORMを通して行われる)は、より高いプライマリキーインデックスに追加されるようです。これは信頼できる動作で、他のSQLデータベースにも引き継がれますか?

最後に商品が返品されたかどうかを確認したい場合は、その商品のすべての出品についてLoanテーブルのクエリを実行するだけです。最後に追加された行になるのですか?

答えて

1

いいえ、このような動作に頼ることはありません。どんな保証もブラックボックスとして扱うことができるエンジンではなく、論理(リレーショナル)モデルによって提供されるべきです。最後に入力した項目を検索する必要がある場合は、モデルがそのような値を保持することが保証されているフィールド、つまり識別列またはシーケンスに依存する必要があります。

+0

あなたの答えに暗黙の質問は 'これはORM(sqlalchemy)がそのような保証を提供するのですか'と思いますか?また、自動インクリメント付きのsqliteの場合、(それほど確信が持てないし、誰かが私にそう言ってもらいたい)と思うかもしれません。そうであれば、これは私がこの振る舞いに頼るべきかどうか、あるいはソートのためにすべての行にトラッカーユニット(私のコンテキスト、日付と時間)を挿入しなければならないのでしょうか? –

+0

私はそのようなことをするのはORMの仕事だとは思わない。データベースがそのままの状態でこの機能をサポートしていない場合、そのようなメカニズムを実装するのはアプリケーションの責任になります。とにかく、私は 'autoincrement'は、ドキュメントが必要でない限りそれを使うことを示唆しているようだが、うまくいくと思う。 –

0

AUTOINCREMENT列を使用している場合、SQLite guaranteesは、IDのシーケンスが単調増加していることを示します。

ただし、引き出し/返却の時間が重要な場合は、その時間をデータベースに保存することをお勧めします。

関連する問題