【问题标题】:MySQL: many joins or extra foreign key?MySQL:许多连接或额外的外键?
【发布时间】:2011-06-28 07:46:26
【问题描述】:

我有以下表结构:

CREATE TABLE pilot_groups (
id INT PK,
name VARCHAR(50),
....
);

CREATE TABLE pilot_group_leaders (
id INT PK,
pilot_group_id INT FK,
name VARCHAR(50),
address TEXT,
....
);

CREATE TABLE members (
id INT PK,
pilot_group_leader_id INT FK,
country_id INT FK,
type VARCHAR(50),
name VARCHAR(50),
....
);

CREATE TABLE farms (
id INT PK,
member_id INT FK,
....
);

所以我必须生成一份报告并显示按 pilot_group 分组的所有 农场。要使用当前结构,我必须进行 3 次连接,在我看来这不是非常优化和高效的。我正在考虑在 farms 表中放置额外的外键,但因此我会重复。网站/应用程序的目的主要是生成报告和输入数据。哪种方法可能更好?

【问题讨论】:

    标签: sql mysql normalization


    【解决方案1】:

    完全删除“id”键并使用自然主键可能会有很大帮助。但是,说这会花费我的业力:-)

    【讨论】:

    • 我会支持任何提倡自然键的人。在这种情况下,农场的名称(?未显示)和试验组的名称可能是候选者。减少任意 id 号的连接数通常会带来更快的 SELECT 性能。
    【解决方案2】:

    坚持你当前的版本,不要重复外键。

    您应该能够摆脱表格上的一些索引。

    如果没有损坏,请不要修复它。您是否真的有性能问题,或者您是否已经预料到了?

    【讨论】:

    • 我没有性能问题。我仍处于设计阶段,所以只是想找出我可能遇到的任何陷阱。
    • 那我真的不认为这是必需的。只要坚持基础,当你遇到性能问题时,想想这样的重大变化。这应该是您最后的选择之一。
    猜你喜欢
    • 1970-01-01
    • 2017-07-31
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多