Ric*_*nop 8 mysql database schema database-design
假设我需要一个带有帐号ID的简单表,而不需要其他信息.有两种方法可以做到:
id varchar(255) PRIMARY KEY
Run Code Online (Sandbox Code Playgroud)
或者添加数字主键:
id int PRIMARY KEY
accountId varchar(255) UNIQUE NOT NULL
Run Code Online (Sandbox Code Playgroud)
这两种方法有哪些优点/缺点,您可以选择哪种方法?为什么?
第一个解决方案对可维护性有什么影响(如果我们需要更改单行的id)和性能?
这归结为数据库世界中的替代关键与自然关键争论.例如,请参见此处,此处和此处有关该主题的文本.我认为这两个选项都是有效的,但在这种情况下,我会选择AccountID
自然键(假设AccountID
每个帐户都是唯一的,不会为空,也不会有变化),因为这意味着开销更少.在这种情况下,我没有看到代理键的附加值.
自然键:
代理键: