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

mkshixfv  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(357)

我听说数据库设计中的名值对模型是一种反模式。实际上,您有一个包含两列的表。一列称为“name”,另一列称为“value”。假设您正在管理不同区域的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')

另一种解决方案是使用连接。这将消除重复并允许引用完整性。但它变得很麻烦:
表\u aws有\u多个表\u状态,其中有\u多个表\u凭证,其中有列access\u key、user、pass。这将删除重复,但可以想象嵌套联接的数量可能会增加。
给出我唯一的用例,名称-值对模型仍然是反模式还是合适的?

siv3szwd

siv3szwd1#

您考虑的反模式可能是实体属性值。您正在描述一个简单的“哈希表”。如果这个表中只有一百行,甚至一千行,就没有问题。
但是。。。你真的在描述eav,只是你把它弄得更混乱了。

aws.new_york.access_key

是真的吗 aws.new_york 作为“实体”和“访问密钥”作为“属性”。
通常eav表应该是3列,带有 PRIMARY KEY(entity, attribute) 按这个顺序。
如果您的目标只是为“配置”创建一个存储库,那么您不太可能进行查询,从而找到eav崩溃的地方。
所以。。。在作出判断之前,让我们看看您将如何处理数据集。

相关问题