【发布时间】: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