2017-03-02 47 views
0

這裏的一般問題 - 對於SQL,我可以依靠'最新的入口始終處於最高索引'還是某種效果?事務列表的SQL表 - 需要排序?

具體來說,我使用sqlalchemy(基於python的ORM)和一個sqlite數據庫(sqlite_autoincrement = True)來跟蹤某些項目的提取和返回。我有一個「貸款」表。在我看來,所有新條目(總是通過Python中的ORM完成)被附加在更高的主鍵索引處。這是可靠的行爲,並且是否傳遞給其他SQL數據庫?

換句話說,如果我想檢查一個項目是最近返回還是借出的,我只需在貸款表上查詢該項目的所有事件,我是否可以將「最後」返回行是最近添加的行嗎?

回答

1

不,永遠不要依賴這樣的行爲!任何保證都應該由邏輯(關係)模型來提供,而不是可以被視爲黑匣子的引擎。如果您需要查找「最後」輸入的項目,您需要依賴由模型保證的字段來保存此類值:標識列或序列。

+0

所以我想你的答案隱含的問題是'這個ORM(sqlalchemy)提供任何這樣的保證'?對於自動增量的sqlite,我認爲它可能(不太確定,希望有人告訴我這樣)。如果確實如此,是否意味着我應該依賴這種行爲,還是應該在每行中插入跟蹤器單元(用於我的上下文,日期和時間)以進行排序? –

+0

我不認爲這是ORM的工作。如果數據庫不支持這種開箱即用的方式,那麼應用程序有責任實現這種機制。無論如何,我認爲'autoincrement',雖然文件似乎建議不使用它,除非必要,將是沒有問題的。 –

0

當您使用AUTOINCREMENT列時,SQLite guarantees ID序列單調遞增。

但是,如果提款/退貨的時間很重要,最好將這段時間存儲在數據庫中。