在我的 Web 应用程序中,用户可以定义文档并给它们一个唯一的名称来标识该文档,以及一个人类用来引用该文档的友好名称。以下面的表模式为例:
| id | name | friendly_name |
-----------------------------------------------
| 2 | invoice-2 | Invoice 2 |
在此示例中,我使用id
列作为主键,这是一个自动递增的数字。由于文档 ( name
) 已经有一个自然 ID,我也可以这样做:
| name | friendly_name |
--------------------------------------
| invoice-2 | Invoice 2 |
在本例中,name
是文档的主键。我们已经消除了该id
字段,因为它本质上只是 的副本,因为表格中的每个文档无论如何name
都必须具有唯一性。name
这也意味着当我从外键关系中引用文档时,我必须调用它document_name
而不是document_id
.
这方面的最佳做法是什么?从理论上讲,我完全可以将 aVARCHAR
用作主键,但它是否有任何缺点,例如性能开销?