【发布时间】:2019-12-30 21:38:54
【问题描述】:
我正在用 Java 编程语言开发一个软件,并使用 MySQL 作为数据库。
该软件收集用户的一些输入,然后计算/选择他/她需要的产品。
首先,他/她创建一个项目(应该创建一个名为项目的表)并计算/选择产品,然后将它们添加到项目中。
产品字段彼此不同。(因此我们为每个名为 A、B、C 的产品都有不同的表)
例如,我有 3 种类型的产品,每种产品都有特定的字段并且彼此不同,因此用户选择/计算每种产品的方式都不同。
产品 A 有 3 个字段(产品 ID、名称、型号)
产品 B 有 7 个字段(product_id, name, color, company name, ....)
产品 C 有 14 个字段(product_id、name、company name、made by、created by、......)
我不能将这些产品视为一个,因为领域不同。
每个产品可以在多个项目中,每个项目可以有几种类型的产品。(多对多关系)
每个项目都必须保存产品。
在这种情况下,我应该在每个产品表和项目之间创建多对多关系吗?如果是,我以后如何再次检索项目?
这种情况的最佳做法是什么?
如何将这 3 个产品表视为一个?
【问题讨论】:
-
“这种情况的最佳实践是什么?” 如果您确实需要动态键值 (EAV) 存储,一些选项是:1) MySQL 8 Document Store 2) MySQL “NoSQL”更好地表示使用 InnoDB memcached Plugin 的键值存储 3) MariaDB 的 dynamic columns 4) 使用 XML (TEXT)、JSON 数据类型 5) 使用像 mongodb 这样的 NoSQL DBMS
-
@RaymondNijland:谢谢你的回复,我看过一些关于订单和物品的样本。(多对多)但在那些样本中,似乎物品字段是相同的,只有在现有的项目类型(我对吗?)这是一个小型桌面软件。你告诉我如果我想继续使用 RDMBS,唯一正确的方法是动态键值?对吗?还有任何使用 XML 或 JSON 数据类型的 url?
-
品味和意见的问题..您也可以在数据库中使用EAV (entity-attribute-value) 存储..问题是当您存储无模式数据时,为什么首先使用关系数据库...另外一个问题是当您需要将记录转换为列以便应用程序可以更轻松地使用它时,您将需要对其进行透视..
-
@RaymondNijland 这是一个粗略的软件,基于数据库(少计算,多选择!),我们的数据在 excel 文件中。我选择 RDBM 的原因之一是很容易将 excel 文件导入 mysql。(在 excel 中存在一些工具)另一个是我不熟悉这种技术。(EAV 恶魔!)我会尝试让你知道。跨度>
标签: java mysql many-to-many