2013-05-22 17 views
0

我想在mysql db中存儲一個項目的類別。我應該爲這個字段使用哪種數據類型。請注意,一個項目可以有多個類別。快速(髒?不確定)方法是按位使用INT。但INT是32位長,這意味着我最多隻能爲一個項目分配32個類別。目前,這不是問題。但是我不知道該怎麼做,比如說,在某一天我必須這樣做。有什麼建議麼?什麼類型應該用於多個類別的字段在mysql中

+0

你應該有一個不同的表來存儲項目類別關係。 – 1615903

+0

你需要一個多對多的關係,如果你不能這樣做,你可以改變從'Int'到'BIGINT' => 64個類別的按位字段 – Stephan

+0

@ user1615903所以我需要一個新的tbl來存儲這種關係。結構是什麼,我應該爲所有可能的類別創建字段作爲項目的屬性嗎? – zoujyjs

回答

1

類似的東西

table item 
field item_id (int) => PK 
item_name 
etc 

table category 
field cat_id (int) => PK 
field cat_name 
etc 

//a table to manage many to many relationship 
table item_category 
field item_id (int) => FK to item.item_id 
field cat_id (int) => FK to category.cat_id 
//PK is item_id, cat_id 
0

冒着downvote,但我的建議是 - 不要使用關係數據庫來存儲這種類型的「靈活」結構的;不是你不能 - 你可以(如拉斐爾的回答);但你必須在多個表中處理可怕的JOIN,以顯示單個頁面。

  • 是否要按類別過濾?
  • 是否要按類別搜索?
  • 你想顯示「最受歡迎」類別嗎?
  • 你想創建一個「標籤雲」嗎?

對於所有這些,你需要一個鍵/值存儲 - 對這種東西最優化的數據庫。 redis,memcached,甚至couchbase都可以用於此。

的想法很簡單:

  1. 您存儲在關係數據庫中的項目的顯着特性。這是不會改變的東西;例如,每件商品都會有一個名稱,一個股票代碼,一個唯一標識符等。

  2. 對於任何其他屬性,可以靈活的每種類型的項目(例如,襯衫會有尺寸,顏色;計算機將具有硬盤類型,內存等),將它們存儲爲鍵/值對。您將每個鍵值對通過其唯一ID鏈接到該項目。

由於第k/V數據存儲被用於靈活的數據搜索和在它們之間的快速查詢優化,則不是由可以存儲每個產品屬性的數量或類型的限制。您可以添加/刪除/重置所有內容,而不必打擾核心數據庫結構。

這種範例很常見,所以一些數據庫甚至爲此提供了本機類型。例如,postgresql有一個JSON column type

相關問題