【问题标题】:How to enforce integrity for orders?如何保证订单的完整性?
【发布时间】:2022-03-05 10:33:39
【问题描述】:

如果一个用户可以有多个地址和电话号码,是否可以设计数据库以确保数据之间的完整性?

例如:

users(id,name)
addresses(id, description, user_id -FK to users)
phones(id, description, user_id -FK to users)
orders(id,address_id -FK addresses,phone_id - FK to phones)

如何确保在订单表中不会意外插入包含user1 地址和user2 电话号码的记录?

很抱歉,如果之前有人问过这个问题,但我不知道如何搜索这种情况。

【问题讨论】:

  • 不要在订单中存储地址和电话号码?只需存储 users.id
  • 我怎么知道订单应该在哪个地址发货?
  • 这就是连接的用途。老实说,除非用户有很多地址和很多电话,否则我看不出你为什么会有单独的表格。
  • 这只是一个例子。想象一下,用户确实有很多地址和电话号码。对于每个订单,他选择一个地址和一个电话号码。如何注册订单数据以便记录用户选择的内容?
  • 地址和电话是用户的属性,而不是顺序。所以这些列必须从订单表中删除。 假设用户确实有很多地址和电话号码。 如果是,那么联结表(用户 - 地址)必须存在,并且订单必须参考此表。对于连接用户电话也是如此。 PS。可能有两个或多个用户共享相同的地址(例如,配偶)。手机也是一样。

标签: mysql database database-design e-commerce


【解决方案1】:

Orders 表在哪里?它将包含 user_idaddress_idphone_id 列。

对于数据输入,如果已知用户按订单呼叫,则 UI 会显示该用户的现有地址和电话。接单者可以快速点击它们。或者用户可以说使用不同的地址。然后 UI 会协助为该用户添加一个新地址。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    相关资源
    最近更新 更多