2017-06-02 109 views
0

我有一个要求,设计一个电子商务应用程序的数据库,有一个广泛的产品类别范围从针到飞机。所有产品都有不同的功能。例如,手机具有特定功能,如内存,相机百万像素,屏幕尺寸等,而房屋具有地块大小,楼层和房间数量,车库大小等。这些特定功能与我们的产品一样多。惠斯特都有一些共同的特征,其中大部分都是非常不同和具体的特征。所以,在设计数据库时它有点混乱。我是第一次这样做。有很多产品类别的电子商务网站的数据库设计

我的查询是关于数据库设计的。这是我打算做的:

  1. 创建一个所有领域的主表,告诉如果一个字段是共同的或特定的,并映射他们与各自的产品类别。所有产品将具有“共同”字段,但“特定”仅针对一个类别显示。

表:ALL_COLUMNS

列: ID, 名, 类型(公共的或特定的), 类别(电话,汽车,膝上型等)

  • 在显示前面的字段时,从all_columns表中取出各个字段。

  • 存储与映射字段

    沿另一个表中的用户数据
  • 表:ALL_USER_DATA

    列: ID, ColumnID的, 值

    我不知道是什么是正确的方式,以及如何完成已建立的应用程序和网站。所以,如果有人能够判断这是否是电子商务应用程序的数据库架构的正确方式,并且具有高度全面和稀疏的类别和功能,我期待着。

    谢谢大家。

    回答

    0

    这个问题有很多可能的答案 - 请参阅这个问题旁边的“相关”问题。

    ALL_USER_DATA表的设计通常称为“实体/属性/值”(EAV)。它被广泛认为是可怕的(为什么要搜索SO) - 它在理论上很灵活,但是想象一下,如果发现“波音制造的飞机至少20米的翼展适合具有新资质的飞行员” - 您的查询几乎变得难以理解。

    另一种方法是创建一个可以存储多态数据类型的模式 - 再次查看Stack Overflow以了解可能的工作方式。

    简单的答案是,关系模型不适合这种情况 - 您不希望对商店使用的每种新产品类型进行模式更改,也不希望产生数百种不同的表/列。

    我的建议是将核心,通用信息和所有关系存储在SQL中,并将扩展信息存储为XML或JSON。MySQL在查询JSON方面非常出色,而且它是一种本地数据类型。

    你的数据模型将是这样的:

    Categories 
    --------- 
    category_id 
    parent_category_id 
    name 
    
    Products 
    -------- 
    product_id 
    price 
    valid_for_sale 
    added_date 
    extended_properties (JSON/XML) 
    
    Category_products 
    ----------------- 
    category_id 
    product_id 
    
    +0

    这不是RM是一个糟糕的配合,它是数据库管理系统不充分支持相应的DDL。 (通过受限的DDL被用户界面和优化的表格操作符调用)。只有缺乏支持才使我们“不想”这样做。从更改模式查询表与查询静态模式中的JSON/XML值的查询完全相同。 EAV和JSON/XML都将用户实际关心的表格编码为其他数据结构。如果您确实想要以非制表形式查询或实施该数据(从来就不是EAV的情况),那么请使用这些数据类型。 – philipxy

    +0

    感谢@ neville-k,正如在引用的链接中提到的,我认为EAV并不完全是一个坏主意,但我喜欢你推荐的方法。您能否介绍一下我们如何以及在桌面和JSON上保存什么,以便您的方法更加清晰? – chuck

    +0

    如果不知道模式,很难具体说明在关系表中保存什么。通常情况下,我会将所有产品类型在关系表中的数据以及其他所有内容保存在JSON中... –

    相关问题