mysql - 简单的MySQL表设计

标签 mysql sql database-design entity-attribute-value

我想我应该算作数据库新手,所以把问题看成新手问题。我目前创建了一个表,其中包含许多主机的环境变量,如下所示:

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/

相关文章:

mysql - 在 MySQL 中存储 'extra' 用户数据的最佳方式?

mysql - 如何设计这个mysql数据库

mysql 获取中间字符串并在其上构建

php - SQL中的计算,如何控制它

java.sql.SQLException : ORA-00902: invalid datatype 异常

sql - 在 SQL 中,如何更新具有相似表的表?

database - 数据库如何工作?

php - 在 CMS 中插入表单 - <选项> 和页面

php - 复杂的 Mysql 数据库连接

mysql - 如何根据返回值执行不同的查询?