创建关系表还是将序列化数据存储在列中?



我有一个具有以下结构的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

最新更新