2010-07-22 51 views
1

我正在設計一個新的DataBase,目前有50個表。對於許多表格,我必須最終爲每個元組的每一列存儲一個「註釋」。 現在我發現只有2種解決方案:
添加備註到列的數據庫設計模式

  1. 對於需要添加註釋 「列記」,所以例如,表中的每一列:

    create table tab (id integer, A varchar(100), B varchar(200)) 
    

    將變爲:

    create table tab (id integer, A varchar(100), A_note varchar(300), B varchar(200), B_note varchar(300)) 
    
  2. 添加一個表請注意,存儲筆記...像這樣:

    create table notes (id integer, table_name varchar(100), reference_id integer, reference_column varchar(100), note varchar(300) 
    

您能否以其他方式建議我? 如果你有興趣我正在使用HsqlDB。

+0

什麼是 「注意」?用戶可以閱讀,更新,搜索嗎? – APC 2010-07-24 14:44:41

回答

2

這很大程度上取決於您的筆記稀疏程度,如果它們偶爾分散在所有表格中,那麼一個好的解決方案是讓一個包含由表格和字段名稱組成的索引的筆記表。

這會將模式中的註釋添加到僅需要維護而無需觸摸原件的一個表中。您可以使用表和字段名列上的約束來限制哪些可以有註釋。

我已經實現了一個非常成功的變體,可以將類型化標籤添加到大型會計系統。

如果單個表格令人不快,可以考慮將該模式應用於表格羣集。

單個Notes表的一大優勢是您有一張表可以搜索人們是否在按筆記內容查找。當人們在錯誤的處放置筆記時,這可能非常有用。

擴展

我讀的要求,爲每列一個注意。

在偶爾爲列中的奇數單獨行值(即:附加註釋的Excel模型)偶爾存儲可選註釋(或標記)的情況下,則可以通過添加常規整數鍵來擴展我的模型你的行。這實際上是我第一次使用的模型。我簡化了它的答案,但後來意識到可能的要求是誤導。

+0

儘管我認爲這是一個很好的解決方案,但是我必須使用HSQLDB,所以我想介紹一下這個解決方案:添加一個用基數==列數定義爲VARCHAR ARRAY的NOTES列。所以我將訪問存儲在數據庫元數據中的Column Ordinal Position以訪問與列相關的註釋。你怎麼看? – Neo1975 2010-07-23 07:23:23

+0

對於使用HSQLDB的數組特性來提供索引的層次有一個表面上的呼籲,我將不得不花費相當多的時間來研究它,以確保它是安全的(對不起,沒有那個時間,雖然這很吸引人)。 我的直接感覺是它不起作用 - 表和列名稱的*組合*表示列。我還認爲,使用列序號作爲索引非常容易受到影響 - 如果刪除列,會發生什麼情況?是的,我知道重命名行也會打破索引,但安全地修復會更容易。 – 2010-07-24 00:40:52

1

是的,單獨的表是要走的路。

我會爲每個實際的表執行類似cmnt_table或notes_table的註釋表。使用與主表相同的ID,並且在查詢中進行連接將很容易。

1

您應該將額外的數據存儲在同一個表中。這是一對一的關係,你不會從分裂中受益,而只是複雜性。

1

你不說這些筆記是用於什麼。如果每個註釋通常描述列,例如名爲EXPIRY_DATE的列中有一個註釋「票證到期的日期」,則HSQLDB 2.0中內置了一個解決方案。

COMMENT ON MYTABLE.EXPRIRY_DATE是「日當票證過期」

而且你可以檢索的附註表名,使用SELECT在INFORMATION_SCHEMA表的一個列名對。

見指南:

http://hsqldb.org/doc/2.0/guide/databaseobjects-chapt.html#N10D75