我有一个users
表,其结构如下:
user_id | name | email | mobile
另一个名为products
的表具有以下结构:
product_id | name | price
现在我想将愿望清单添加到我的项目中,以便user
可以将一些products
添加到他的愿望清单中(使用他最喜欢的类别。例如:添加一个名为my favorite clothes
的愿望清单类别,并将product_id = 55添加到该类别中)!
现在我有 2个选项:
1。将另一个列添加到名为user_wish_list
的用户表中,然后将序列化数据存储在该列中,如下所示:
$user_wish_list = [
'user_category_1' => ['product_id_1', 'product_id_2', ....] ;
];
并将serialize($user_wish_list)
存储在user_wish_list
列中。
2。创建2个表格如下:
tabe: wish_list_categories
user_id | category_id (PK) | category_title
和
tabe: wish_list_items
category_id (FK) | item_id | product_id (FK)
最后创建这些表之间的关系(按SQL join)
哪个选项更好?我个人认为第二一个!
我选择的原因之一是我可以使用纯SQL查询访问数据
如下所示(我不必在使用unserialize()
从数据库中获取后处理数据):
SELECT users.user_id, users.name, wish_list_categories.category_id,
FROM Orders
INNER JOIN Customers ON users.user_id = wish_list_categories.category_id
但其他优势呢?
或者让我问一个更一般的问题:当我们使用关系表而不是使用列时? (考虑one-to-one
关系)
答案 0 :(得分:1)
使用表格。通常,不要将结构化数据存储在单独的SQL值中。让表和外键生成您需要的结构。
答案 1 :(得分:0)
你的桌子应该像:
1-用户表:
user_id|user_name|Email|price
2-产品表:
product_id|product_name|category_id|price
3- products_category
category_id|category_name
4- user_wish_list表:
user_id|product_id