“避免冗余”对我很重要。
我想将用于配置管理的输入数据存储在关系数据库中。
我的输入数据:
- 项目名称
- linux_用户
- 数据库用户
- 数据库名称
在 95% 的所有情况下,所有属性都是相等的:
- 项目名称:foo
- linux_user: foo
- db_user:foo
- 数据库名称:foo
如果我将这些数据存储在 YAML 中,那么我可以使用变量来避免重复。
AFAIK 这在关系数据库中不起作用。
我可以将其存储在数据库中,但据我所知,我需要自己对其进行评估:
- 项目名称:foo
- linux_user:{project_name}
- db_user:{project_name}
- 数据库名称:{项目名称}
如果将其存储在关系数据库中,如何避免冗余?不幸的是,这些值并不总是相等的,只是在大多数情况下。
我使用 PostgreSQL
SQL 中没有执行此操作的内置方法。如果默认值始终为
project_name
,我可能会在其他列中允许空值,并创建一个coalesce()
用于返回默认值的视图:另一种选择是对每一列进行复杂的案例陈述:
您可以将语句隐藏
case
在函数中或使用集合返回函数和动态 SQL,因此您不需要对每个列名和可能的变量进行硬编码。如果您只需要确保在创建行时具有默认值,那么只需在插入期间在触发器中替换默认值也可能是一种选择。这样就不需要视图了。