【问题标题】:What's the best approach to designing a database that keeps track of orders and wish lists?设计跟踪订单和愿望清单的数据库的最佳方法是什么?
【发布时间】:2010-09-09 22:06:36
【问题描述】:

描述这种情况的最佳方式是使用示例。考虑 Netflix:他们是 将他们的订单(他们邮寄的 DVD)存储在与其成员列表不同的表中(不是成员表,而是成员和电影的连接表——每个成员创建的电影列表),或是否通过在同一张表的同一行中使用附加信息来区分订单?

对于那些不熟悉 Netflix 的人来说,想象一下一个可以让您创建电影愿望清单的服务。该愿望清单随后会逐步发送给您,例如一次两部电影。

我想使用 MySQL 数据库实现类似的想法,但我不确定是否创建两个表(一个用于订单,一个用于列表)并将项目从列表表动态移动到订单表(这个过程应该基于会员退回的物品是半自动的,在发送新物品之前,将检查带有一些控件的表格,以查看用户是否仍然符合条件/没有超过他的每月限制)...

想法和利弊会很棒!

编辑:我目前的架构是:member、items、members_items,我要问的是是将订单存储在与 members_items 相同的表中还是创建单独的表。

【问题讨论】:

    标签: mysql database-design


    【解决方案1】:

    将数据从一个数据库表移动到另一个以更改其状态是一种不好的做法。在 RDBMS 中,您可以使用主键和外键约束将一个表中的行与其他表中的其他行关联起来。

    至于您的示例,我看到大约四个表只是为了开始。与电影租赁的鼻祖 Netflix 相比,这与现实相去甚远。请记住这一点。

    1. 一个 User 表来容纳您的成员。
    2. 电影表,了解所有可用电影。
    3. WishlistQueue 表在用户和电影之间具有一对多关系。
    4. OrderRental 表将用户映射到当前在家的电影。

    电影表中电影的状态可能在另一个表中,您可以在其中将用户与电影关联到 MovieStatus 或其他东西,这会使您的表数达到 6。要真正布局并正确设计它,您可以最后还有更多,但希望这种方式能让你知道从哪里开始。

    编辑:看到了您正在寻找的内容的更新。我以为你是从零开始设计的。您的问题的简单答案是:有两张桌子。愿望清单(或您拥有的 member_items)和订单(member_orders?)根本不同,所以我建议将它们分开。

    【讨论】:

    • 科里,这听起来不错...但我很难概念化订单和愿望清单之间的关系...例如,一旦电影从愿望清单变成订单,我必须将其从愿望清单中删除并将其插入订单中吗?
    • 是的,您将从 member_items 表中删除该行并在 member_orders 中插入一个新行。或者,您可以将其保留在 member_items 表中,并在订单/租金返回后等待删除这两行。这样,您就可以向用户显示他们的愿望清单中的商品是“已发货”、“在家”等(这将是 member_orders 表中的状态)。
    【解决方案2】:

    在成员表中存储订单的一个问题是每个成员的订单数量不定(0、1 或多个)。使用关系数据库执行此操作的方法是拥有两个单独的表。

    【讨论】:

    • +1 的简单答案。我和 Chris 认为,尝试将订单和愿望清单合并到一张表中是个坏主意。
    【解决方案3】:

    我觉得他们会按如下方式存储他们的电影(当然是简化的):

    表格:

    • 标题
    • 成员
    • 订购
    • Order_Has_Titles

    这样,一个对成员有外键的订单就会有一个数据透视表,因为许多订单可能有许多标题。

    当您在数据库中有多对多关系时,您需要创建一个数据透视表:

    Order_Has_Titles:
        ID (auto-inc)
        Order_FkId (int 11)
        Title_FkId (int 11)
    

    这样您就可以在每个订单中放置多部电影。

    当然,这是简化的,您将拥有许多其他组件,但在基本级别上,您可以在此处查看。

    【讨论】:

    • 弗雷德里科,我想你误解了我的意思。我的意思不是将订单和成员存储在同一个表中...我的意思是将订单和愿望清单存储在同一个表中...我已经有一个成员、项目、成员项目,我在问创建一个是否有意义新的订单表,其中 members_items 中的项目被移动成为订单......或者是否只是向 members_items 表添加其他信息并在其中创建订单
    猜你喜欢
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 2010-09-16
    • 2011-03-25
    • 1970-01-01
    相关资源
    最近更新 更多