2009-01-24 65 views
2

在我的應用程序中,我有不同的類別,用戶可以將其事務處理爲。 示例:食物,購物,電影等。 我希望用戶能夠編輯這些類別並添加/刪除類別。 將此信息存儲在數據庫中的最佳方式是什麼?mySQL DB設計

  1. 包含類別和相應用戶的類別表?然後我可以查詢uid並獲取所有的類別。

  2. 用戶表瓦特/​​類別字段和由逗號單獨的類別。然後我可以查詢用戶,並將他們的類別分成一個數組,其中爆炸或沿着這些線。

  3. 或想法,我都沒有想到的。

回答

0

如果您可能將它們用作單個值(例如,只有一個類別),則不要在數據庫字段中用逗號分隔條目。

閱讀database normalization。有些情況下,你不想一路正常化,但用逗號連接不同的值不屬於這一類。

不要害怕表。數據庫通常爲此進行優化。如果速度變慢,請創建索引或使用其他優化技術。

選項1是答案。

2

選項3

A分類表 類別ID,CATEGORY_NAME等...

用戶表 用戶ID時,USER_NAME等

的交點表USER_Category

用戶ID, CATEGORYID

爲什麼?

如果你有

用戶名,類別名稱

「吉姆」, 「食品」
「喬」, 「食品」
「朱迪」, 「美容產品」

如果因爲您不再對她的交易感興趣而刪除「Judy」,那麼您也會失去「美容產品」類別。這種方式類別和用戶是分開的。

提問像「誰將大部分錢花在食物上」這樣的問題也更容易。如果用戶輸入類別,你可能會得到「食品」,「雜貨」,「外出就餐」和大量不同的類別,甚至可能會出現拼寫錯誤,如「fod」,「fooooooooooooooooood」等等。您可以根據查詢中的foodID進行選擇。

基本上現在用戶可以瀏覽類別列表,如果他們從列表中發現他們感興趣的類別,他們將在交集表中創建條目UserID,CategoryID。這減少了拼寫錯誤的可能性。如果該類別不存在,用戶可以添加它。然後,當下一個用戶查看類別時,他們將看到新條目,因此如果他們感興趣,他們可以點擊它並減少拼寫錯誤的機會。