【问题标题】:Will referencing multiple columns in foreign keys affect performance in SQL server?在外键中引用多个列会影响 SQL Server 的性能吗?
【发布时间】:2019-08-20 09:24:56
【问题描述】:

所以我正在创建一个数据库,其中我有一个包含多个列的父表,我希望在子表中引用多个列。我想在父表中的列和子表中的列之间创建关系。例如,我将其传递给 SQL 父表:

CREATE TABLE Parent (
    val1 int NOT NULL,
    val2 int NOT NULL,
    val3 int NOT NULL,
    val4 int NOT NULL,
    PRIMARY KEY (val1)
);

子表:

CREATE TABLE Child (
    val1 int NOT NULL,
    val2 int,
    val3 int,
    val4 int,
    PRIMARY KEY(val1)
);

关系

ALTER TABLE Parent ADD FOREIGN KEY (val1, Val2, Val3) REFERENCES Parent(val1, Val2, Val3).

根据我上面的例子,我想知道这种外键是否可以接受? 像这样创建外键会影响查询性能吗?

感谢您的知识分享。

提前致谢

【问题讨论】:

  • 不会创建外键,因为外键只能引用主键中的列。而val2val3 不是主键的一部分,因此它们不能是外键。
  • 你的意思是写alter table CHILD ..

标签: sql sql-server-2012 sqlperformance


【解决方案1】:

主键应该用于外键关系。所以,使用:

CREATE TABLE Parent (
    val1 int PRIMARY KEY,
    val2 int NOT NULL,
    val3 int NOT NULL,
    val4 int NOT NULL
);

子表:

CREATE TABLE Child (
    val1 int PRIMARY KEY,
    parent_val1 int,
    CONSTRAINT fk_child_parent FOREIGN KEY (parent_val1) REFERENCES parent(val1)
);

如果您想要其他列的值,请在查询中JOIN 它们。

【讨论】:

    猜你喜欢
    • 2011-01-20
    • 2019-05-13
    • 1970-01-01
    • 2012-07-01
    • 2015-01-10
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    相关资源
    最近更新 更多