我正在創建一個Facebook網絡應用程序,其功能與約會網站類似,可讓用戶在匹配的用戶中提供有關自己的信息以及有關其偏好的信息。針對與人匹配的網站的數據庫設計
我創建這個數據庫,心裏有以下設計:
- 成員表:包含有關使用他們的FB ID作爲主鍵的用戶的信息。
- 首選項表:包含有關用戶所需首選項的信息。
將會有大約20個字段,用戶可以指定偏好,但所有這些字段都是可選的。我不確定構建我的「喜好」表和我的最佳方式目前有兩種思路:
解決方案1:使用Facebook ID的外鍵,並有可以匹配的每個字段的新列上。我可以看到的一個問題是,數據庫中會有大量「空」值用於沒有指定值的字段。
- 數據庫中的「空」值是否佔用空間或導致其他問題?
解決方案2:使用Facebook ID的外鍵了,但在接下來的兩列使用鍵值對的方法 - 這樣一列將包含一個ID爲用戶偏好和其他將包含它的價值。對於每個用戶的偏好,我會有一個結構記錄:「用戶ID」 - 「偏好ID」 - 「值」。
- 問題,這是有價值的,在「值」列的類型將取決於「偏愛ID」的內容欄
我的問題:
- 哪種方法更好?
- 這種Web應用程序是否有標準的模式解決方案?
非常有幫助的回覆喬爾 - 我不知道我的第二個解決方案有一個名字!爲什麼避免增加一個表格?我不知道如何在表中指定解碼邏輯 - 在我的源代碼中編寫函數庫以進行解碼有什麼問題嗎?最後,最後一點是否意味着在第一個解決方案中添加新的首選項需要添加一個新的列,但在第二個解決方案中只需要插入一個新的行?再次感謝。 – user1058210 2012-07-27 13:43:20
@ user1058210 - 這不是添加了一個避免進一步表。避免的是EAV(entity-attribute-value)。它被一些人所避免,因爲它很容易被壞的使用,並被別人教導,因爲他們被教導說「EAV是邪惡的」。解碼邏輯將需要內置到庫函數中。表驅動來自於使用新/第三表中的代碼,它告訴你的庫函數需要哪種類型的解碼。關於最後一點 - 你是對的,那就是我的意思。 – 2012-07-27 18:42:12