我有一个名为投资者的表,其主键为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/