sql - 在 postgresql 中以 json 格式存储数据是一种好习惯吗?
问题描述
在我的最新项目中,我存储历史餐厅订单,其中包含总价、交易增值税、订单中购买的商品、这些商品的价格等字段。
我还存储有折扣的餐厅提供的优惠、优惠中包含的项目、符合观众资格的观众。一旦获取订单或报价数据将不会被编辑或更新。
我选择将这些信息存储在 PostgreSql 中。我有一个表 Order 与 OrderTransaction 的关系,到一个 OrderItem 表关系,它本身链接到 Item 表整个订单......)和折扣值),OfferAudience,它代表
大多数查询需要加载 Order 的项目和 Offer 的所有关系。这些表并发写入的风险不高。
我是否应该以 postgre Json 格式直接在主表(订单、报价)中序列化来自这些关系的信息,以便更快地访问和简化。这也将有助于这样一个事实,例如,如果 OfferDiscount 行被删除,这不会影响 Offer 的过去数据,这些数据也将直接在其行中包含来自 OfferDiscount 的某些字段。
目前我有:
@Entity()
class Order {
@PrimaryGeneratedColumn()
public id?: number;
@Column()
public total: number;
@Column()
public discount: number;
// TODO : Serialize ?
@OneToMany(() => OrderItem, (orderItem) => orderItem.order)
public items: OrderItem[];
// TODO : Serialize ?
@OneToMany(
() => OrderTransaction,
(orderTransaction) => orderTransaction.order
)
public transactions: OrderTransaction[];
}
有人建议我将数据序列化如下,因为一旦创建订单就不可更改:
@Entity()
class Order {
@PrimaryGeneratedColumn()
public id?: number;
@Column()
public total: number;
@Column()
public discount: number;
@OneToMany(() => OrderItem, (orderItem) => orderItem.order)
public items: OrderItem[];
@Column({type: 'jsonb', array: true, nullable: true})
contentItems: object[];
@OneToMany(
() => OrderTransaction,
(orderTransaction) => orderTransaction.order
)
public transactions: OrderTransaction[];
@Column({type: 'jsonb', array: true, nullable: true})
contentTransactions: object[];
}
这样存储数据是一种好习惯吗,因为它确实会简化查询,只获取一个没有所有关系的表,并防止在关系行发生更改时丢失原始数据。
谢谢!
解决方案
不,这不是好的做法。
创建几个具有外键关系和常规数据类型的规范化表,并以这种方式存储数据。这将使 SQL 语句更简单,从而带来更好的性能。
关系数据库针对连接具有许多行的表进行了优化。
推荐阅读
- fpdi - setasign\Fpdi\FpdfTplTrait::setPageFormat(array $size, string $orientation) Laravel 5.4 和 php 7 的声明
- powershell - 如果 Else Loop 在 Powershell 清单脚本中不起作用
- python - 海上联合图上的 set_title
- c++ - 查找生成给定数字所需的最小位数
- wpf - 从 ListBoxItem 引发时,WPF 弹出窗口不会自动关闭
- excel - 导入数据覆盖下拉列表数据
- python - 如何使用 python selenium 从 html 中抓取嵌套表
- arrays - 如何在不使用 segue 的情况下将标签从 viewController 传递到另一个?
- typescript - 声明字符串枚举并使用它们的更好方法 - Typescript
- c# - 如何在文本框中键入时创建存储在数据库中的表示长文本的短词 c#