外键的命名约定

zen*_*nna 5 sql database database-design naming-conventions

当(在mysql中)建立表之间的关系时,我遇到了命名困境。

例如,如果我正在创建一个网站,其中的项目可以由多个用户创建,也可以由多个用户读取,为了链接问题和用户表,我可能需要两个表。

**project_authors**
questionId
userId
Run Code Online (Sandbox Code Playgroud)

**project_bidders**
questionId
userId
Run Code Online (Sandbox Code Playgroud)

这里的问题是两个表看起来相同,但不包括表名。可能更有用的表示是

project_authors
questionId
authorId
Run Code Online (Sandbox Code Playgroud)

project_bidders
questionId
bidderID
Run Code Online (Sandbox Code Playgroud)

现在的问题是,authorId 和 readerId 实际上只是 userId,而名称并没有反映这一点,并且可能会误导性地表明authorId 和 bidderId 本身是唯一且不同的。

我确信我的示例会有很多漏洞,但我最近经常遇到这个问题,所以我的问题是你使用什么方法?

S.L*_*ott 6

author_userID和有什么问题bidder_userID吗?

人们扮演角色,这始终是一个困难的设计。您需要反映角色以及扮演该角色的底层对象。

  • 您不会说“loop_array_index_integer”,因为一个外键没有两个角色。“loop_array_index_integer”可以拼写为“i”而不会产生歧义,因为类型(整数)是显而易见的。通过数据库定义,类型(用户 ID)和限定角色(作者或投标人)并不明显。 (3认同)