mysql中的多个类别字段应该使用什么类型

时间:2013-05-22 08:37:41

标签: mysql

我想在mysql db 中存储项目的类别。我应该为此字段使用什么数据类型。请注意,一个项目可以有多个类别。快速(脏?不确定)方法是按位使用INT。但INT是32位长,这意味着我最多只能为一个项目分配32个类别。现在,这不是问题。但是,如果有一天我必须这样做,我不知道该怎么办。有什么建议吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

冒险投票,但我的建议是 - 不要使用关系数据库来存储这种类型的“灵活”结构;不是你不能 - 你可以(如拉斐尔的回答);但是你必须在多个表格中处理怪异的JOIN只是为了显示一个页面。

  • 您想按类别过滤吗?
  • 您想按类别搜索吗?
  • 您想展示“最受欢迎”的类别吗?
  • 您想创建“标签云”吗?

对于所有这些,您需要一个键/值存储 - 针对此类内容优化的数据库。 redis,memcached,甚至couchbase都可以用于此。

这个想法很简单:

  1. 您可以在关系数据库中存储项目的显着属性。这是不会改变的东西;例如,每个项目都有一个名称,一个股票代码,一个唯一标识符等。

  2. 对于任何其他属性可以灵活的每种类型的项目(例如,衬衫将具有大小,颜色;计算机将具有硬盘类型,内存等),您将它们存储为键/值对。您可以通过其唯一ID将每个键值对链接到该项目。

  3. 由于k / v数据存储已针对灵活的数据搜索和跨数据的快速查询进行了优化,因此您不受可为每个产品存储的属性的数量或类型的限制。您可以添加/删除/重置您心中的所有愿望,而不必打扰您的核心数据库结构。

    这种模式很常见,因此有些数据库甚至为此提供了本机类型。例如,postgresql有一个JSON column type

相关问题