使用 1:M 关系创建 1:1
Using a 1:M relationship to create 1:1
我最近被要求更改我的应用程序设计并有一个解决方案,但感觉很脏,我希望有其他我没有想到的替代方案。
我有一个数据库 table Activity,它有一个关联产品 table,它有多个字段,如名称、描述、价格等。
通常我会在我的界面中有一个下拉菜单,其中包含各种产品,提交后,将产品 ID 放入我的 activity table。每次我需要拉出一个 activity 时,我只是在键上做一个连接并拉入相关的产品信息。
现在的要求是,如果您拉出 activity 但有人更改了输入 activity 后的产品描述,则它显示原始描述,而不是新的一.
我能想到的主要解决方案是简单地复制 activity table 中的所有产品字段,然后根据选择的下拉列表填写它们,但感觉可能会变得非常凌乱。既可以增加存储空间,也可以用于潜在的查询以及将来需要新列时的额外工作。这也感觉拥有一个关系数据库毫无意义。
这个解决方案是我应该采用的解决方案,还是带有复制字段的混合解决方案,但保留 reports/queries 的外键?
谢谢
这听起来不像是描述更改;听起来像是正在创建新产品。如果商品数据内容需要保留到录入时的商品ID,那么商品数据就不能真正改变。需要添加新产品。描述就像一把钥匙。
当描述发生变化并添加新产品时,需要停用旧产品。它仍在域 table 中,因为 'old' 产品记录与它相关联,但新的 activity 项目无法使用它。原始或以前的产品 ID 可以存储在新产品的域 table 条目中。
Product ID Description is_Active Previous_Product_ID Add_Date
1 myOldDesc N 1/1/2017
2 NewDesc Y 1 1/1/2018
您最终会遇到一系列产品更改。多年前,我在一个系统上工作,它以这种方式强制进行关系设计。很难合作。
activity table 似乎包含历史数据。我建议对其进行非规范化。您的 drop-down 仍然拥有产品域 table,可以根据相关实践对其进行修改。在更改时,创建审计记录以记录更改的历史记录。创建 activity 项目时,不会存储 product_id,而是存储实际的产品信息。关系模型的优点是您可以更改描述而不需要更改每个相关的 activity 记录。但在这种情况下,您不想更改相关记录,那么为什么要对其进行规范化呢?
我最近被要求更改我的应用程序设计并有一个解决方案,但感觉很脏,我希望有其他我没有想到的替代方案。
我有一个数据库 table Activity,它有一个关联产品 table,它有多个字段,如名称、描述、价格等。
通常我会在我的界面中有一个下拉菜单,其中包含各种产品,提交后,将产品 ID 放入我的 activity table。每次我需要拉出一个 activity 时,我只是在键上做一个连接并拉入相关的产品信息。
现在的要求是,如果您拉出 activity 但有人更改了输入 activity 后的产品描述,则它显示原始描述,而不是新的一.
我能想到的主要解决方案是简单地复制 activity table 中的所有产品字段,然后根据选择的下拉列表填写它们,但感觉可能会变得非常凌乱。既可以增加存储空间,也可以用于潜在的查询以及将来需要新列时的额外工作。这也感觉拥有一个关系数据库毫无意义。
这个解决方案是我应该采用的解决方案,还是带有复制字段的混合解决方案,但保留 reports/queries 的外键?
谢谢
这听起来不像是描述更改;听起来像是正在创建新产品。如果商品数据内容需要保留到录入时的商品ID,那么商品数据就不能真正改变。需要添加新产品。描述就像一把钥匙。
当描述发生变化并添加新产品时,需要停用旧产品。它仍在域 table 中,因为 'old' 产品记录与它相关联,但新的 activity 项目无法使用它。原始或以前的产品 ID 可以存储在新产品的域 table 条目中。
Product ID Description is_Active Previous_Product_ID Add_Date
1 myOldDesc N 1/1/2017
2 NewDesc Y 1 1/1/2018
您最终会遇到一系列产品更改。多年前,我在一个系统上工作,它以这种方式强制进行关系设计。很难合作。
activity table 似乎包含历史数据。我建议对其进行非规范化。您的 drop-down 仍然拥有产品域 table,可以根据相关实践对其进行修改。在更改时,创建审计记录以记录更改的历史记录。创建 activity 项目时,不会存储 product_id,而是存储实际的产品信息。关系模型的优点是您可以更改描述而不需要更改每个相关的 activity 记录。但在这种情况下,您不想更改相关记录,那么为什么要对其进行规范化呢?