方式一:

把各项列表数据拼接成一个字符串(用某个符号作为分隔符)存储在数据库的一个字段中

如:存储衣服尺码,每件衣服有不同的尺寸,可在数据库中存储如 S-M-L-XL-(-是分隔符) 这样的字符串数据

为防止bug,列表数据中不应该有分隔符(若有,则在读取数据时会出错)

又或者将列表数据中的分隔符转义,如用–(两个-)做分隔符,列表数据中:1.出现的/在存储前转换为//,2.出现的-在存储前转换为/-。数据在读取前在变换回去:1.出现的/-在读取前转换为-,2.出现的//在读取前转换为/。

如(用空格划分各项数据):

原始数据:jkj/k-pp-o/k ko/-L pp–LLk
转义后的数据:jkj//k/-pp/-o//k ko///-L pp/-/-LLk
加入分隔符(–)拼接后的数据:jkj//k/-pp/-o//k–ko///-L–pp/-/-LLk–

如此,最后加入分隔符拼接时,在列表数据中就不会有–(两个-)存在了

方式二:

本质上是一种一对多的实体关系

将需要存储的一项列表数据存储在一行数据库表的记录中,属于同一列表的所有列表数据在该表某个字段(该字段专门用来标识列表)拥有同样的值,同一类型的列表存储在同一张表中。在另一个需要存储列表数据的数据库表中有一个字段用来存储标识某列表的值。

如:

用户收藏商品。在 product_list 表中,属于同一用户的所有商品收藏列表数据在 user_id 字段拥有同样的值。

下面展示了在用户 bluecyan 收藏了商品手机、衣服、电脑,用户 Vbluecyan 收藏了商品苹果、手机后各表中的数据状态。

表 user
user_id 用户id,主键

user_id
bluecyan
Vbluecyan

表 product
product_id 商品id,主键
product_name 商品名

product_idproduct_name
1000苹果
1001手机
1002衣服
1003电脑

表 product_list
id 自增主键
user_id 用户id,外键
product_id 商品id,外键

iduser_idproduct_id
1Vbluecyan1000
2bluecyan1001
3Vbluecyan1001
4bluecyan1002
5bluecyan1003

实际上,在这个案例中,用户对商品是一对多关系,商品对用户也是一对多关系,用户和商品在收藏这个关系上是多对多的关系。

总结
两种方式各有优劣,在实际开发中要根据实际情况决定选择那种方式。方式一适合列表数据可能的取值较少的情况;如果列表数据可能的取值较多或者经常变化,采用方式二会更好。

更多推荐