mysql - 名称-值对模型 对于仅配置数据

标签 mysql database postgresql database-design database-agnostic

我读到数据库设计中的名称-值对模型是一种反模式。本质上你有一个包含两列的表。一列称为“名称”,另一列称为“值”。假设您正在管理不同区域的 AWS 配置。数据库结构如下:

name                                value
aws.new_york.access_key             jio4j54h
aws.new_york.site.user              john
aws.new_york.site.pass              eoiri4iiuh
aws.los_angeles.access_key          tret55464
aws.los_angeles.site.user           bob
aws.los_angeles.site.pass           rtry45yrt
aws.new_york.access_key             fgfhgf4fdg
aws.new_york.site.user              edward
aws.new_york.site.pass              45gfhgfhgf

唯一的用途是检索配置:

MyApp.config.get('aws.new_york.access_key')

另一个解决方案是使用联接。这将消除重复并允许引用完整性。但它变得很麻烦:

table_aws has_many table_states 其中 has_many table_credentials 包含列 access_key、user、pass。这确实消除了重复,但想象一下嵌套连接数量增加的潜力。

考虑到我唯一的用例,名称值对模型仍然是反模式还是合适?

最佳答案

您正在考虑的反模式可能是实体-属性-值。您正在描述一个简单的“哈希表”。如果这个表中只有一百行,甚至一千行,也没有问题。

但是...您确实在描述 EAV,只是您让它变得更加困惑。

    aws.new_york.access_key 

实际上是aws.new_york作为“实体”,“access_key”作为“属性”。

通常 EAV 表应为 3 列,并按此顺序包含主键(实体、属性)

如果您的目标只是一个“配置”存储库,那么您不太可能执行到达 EAV 崩溃位置的查询。

所以...在做出判断之前,让我们看看您将如何处理数据集。

关于mysql - 名称-值对模型 对于仅配置数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52999842/

相关文章:

postgresql - 是否可以将数据传递给 postgreSQL 触发器?

python - 如何清理在 django-nose 测试函数中所做的数据库更改?

php - 在 WooCommerce 中,在所有订单的运输详细信息下添加新的输入字段,仅向管理员显示

c# - C# 中 UPDATE 语句的 SQL 参数问题

mysql 使用包含变量的 mysql 查询创建 View

SQLite "COUNT(*)"被认为有害?

database - 在 SSIS 中,我如何访问运行 OLE DB 命令的结果?

mysql - 对数据库中的相似实体进行分组

sql - postgresql - 如何找出哪些词不符合 IN 条件?

php - mysql pconnect ,当它关闭连接时