我和我的朋友正在建立一個網站,並有重大分歧。該網站的核心是一個關於「人」的評論數據庫。基本上人們可以輸入評論,他們可以輸入評論的人。然後觀衆可以在數據庫中搜索評論中的單詞或人名的部分內容。它完全由用戶生成。例如,如果有人想發表對某人姓名的拼寫錯誤版本的評論,他們可以,而且沒關係。因此,可能會有多個不同人物的拼寫被列爲幾個不同的條目(一些中間名,一些暱稱,一些拼寫錯誤等),但這一切都可以。我們不在乎人們是否對隨機的人或想象中的人發表評論。不必要的標準化
無論如何,問題是關於我們如何構建數據庫。現在,它只是一個表註釋ID作爲主鍵,再有就是對「人」的註釋字段約爲:
評論ID - 評論 - 人
1 - 「他很奇怪」 - 約翰·史密斯
2 - 「臭丫頭」 - 珍妮
3 - 「同性戀」 - 約翰·史密斯
4 - 「欠我$ 20」 - Jennyyyyyyyyy
一切工作正常。使用數據庫,我可以創建列出特定「人員」的所有「評論」的頁面。但是,他着迷於數據庫沒有正常化。我讀了正常化,並瞭解到他錯了。表格IS目前已經規範化,因爲評論ID是唯一的並且決定了'評論'和'人員'。現在他堅持認爲'人'應該擁有自己的桌子,因爲這是'事情'。我不認爲這是必要的,因爲即使'人'真的是更大的容器(一個'人'可以對他們有很多'評論'),數據庫似乎運行得很好,'人'是屬性評論ID。我針對不同的SQL選擇使用了各種PHP調用,使其在輸出中以神奇的方式顯得更加複雜,用戶可以通過不同的方式搜索並查看結果,但實際上,安裝非常簡單。我現在讓用戶用豎起大拇指向下排列評論,並在同一張桌子上保留一個「分數」作爲另一個字段。
我覺得目前沒有必要爲獨特的「人物」條目設置單獨的表格,因爲「人物」沒有自己的「分數」或他們自己的任何屬性。只有評論可以。我的朋友是如此堅持以至於有效率。最後,我說:「好的,如果你想要我創建一個單獨的表並讓'person'成爲它自己的字段,那麼第二個字段是什麼?因爲如果一個表只有一列,那麼看起來毫無意義。我們以後可能會創造一個需要給予'人'它自己的桌子,但我們可以處理那個。「然後他說,字符串不能是主鍵,並且我們會將當前表中的'persons'轉換爲數字,並且這些數字將成爲新'person'表中的主鍵。對我而言,這看起來沒有必要,它會使當前的表更難以閱讀。他還認爲,以後不可能創建第二張表格,而且我們現在需要預測我們以後可能需要它。
誰是對的?
我同意弗蘭基/你的朋友。以後做這種改變雖然不是不可能,但是很尷尬,容易出錯。 – Jaydee 2010-09-10 15:41:26
任何人都可以解釋如何爲任何功能依賴性的左側沒有出現的屬性創建代理鍵來標準化數據庫嗎?正如OP所說,Person決定什麼都不會(並且永遠不會)。你會爲名爲'Stuff'的屬性提供相同的建議嗎?這裏可能有一個正常化問題,但它不涉及Person。 – NealB 2010-09-10 20:47:37
@NealB我作爲一名教師的經歷以及提問的方式讓我相信OP是有偏見的。簡單的事實是,該字段稱爲人而不是文本,與IMO相關。 – Frankie 2010-09-10 22:03:24