【问题标题】:Create relational tables or store serialized data in a column?创建关系表或将序列化数据存储在列中?
【发布时间】: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


【解决方案1】:

使用表格。通常,不要将结构化数据存储在单个 SQL 值中。让表和外键生成您需要的结构。

【讨论】:

    【解决方案2】:

    你的表格应该是这样的:

    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
    

    【讨论】:

      猜你喜欢
      • 2013-11-26
      • 2016-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-19
      • 2010-11-06
      • 1970-01-01
      相关资源
      最近更新 更多