在列中创建关系表或存储序列化数据?

时间:2018-05-06 04:53:22

标签: php sql database foreign-keys relationship

我有一个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关系)

2 个答案:

答案 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