You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

外键替代方案咨询:book与author表的关联及统计问题

问题解答

能否建立键关系?

可以建立逻辑关联,但不适合用严格的外键约束(因为你允许book表存在author表中没有的作者)。推荐两种实用方案:

  • 给author.name加唯一索引,book.author_name加普通索引:既不限制book插入未匹配的作者,又能大幅提升连接查询的性能,同时避免author表出现重复作者名。
  • 引入author.id作为关联键:给book表新增author_id字段,外键关联author.id(设置为可空),同时保留book.author_name作为冗余字段。插入书籍时,先匹配author.name,找到对应作者就填充author_id,找不到则留空author_id、仅填充author_name。这种方式兼顾了数据规范和业务灵活性。

如何统计每位作者的书籍数量?

不管有没有建立键关系,都可以通过左连接查询实现统计,确保author表中所有作者都被统计(包括没有书籍的作者,数量显示为0):

SELECT a.name, COUNT(b.id) AS book_count
FROM author a
LEFT JOIN book b ON a.name = b.author_name
GROUP BY a.name;

如果用了author_id关联,就把连接条件改成a.id = b.author_id即可。

是否应该让两张表完全独立?

不建议完全独立。完全独立会导致:

  • 查询性能差:每次统计都需要全表扫描并连接,数据量大时效率极低。
  • 数据一致性风险:比如author表中作者名称修改后,book表中旧名称的记录无法同步,会导致统计结果错误。

内容的提问来源于stack exchange,提问作者Coder Sam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 14:00:58