0

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

4

2 回答 2

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
于 2013-05-22T08:39:48.973 回答
0

冒着投反对票的风险,但我的建议是——不要使用关系数据库来存储这种类型的“灵活”结构;并不是说您不能-您可以(如拉斐尔的回答);但是您必须处理JOIN多个表中的 monstrous 才能显示单个页面。

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

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

这个想法很简单:

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

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

由于 k/v 数据存储针对灵活的数据搜索和跨它们的快速查询进行了优化,因此您不受可以为每个产品存储的属性的数量或类型的限制。您可以随心所欲地添加/删除/重置所有内容,而无需干扰您的核心数据库结构。

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

于 2013-05-22T09:19:46.567 回答