繁体   English   中英

如何在关系数据库中存储原始数据的可编辑副本?

[英]How to store editable copies of original data in a relational database?

假设我有两个实体: CompanyOrder

公司:

Id
Name
Phone

命令:

Id
CompanyId
Name
TotalAmount

我简化了这些实体,在实际项目中它们更大。

在我的应用程序中,我有一个公司视图,我可以在其中进行基本的 CRUD 操作。 订单也是如此。

当我创建订单时,我必须从我的数据库中选择公司。 问题是我必须允许用户修改每个订单的公司数据,因此只能针对特定订单进行修改

我有 2 个解决方案:

第一个解决方案:创建一个单独的表 OrderCompany,我可以在其中存储每个订单的公司数据副本。 在这种情况下,我可以编辑副本,它不会影响原始公司,但我有疑问,因为它将是 Contacts 表的完整副本,只有一个附加字段 - OrderId。

第二种解决方案:将公司的副本直接存储在 Companies 表中,并在此表中添加 OrderId。 原始公司将存储为 OrderId = null,副本 OrderId 将被分配。 在这种情况下,我没有像第一个解决方案那样有 2 个几乎相同的表,但我不确定将原件和副本存储在同一个表中是个好主意。

您认为这两种解决方案哪个更好? 也许有更好的方法?

我怀疑你混淆了一些不同的概念。 “公司”不应该改变。 然而,公司可能有一些东西——比如“联系人”——确实会改变。

所以,我想你想要一个 model 你有:

  • companies ,其中包含公司的基本信息,例如公司companyid和公司名称等。 此信息不会更改(或至少不会按订单更改)。 公司也会有一个默认的“联系人”。
  • companyContacts ,这将是公司中的联系人。 这将有一个companyId ,然后是附加信息。 不同的联系人可能用于不同的订单。
  • 具有companyContactIdorders

然后,订单将分配给一家公司和公司内的特定联系人。 可以根据需要创建新的联系信息。

我想我们可以用你的第一种方法 go 因为公司表中的任何更改都不会花费 OrderCompany 表中的任何更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM