mysql - 数据库关系 外键的直接引用与间接引用

标签 mysql sql foreign-keys

我的 MySql 数据库中有 3 个表,分别名为“用户”、“交易”和“销售”。现在,Users 表与 Deals 表具有一对多关系,Deals 表与 Sales 表具有一对多关系。

现在我没有在用户和销售之间设置任何直接的一对多关系(但它们已经通过外键 deal_id(Sales)-> user_id(Deals)->User 间接引用。所以如果我想搜索销售通过用户,我可以轻松地运行联接查询并通过 user_id 获取销售额。

我还可以通过将 user_id 外键放入 Sales 表中来在 User 和 Sale 之间创建直接的一对多关系。

现在从良好实践和/或性能的角度来看哪种方法更好?

最佳答案

这取决于实际关系。如果销售确实取决于交易,那么您可以从那里查找用户。例如,如果sales确实是deals的子类型,则情况就是如此。或者,如果用户因某种原因更改了交易,那么相应的促销会自动更改吗?

但是,如果 sales 是一个独立的实体,并且与 users 存在关系,那么您需要将该列包含在“sales”中。如果一次销售由许多交易组成,则尤其如此,但我认为您的数据模型是相反的。

根据你的说法,通过连接查找值听起来很合理。这会影响性能,但通过正确的索引,查询应该没问题。

关于mysql - 数据库关系 外键的直接引用与间接引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54770460/

相关文章:

每个元素都是外键的 PostgreSQL 数组

database - 甲骨文 (ORA-02270) : no matching unique or primary key for this column-list error

sql - 在 MYSQL 中使用引用

mysql - 加载数据本地 Infile SQL

转换表的SQL算法题

php - 在 php/mysql 中为我的用户上传和下载

Java Web 应用程序无法连接远程 Tomcat 8 服务器上的数据库

SQL 按列 1 "keep"按日期时间分组

php - 从 paypal 付款返回站点期间 mysql 插入查询的问题

mysql - SQL - 从那里选择即将到来的事件和一周后的所有事件