数据库存储列表(List)/数组(Array)型数据的两种方式
方式一:
把各項列表數據拼接成一個字符串(用某個符號作為分隔符)存儲在數據庫的一個字段中
如:存儲衣服尺碼,每件衣服有不同的尺寸,可在數據庫中存儲如 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,主鍵
| bluecyan |
| Vbluecyan |
表 product
product_id 商品id,主鍵
product_name 商品名
| 1000 | 蘋果 |
| 1001 | 手機 |
| 1002 | 衣服 |
| 1003 | 電腦 |
表 product_list
id 自增主鍵
user_id 用戶id,外鍵
product_id 商品id,外鍵
| 1 | Vbluecyan | 1000 |
| 2 | bluecyan | 1001 |
| 3 | Vbluecyan | 1001 |
| 4 | bluecyan | 1002 |
| 5 | bluecyan | 1003 |
實際上,在這個案例中,用戶對商品是一對多關系,商品對用戶也是一對多關系,用戶和商品在收藏這個關系上是多對多的關系。
總結
兩種方式各有優劣,在實際開發中要根據實際情況決定選擇那種方式。方式一適合列表數據可能的取值較少的情況;如果列表數據可能的取值較多或者經常變化,采用方式二會更好。
總結
以上是生活随笔為你收集整理的数据库存储列表(List)/数组(Array)型数据的两种方式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Intel无线网卡Windows10中不
- 下一篇: Day517.索引优化与查询优化 -my