数据库存储列表(List)/数组(Array)型数据的两种方式
方式一:
把各項列表數(shù)據(jù)拼接成一個字符串(用某個符號作為分隔符)存儲在數(shù)據(jù)庫的一個字段中
如:存儲衣服尺碼,每件衣服有不同的尺寸,可在數(shù)據(jù)庫中存儲如 S-M-L-XL-(-是分隔符) 這樣的字符串數(shù)據(jù)
為防止bug,列表數(shù)據(jù)中不應(yīng)該有分隔符(若有,則在讀取數(shù)據(jù)時會出錯)
又或者將列表數(shù)據(jù)中的分隔符轉(zhuǎn)義,如用–(兩個-)做分隔符,列表數(shù)據(jù)中:1.出現(xiàn)的/在存儲前轉(zhuǎn)換為//,2.出現(xiàn)的-在存儲前轉(zhuǎn)換為/-。數(shù)據(jù)在讀取前在變換回去:1.出現(xiàn)的/-在讀取前轉(zhuǎn)換為-,2.出現(xiàn)的//在讀取前轉(zhuǎn)換為/。
如(用空格劃分各項數(shù)據(jù)):
原始數(shù)據(jù):jkj/k-pp-o/k ko/-L pp–LLk
轉(zhuǎn)義后的數(shù)據(jù):jkj//k/-pp/-o//k ko///-L pp/-/-LLk
加入分隔符(–)拼接后的數(shù)據(jù):jkj//k/-pp/-o//k–ko///-L–pp/-/-LLk–
如此,最后加入分隔符拼接時,在列表數(shù)據(jù)中就不會有–(兩個-)存在了
方式二:
本質(zhì)上是一種一對多的實體關(guān)系
將需要存儲的一項列表數(shù)據(jù)存儲在一行數(shù)據(jù)庫表的記錄中,屬于同一列表的所有列表數(shù)據(jù)在該表某個字段(該字段專門用來標識列表)擁有同樣的值,同一類型的列表存儲在同一張表中。在另一個需要存儲列表數(shù)據(jù)的數(shù)據(jù)庫表中有一個字段用來存儲標識某列表的值。
如:
用戶收藏商品。在 product_list 表中,屬于同一用戶的所有商品收藏列表數(shù)據(jù)在 user_id 字段擁有同樣的值。
下面展示了在用戶 bluecyan 收藏了商品手機、衣服、電腦,用戶 Vbluecyan 收藏了商品蘋果、手機后各表中的數(shù)據(jù)狀態(tài)。
表 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 |
實際上,在這個案例中,用戶對商品是一對多關(guān)系,商品對用戶也是一對多關(guān)系,用戶和商品在收藏這個關(guān)系上是多對多的關(guān)系。
總結(jié)
兩種方式各有優(yōu)劣,在實際開發(fā)中要根據(jù)實際情況決定選擇那種方式。方式一適合列表數(shù)據(jù)可能的取值較少的情況;如果列表數(shù)據(jù)可能的取值較多或者經(jīng)常變化,采用方式二會更好。
總結(jié)
以上是生活随笔為你收集整理的数据库存储列表(List)/数组(Array)型数据的两种方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Intel无线网卡Windows10中不
- 下一篇: 安卓硬件模拟大师_安卓模拟器电脑版下载有