【发布时间】:2018-05-06 04:53:22
【问题描述】:
我有一个具有这种结构的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)
最后在这些表之间建立关系(By 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 关系)
【问题讨论】:
-
可以吗?是的。他们应该吗?不,SQL 有一个很好的数据结构来存储列表。它被称为表。
标签: php sql database foreign-keys relationship