需要有关mysql数据库设计的建议

时间:2017-03-16 08:24:00

标签: mysql database-design

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

  1. 每个组创建25个表,列名存储产品组特征。
  2. 创建一个包含所有产品的表,以及与产品特征(~200)
  3. 一样多的列
  4. EAV:为所有特征和1个表创建一个表,其中所有产品及其属性存储在行中,而不是列名中。此解决方案将导致编写大量应用程序代码,因为我无法在一行中选择具有所有特征的产品。我将不得不编写应用程序代码来组合mysql结果。
  5. 我相信已经解决了像我这样的问题。谢谢你的帮助。

    编辑:

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

1 个答案:

答案 0 :(得分:0)

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

  1. 群组与两个表相关联。
  2. GroupCharacteristics将具有特征列表,使用3列,(1)GroupName,(2)CharacteristicsName,(3)Mapping [映射的值可以是C01,C02到C10] 稍后您将使用映射。 一个群体具有许多特征,因此它是一对多的链接。
  3. 产品将有12列; (1)ProductName / Id,(2)GroupName,(3)C01,(4)C02 ......(12)C10。 C **列将填充相关特征的值,以便正确映射它们。
  4. <强>组:
    [组名]
    1-车辆
    2,家具
    特性:
    [地图] [集团] [特点]
    1-C01 |车辆|长
    2-C02 |车辆|卷
    3-C03 |车辆|键入
    4-C01 |家具|身高
    5-C02 |家具|卷
    6-C03 |家具|长
    产品:
    [ProdName]的[组] [C01] [C02] [C03] ...
    1车|车辆| 2 | 50 |两厢
    2-Jet |车辆| 10 | 70 |空
    3,表|家具| 1 | null | 1.6
    4杯|家具| 0.1 | 0.12 | null

    String col =从特征中选择地图,其中Group =&#39; Vehicles&#39;和特征=&#39;键入&#39;
    - 这将返回列(在本例中为C03)然后 -
    String sql =&#34;从产品中选择ProdName,其中Group =&#39; Vehicles&#39;和&#34; + col +&#34; =&#39;两厢&#39;&#34;
    - 这将在字符串中构建查询然后您只需执行它 -
    执行(SQL)
    - 无论您使用何种语言,这只是您必须编写的代码背后的基本理念。