我正在做一个项目,需要为业务逻辑存储 30 个不同的字段,稍后将用于为每个字段生成报告
30 个不同的字段不是一次写的,业务逻辑有这么多事务,它会是这样的:
Transaction 1, update field 1-4
Transaction 2, update field 3,5,9
Transaction 3, update field 8,12, 20-30
...
...
注意每笔交易(都属于一个业务逻辑)将更新任意数量的字段而不是按任何特定顺序。
我想知道我的数据库设计是最好的:
在 postgres 数据库中有 30 列代表这 30 个不同的字段。
以 xml 或 json 的形式存储 30 个文件,并将其存储在 postgres 的一列中。
1或2哪个更好?
如果我选择 1>:
我知道从编程角度来看更容易因为这样我不需要读取整个 xml/json 并且只更新几个字段然后写回数据库,我只能更新每个事务所需的几列。
如果我选择 2>:
我可能会将该表通用地重用于其他东西,因为 blob 列中的内容只是 xml。但是,仅仅因为它有一个存储 xml 的 blob 列就使用泛型表来存储与业务逻辑完全无关的东西是错误的吗?这确实有可能节省创建几个新表的工作量。但是这种重用表的通用想法在 RDBMS 中是错误的吗?
另外,通过选择 2>,我似乎能够处理潜在的变化,比如更改某些字段/添加更多字段?至少看起来我不需要更改数据库表。但我仍然需要更改 c++ 和 c# 代码以在内部处理更改,不确定这是否有任何优势。
我在数据库设计方面没有足够的经验,所以我无法决定选择哪一个。任何输入表示赞赏。
注意,我很有可能暂时不需要对这 30 个列进行索引或搜索,如果我选择 2>,则会在额外的列上创建主键。但我不确定以后是否需要我根据这些列/字段中的任何一个进行搜索。
基本上我的所有字段都是从需求文档中预定义的,它们通常喜欢简单的字段:
field1: value(max len 10)
field2: value(max len 20)
...
field20: value((max len 2)
没有嵌套字段。是否值得为每个字段创建 20 列(有些是字符串,如日期/时间,有些是字符串,有些是整数等)。
2> 将不同的业务逻辑放在共享表中是一个糟糕的设计理念吗?如果因为它们共享相同的结构而仅将其放入共享表中?例如,它们都有日期时间列、主键和内部具有不同业务逻辑的 xml 列?这样我们就可以安全地创建新表……这种节省的努力值得吗?