已关闭,此问题为opinion-based。目前不接受答复。
**想改善这个问题吗?**更新问题,以便editing this post可以用事实和引用来回答。
昨天关门了。
Improve this question
在设计sql表时,我们(几乎)总是添加一个通用的id
列作为主键。如果一个表已经包含一个唯一的列,我想知道我们是否应该将其指定为主键,而不使用id
列,或者仍然使用它,同时只为唯一的列添加一个unique
键索引。上面提到的任何一种方法的含义是什么?
我们最近遇到了一个例子,一个表有一个UUID被指定为主键,但是当使用mysqldump
转储数据库时,所述列导致了某些问题。上述表也有一个VARCHAR
类型的非空唯一列,因此为了解决上述问题,删除了id
列,并将唯一键列指定为主键。
这让我想知道我们是否应该一直这样做,还是只在特定情况下这样做,以及这是否会以任何方式影响该表上的操作。我想到的一些问题是:
1.会不会影响演出?如果是,如果所述表具有较少数量的记录,例如,少于一百,该怎么办?
1.作为串型列的所述唯一列可以包含任何内容。那么,通过主键-外键关系将它与另一个表连接时会导致任何问题吗?
在这方面的任何帮助都是高度赞赏的。
2条答案
按热度按时间2ekbmq321#
以下是使用现有的唯一列作为主键而不是仅为此目的添加特殊列的注意事项列表:
ne5o7dgx2#
我写的3个表中有2个是“自然的”
PRIMARY KEY
。我避免人为地将id
添加到这样的表中。以下是一些常见的模式。(
id
是AUTO_INCREMENT`)至于你的具体问题:
TEXT
和BLOB
不能被索引,前缀(例如,INDEX(ext(50))
)并不能真正解决您的问题。INSERTing
一行必须等待检查所有PRIMARY和UNIQUE键的重复,然后才能完成。其他二级密钥以“延迟”技术(使用“更改缓冲区”)插入。也就是说,最小化表中唯一键的数量有一点好处。