2012-05-25 57 views
1

目前有一個表..並需要開始添加新的數據列。 並非每個記錄(甚至在添加新數據列後都會添加新數據)都會有數據。所以我想知道這是否更適合新表,因爲它實際上是一些數據行的擴展,並不適用於每一行。數據庫設計:新表與新列

換句話說,因爲這些新的數據元素會有很多未使用的列,所以它似乎更適合新的表格?

EDIT(估計這是太有限)

第一個表是的頁面訪問量(目前爲200萬條記錄) 紀錄 - ID - IP地址 - 次瀏覽 - created_at時間戳 - 日期

每一個IP地址,記錄每天可發 - 連續和瀏覽量都加入到每天

額外的時間意見字段將用於原點跟蹤(即谷歌分析源/中/活動)

不是每次訪問都會有這樣的信息。 我會假設大約10%的行將有數據(因爲它通常只在第一次訪問時被歸因於)

數據的主要用途是歸因於人們來自哪裏。這可能會被清盤更加頻繁地使用(當時似乎借給自己的單表)

欣賞反饋 - 可以添加更多,如果需要

+1

您應該提供一些關於數據性質以及如何使用它的更多信息。你會檢索這個數據或過濾嗎?我們在談論多少個領域?田地有多大?你現在有多少行,需要多少行? – JNK

+0

您還應該考慮在[dba.se]上提出這個問題 - 數據庫設計問題就是我們的麪包和黃油! – JNK

回答

4

稀疏定義新列的基本規則是這樣的(從更嚴格的規範化規則簡化)。

如果屬性/列取決於整個主鍵而沒有其他屬性,它就屬於表中。

如果它取決於除主鍵之外或除主鍵以外的其它屬性,則它屬於其他位置,它所屬的表應該與當前表有關係。

例如,你的名字取決於你的SSN,所以如果SSN是主鍵,你的名字就屬於該表。你的車或電話號碼確實是而不是完全取決於你的SSN(因爲你可能有多個車或手機,所以它會在不同的表中)(您的主號電話號碼可能會在第一個表中)

如果您真的想了解數據庫設計,請忘記select命令的語法並查看規範化。我對他人的建議是,全部數據庫模式應該從3NF開始,並且只有在性能需要時纔會恢復。

然後,只有當你瞭解(並減輕)這樣做的固有問題。

+1

感謝所有的輸入 - 在閱讀本主題和其他在http://dba.stackexchange.com/questions/18399/database-design-new-table-versus-new-columns 我想出了一個創建訪客表和訪問表的不同模式。訪問表會跟蹤SOURCE信息和訪問類型。 原始頁面視圖然後鏈接到訪問者和(如適用)訪問,因爲並非每個頁面視圖都會記錄訪問 – cgmckeever