【问题标题】:need advice on mysql data base design需要有关mysql数据库设计的建议
【发布时间】:2017-03-16 19:54:48
【问题描述】:

我需要构建应用程序,用户可以在其中按多种特征搜索/过滤产品。有25个产品组。每个产品组有大约 10 个产品特性。我有一些数据库设计解决方案,但似乎都不够合适:

  1. 为每个组创建 25 个表,列名存储产品组特征。
  2. 创建一个包含所有产品和与产品特性一样多的列的表 (~ 200)
  3. EAV:为所有特征创建 1 个表和 1 个表,其中所有产品及其属性存储在行中,而不是列名中。该解决方案将导致编写大量应用程序代码,因为我将无法在一行中选择具有所有特性的产品。我将不得不编写应用程序代码来对 mysql 结果进行分组。

我相信像我这样的问题已经有了解决方案。感谢您的帮助。

编辑:

在大多数情况下,群体中的特征是完全不同的。这些是起动机/交流发电机组件。只有大约 25% 的特征可以重叠,例如物理特征、长度、直径等。

【问题讨论】:

  • (a) 你是说每个群体都有不同的特点吗?完全不同? (b) 您能否编辑您的问题以提供一些示例,而不是您的真正问题,而是我们可以关联的简化虚构示例?如所写,问题不清楚。
  • 我们在这里谈论的是什么体积?

标签: mysql database-design


【解决方案1】:

我建议如下: 创建3个表;组、组特征、产品。

  1. 组链接到两个表。
  2. GroupCharacteristics 将具有特征列表,使用 3 列,(1)GroupName,(2)CharacteristicName,(3)Mapping [映射的值可以是 C01、C02 到 C10] 稍后您将使用映射。 一组具有许多特征,因此它是一对多的链接。
  3. 产品将有 12 列; (1)ProductName/Id,(2)GroupName,(3)C01,(4)C02 ... (12)C10。 C** 列将填充相关特征的值,以保持它们正确映射。

组:
[群组名称]
1-车辆
2-家具
特点:
[地图][群组][特色]
1-C01 |车辆 |长度
2-C02 |车辆 |音量
3-C03 |车辆 |类型
4-C01 |家具 |身高
5-C02 |家具 |音量
6-C03 |家具 |长度
产品:
[产品名称][组][C01][C02][C03]...
1-车 |车辆 | 2 | 50 |掀背车
2-喷射 |车辆 | 10 | 70 |空
三桌|家具 | 1 |空 | 1.6
4 杯 |家具 |0.1 | 0.12 |空

String col = 从特征中选择地图,其中 Group = 'Vehicles' 和 Characteristic = 'Type'
-- 这将返回列(在本例中为 C03)然后 --
String sql = "从 Group = 'Vehicles' 和 "+col+"='Hatchback' 的产品中选择 ProdName"
-- 这将在一个字符串中构建查询,然后您只需执行它 --
执行(sql)
-- 无论您使用哪种语言,这只是您必须编写的代码背后的基本思想。

【讨论】:

  • 这似乎是我的第二个解决方案。在 Products 表中,我必须创建大约 200 列。
  • 您说每个产品类型(组)最多有 10 个特征。由于您有映射字段,因此产品表中的列可针对不同的特征重复使用。
  • 是的,每种类型都有几乎独特的特征。将有 25 种类型。独特特征的总数约为 200 (25*10)。
  • Products 中仍然只需要 10 列。 200 行的特征。
  • 每种产品类型都有独特的特点。如果在 Products 中我想将所有产品存储为行并将所有特征值存储在一行中,我将不得不将特征名称存储为列名称。如果有 200 个独特的特征,我将不得不保留 200 列。那些不适用于特定产品类型的特征将在行中具有NULL 值。这是我的第二个解决方案。我不明白,映射将如何帮助我。
猜你喜欢
  • 2014-10-22
  • 1970-01-01
  • 2011-03-27
  • 2019-06-20
  • 2011-07-19
  • 2010-10-18
  • 2012-01-27
相关资源
最近更新 更多