mysql - 模型上的识别和非识别关系

标签 mysql database model relational-database mysql-workbench

我画了模型的草图,但我不知道关系(识别和非识别)是否正确,我不想继续让它过去。

如果您能看看我所做的事情,并告诉我这是否正确(或不正确),我将不胜感激。

Model of my database

最佳答案

一种产品可能包含在多个订单中;一个订单可能包含多种产品:

您的交叉引用表具有以下结构:

+-----------------+
| orders_products |
+-----------------+
| id           PK |
| orders_id    PK |
| products_id  PK |
+-----------------+

我认为自动递增的 id 字段是不必要的,除非订单可以多次包含相同的产品(这没有意义)。如果您这样做是为了记录订单上指定的每个产品的数量,则最好为每个 order_id -> Product_id 提供一个 quantity 相反。我会将该表的结构更改为:

+-----------------+
| orders_products |
+-----------------+
| orders_id    PK |
| products_id  PK |
| quantity        |
+-----------------+

一个用户可能有多个地址预设;一个预设地址只能属于一个用户:

我认为将 addresses 表连接到 orders 表不是一个好主意。如果用户删除或更新他/她的地址预设之一怎么办?删除/更改将级联到包含该地址的任何过去的订单。根据您设置级联操作的方式,这些订单记录将被完全删除,否则您将获得有关旧订单的错误信息。这是一种不适合引用完整性的情况。下订单后,为该订单指定的送货地址以后将无法更改。

您应该做的是仅使用addresses 表来存储用户拥有的地址预设列表(以便为用户生成下拉选择)。当用户提交订单时,您只需将实际的文本地址信息插入到 orders 表的“shipping_address”列中即可。


要更好地了解识别关系与非识别关系之间的区别,请参阅:

我的回答在这里:

关于mysql - 模型上的识别和非识别关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11604307/

相关文章:

ruby-on-rails - rails : Better way to create variables for views

MYSQL - 基于其他列中公共(public)值的列的 SUM

mysql - 使用 order by 和 group by 连接表

ruby-on-rails - 在 Ruby on Rails 中查找后调用模型中的方法

mysql - mariadb 中的事件时间表

mysql - MySQL是否允许使用点创建数据库?

asp.net-mvc - 保存 IEnumerable 模型

php - 如何创建一个查询来搜索同一数据库上的不同表以将用户登录到网站?

php - 设置数据库行顺序

mysql - 在 MySQL 中,我可以使用 UNION 进行 SELECT 但根据第一个查询限制第二个查询的行吗?