我想我应该算作数据库新手,所以把问题看成新手问题。我目前创建了一个表,其中包含许多主机的环境变量,如下所示:
create table envs (
host varchar(255),
envname varchar(255),
envvalue varchar(8192),
PRIMARY KEY(host, envname)
);
非常简单,一张表包含我需要的所有数据。常见操作是获取给定主机的所有环境变量,另一个是获取给定主机的给定环境变量,第三个示例操作是为所有主机获取给定环境变量并列出重复项。
预计性能不会成为问题,它可能是数十台主机,每台主机数十个变量,平均每秒最多 1 个查询。
现在我读到复合主键不一定是个好主意。以上用例是否如此?如果是这样,我应该如何更改数据库设计?如果不是,上述单表数据库是否适合我上面列出的用途?
最佳答案
我没有发现主键有问题。主键的语义是唯一标识键值的非键属性值。正如我假设的那样,对于一台主机和一个 envname,至多有一个 envvalue,主键非常有意义。
可能有些人反对复合主键,因为他们害怕性能问题。但是,性能方面的考虑永远不会影响主键的选择。许多数据库系统自动为主键创建索引结构;此索引结构的选择会影响性能。但是,此选择大部分可以手动更改,如果您确实遇到性能问题,应稍后再进行更改。
您的单表设计和主键选择没问题。
关于mysql - 简单的MySQL表设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13342783/