[英]How to store editable copies of original data in a relational database?
假设我有两个实体: Company和Order 。
公司:
Id
Name
Phone
命令:
Id
CompanyId
Name
TotalAmount
我简化了这些实体,在实际项目中它们更大。
在我的应用程序中,我有一个公司视图,我可以在其中进行基本的 CRUD 操作。 订单也是如此。
当我创建订单时,我必须从我的数据库中选择公司。 问题是我必须允许用户修改每个订单的公司数据,因此只能针对特定订单进行修改。
我有 2 个解决方案:
第一个解决方案:创建一个单独的表 OrderCompany,我可以在其中存储每个订单的公司数据副本。 在这种情况下,我可以编辑副本,它不会影响原始公司,但我有疑问,因为它将是 Contacts 表的完整副本,只有一个附加字段 - OrderId。
第二种解决方案:将公司的副本直接存储在 Companies 表中,并在此表中添加 OrderId。 原始公司将存储为 OrderId = null,副本 OrderId 将被分配。 在这种情况下,我没有像第一个解决方案那样有 2 个几乎相同的表,但我不确定将原件和副本存储在同一个表中是个好主意。
您认为这两种解决方案哪个更好? 也许有更好的方法?
我怀疑你混淆了一些不同的概念。 “公司”不应该改变。 然而,公司可能有一些东西——比如“联系人”——确实会改变。
所以,我想你想要一个 model 你有:
companies
,其中包含公司的基本信息,例如公司companyid
和公司名称等。 此信息不会更改(或至少不会按订单更改)。 公司也会有一个默认的“联系人”。companyContacts
,这将是公司中的联系人。 这将有一个companyId
,然后是附加信息。 不同的联系人可能用于不同的订单。companyContactId
的orders
。然后,订单将分配给一家公司和公司内的特定联系人。 可以根据需要创建新的联系信息。
我想我们可以用你的第一种方法 go 因为公司表中的任何更改都不会花费 OrderCompany 表中的任何更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.