我有一个具有以下结构的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 个表,如下所示:
塔贝:wish_list_categories
user_id | category_id (PK) | category_title
和
塔贝:wish_list_items
category_id (FK) | item_id | product_id (FK)
最后在这些表之间创建关系(通过 SQL 连接)
哪个选项更好?我个人认为第二个! 我选择的原因之一是我可以使用纯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
关系)
使用表格。 通常,不要将结构化数据存储在单个 SQL 值中。 让表和外键生成所需的结构。
你的表格应该是这样的:
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