mysql - 真的有必要在此查询中创建外键吗?

标签 mysql join foreign-keys entity-relationship

我有一个名为投资者的表,其主键为ID。我还有名为“Users Login_Logs”和“Accounts”的附加表。所有这些表都包含外键investor_id。投资者和用户之间是一对一的关系。投资者和 Login_Logs 之间是一对多关系,投资者和 Accounts 之间也是一对多关系。我的问题是为了创建一个加载用户、Login_Logs 和 Accounts 表中包含的信息的查询 - 我是否需要将 Users id、Accounts id 和 Login_Logs id 存储在 Investors 表中?我的意思是,我是否需要在投资者表中为所有列创建外键?

最佳答案

不,外键约束不会影响连接和读取查询。它们确保子列中的值存在于引用的列中。它们用于完整性,而不是用于链接行或表。

AFAICT 在您的投资者表中记录用户 ID 是多余的,并且在投资者中记录帐户和登录日志 ID 是不切实际的。

为了能够有效地连接表,您需要在每个表中对 Investor_id 建立索引。然后,由您的查询根据需要连接表。

同时检索有关投资者的所有信息的问题是您有(多个)一对多关系。如果我们连接所有表:

SELECT *
FROM investors i
JOIN users u ON i.ID = u.investor_id
JOIN accounts a ON i.ID = a.investor_id
JOIN login_logs l ON i.ID = l.investor_id

然后,如果投资者有 2 个账户和 2 个登录日志,那么我们将得到 4 行。 SQL数据库不能嵌套相关数据。相反,您可能必须使用 3 个查询来检索有关投资者的所有信息:

SELECT *
FROM investors i
JOIN users u ON i.ID = u.investor_id

SELECT *
FROM accounts

SELECT *
FROM login_logs

然后用代码处理结果。您可以以编程方式处理上面的组合查询,但它有点复杂。

关于mysql - 真的有必要在此查询中创建外键吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31642162/

相关文章:

php - 数据未从 cakephp 中的烘焙 URL 正确插入数据库

MySQL 连接优化

r - 根据R中目标值的下限和上限连接两个数据帧

mysql - 错误代码: 1215 : Cannot add foreign key constrain MYSql

sql - 在多对一表中使用哪个外键

php - MySQL 数据库不想添加任何新记录

mysql 语法 USING 和 ON 在同一查询上

mysql - 向 mysql 表中插入 100 个递增的行

python - 在字符串列表中的最后一项之前添加 'and'

java - 在 db hibernate 中插入外键