我有一個基本的CRUD網絡應用程序,人們可以創建文章/編輯它們。我現在想添加修改所有修改歷史記錄的功能。目前,我有一個文章表,看起來像這樣:規範化或反規範化將修訂歷史存儲在RDBMS中?
Article(id, title, content, author_id, category_id, format)
我已經考慮了2個選項來改變我當前的模式,以添加對修訂歷史的支持。基本思想是任何文章的每一個編輯都會作爲記錄存儲在修訂表中。所以文章和修訂是一對多的關係。
第一個選項(標準化): 一個用於文章元數據的表格,一個用於修訂版本。沒有重複的數據存儲。
Article(id, title, category_id)
Revision(id, content, author_id, format)
第二個選項(非歸): 兩個表像選項1,但一些重複列。
Article(id, title, content, author_id, category_id, format)
Revision(id, article_id, content, author_id, format)
我正在考慮去第二個選項,因爲它會使我的編碼更容易(不太複雜,代碼行少)。我知道這不是「學術」和「純粹」,但我個人的感覺是,必須進行額外的連接會傷害代碼維護。此外,性能應該更好,因爲沒有必要完成許多聯接。
這是一個合理的方式去完成這項任務?可能是我忽略的任何不可預見的或長期的後果?
JNK是正確的(雖然沒有SQL中的連接優化 - RDBMS是。雖然細節)。對於我們的發票申請,我們有類似的問題,但那裏的「歷史」表是發票表的精確副本,還有一些附加字段(歷史PK,時間戳等)。容易'插入歷史選擇空,現在(),...,我*發票我'* – Konerak 2012-04-11 19:14:30