代码之家  ›  专栏  ›  技术社区  ›  tawfekov

如何允许代码存储不确定的列数?

  •  1
  • tawfekov  · 技术社区  · 15 年前

    假设我们有大约100种不同的车型,很明显所有的车都有相同的部件或规格,但不是所有的部件都在这100个汽车品牌之间共享

    我的想法是在每一列中存储最常用的规范,而未确定的(其余的)规范可以作为对象或数组保存或序列化数组。

    你认为这是个好主意还是能和我分享一下你的经验

    这是我的两张简单的表格

    Table 1
    |-------|--------|-------|-------|-------|
    | Id    | brand  |engine |desiel | blah..|
    |-------|--------|-------|-------|-------|
    | 1     | old car|   1.6 | yes   | blah..|
    |-------|--------|-------|-------|-------|
    
    
    Table 2 
    |-------|--------|----------------------|
    | Id    | car_id |  un common info      |
    |-------|--------|----------------------|
    | 1     |    1   |array of informations |
    |-------|--------|----------------------|
    

    我觉得我的主意不好,因为它破坏了搜索能力

    5 回复  |  直到 14 年前
        1
  •  1
  •   Paul Dixon    15 年前

    可能你需要一个 Entity-Attribute-Value (EAV)模式。这些可以让您拥有具有不同信息量的记录,但查询起来可能很棘手。

        2
  •  2
  •   Steve    15 年前

    如果您必须坚持使用MySQL,那么正如Paul和Netcoder所说,EAV将是您选择的解决方案。

    像这样面向文档的数据库是围绕这样一个逻辑构建的:一个实体没有固定数量的字段,例如一个产品和关于其所有图像的数据将驻留在一个“文档”中。

        3
  •  0
  •   netcoder    15 年前

    一个常用的解决方案是有一个接受键值对(通常称为EAV)的表:

    |-------|--------|-------|
    | carId | name   | value |
    |-------|--------|-------|
    | 1     | engine | 4cyl  |
    |-------|--------|-------|
    
        4
  •  0
  •   Tom    15 年前

        5
  •  0
  •   nvogel    15 年前

    为每个唯一的属性组合使用一个表,但也要将公共属性放入在具有这些公共属性的所有车型之间共享的表中。其思想是确保描述汽车的每个可能元组只能出现在模式中的一个位置。这个原则有一个名字: The Principle of Orthogonal Design .