2013-06-24 98 views
0

你好我在开发一个电子商务应用的过程中,我似乎已经在设计我的数据库产品目录的一些问题的数据库设计。设计用于电子商务应用

我也看到了计算器上其他类似的问题,但我不觉得他们提供了我需要的答案。

这是要求:

产品目录应该按类别来构成,每个类别将具有未知标记O的子类别,并且每个子类别未知数量的产品。

的应用程序应该有随意添加类别,子类别和产品的能力。

的子类别将决定每种产品的特性。

考虑到我刚才提到的,我会提供一个例子,以及3个选项,我认为,为什么我相信他们不是好交代。

让我们考虑一个电脑和一台洗衣机: 计算机性能 - 的显卡,ProcesorType,Memmory 洗衣机-Putere(W),最大获得快乐,水过滤器

这两款产品将属于不同的类别和子类别: 电脑 - 电脑类 清洗机 - 电子类。

候选I: enter image description here 在这种情况下,除了像名称和价格的一个共同的所有产品属性将被存储在ProductType.But这将导致NULL值的很多和mantainence nightmare.And我不认为我可以创建附加的产品类型,因为这会导致需要窜改ProductType表来添加附加列。关于我考虑访问数据的方式也存在一些问题,但它们与我认为的这个问题无关。

候选二:

enter image description here

在这种情况下,每一个产品类型将有一个单独的表与它的properties.But我将访问数据的每个产品我将不得不创建到一个单独的呼叫数据库导致许多步骤重复。 此外,我也没有看到任何方式让应用程序能够添加aditional产品,类别和subcateogries类型,而无需开发人员执行此操作。

候选三:

enter image description here

在这种情况下,我会保存在里面FormattedProperties键值对每个属性。 我还将在className列中存储作为我的模型的类的名称。并且,当我访问数据时,我将使用反射来检查特定的类并同时初始化我的对象。

我prety肯定,这将工作,但我不认为在格式化键值对字符串存储曾经属性为以最好的方式,并可能不是一个很好的做法无论是。 另外我知道反射速度很慢,可能会有性能损失。

是否有任何其他我可以考虑更好的选择,在设计我的数据库? 一些例子或链接将非常感激。

+0

你决定什么样的环境和框架的应用程序可以运行在(用于固定长度列,那么当空的空间,即使分配的)?也许使用实体框架或休眠将使这个过程无痛人流 - 该产品的类型,将在C#/ Java的只是枚举和映射到单个列。 –

回答

1

您正在寻找亚型或产品,其中每个产品只有一个亚型

候选人1被称为“表每一个分层”或TPH。一个表格捕捉所有不同的亚型。这将导致混乱许多亚型:它仅适用于极少数

候选人2被称为“表每类型”或TPT。每个子类型有一个表。在产品表中,您有一个列定义类型(已经存在,称为鉴别)与产品ID和鉴别超级键。同样,这会让许多类型变得混乱。

候选3叫,呃,东西。这是您拥有大量子类型的最简单方法。这似乎效率低下,但由于TPT和TPH设计的开销,它最适合用于缩放许多不同的亚型

就个人而言,我会使用TPT作为几个明确定义的亚型,但是第三种设计适用于许多亚型。我不喜欢,因为浪费的磁盘和内存的TPH冗余列