【问题标题】:Proper way to create composite PK创建复合PK的正确方法
【发布时间】:2013-05-02 21:35:27
【问题描述】:

据我所知,有两种创建复合 PK 的方法,但不知道区别或哪种方法好:

CREATE TABLE AppUsers
(
Id int NOT NULL,
Username varchar(20) NOT NULL,
LastName varchar(100),
FirstName varchar(100),
PRIMARY KEY (Id, Username)
)

VS

CREATE TABLE AppUsers
(
Id int NOT NULL,
Username varchar(20) NOT NULL,
LastName varchar(100),
FirstName varchar(100),
CONSTRAINT pk_AppUsers PRIMARY KEY (Id, Username)
)

【问题讨论】:

    标签: mysql database-design primary-key


    【解决方案1】:

    规格:

    根据这个http://dev.mysql.com/doc/refman/5.0/en/create-table.html 和这个http://dev.mysql.com/doc/refman/5.0/en/alter-table.htmlCONSTRAINT 关键字对于PRIMARY KEY 是可选的。

    最佳实践:

    我想说,就可读性而言,请使用您喜欢的那个。不过,我倾向于限制多余的字母,类似于使用JOIN 而不是INNER JOIN

    【讨论】:

    • 完全正确,发布问题后才意识到。除此之外,我还发现使用 CONSTRAINT 关键字将使您的代码也可以在 SQL 服务器和 Oracle 上运行(以防万一有人有兴趣通过不同的 DBMS 使用相同的模式)
    • 我认为oracle也接受主键,没有约束词
    • CONSTRAINT 语法允许您控制约束的名称。当错误消息包含违反约束的名称时,这可能很有用。如果您浏览元数据(很少这样做),它也很有用。
    • 感谢@WalterMitty。在主键的上下文中怎么办?你能说出它的名字吗?我以为主键的名字总是“PRIMARY”
    • 我不确定。我认为 DBMS 为它分配了某种名称。该名称指示有问题的表以及指示主键约束。如果这个名字足够好,那么我之前的评论就没有实际意义了。
    猜你喜欢
    • 2020-12-27
    • 1970-01-01
    • 2017-11-01
    • 2021-03-02
    • 1970-01-01
    • 2021-06-24
    • 2017-10-08
    • 2015-06-17
    • 2020-09-12
    相关资源
    最近更新 更多