Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 电子商务应用程序数据库的设计_Sql Server_Database Design - Fatal编程技术网

Sql server 电子商务应用程序数据库的设计

Sql server 电子商务应用程序数据库的设计,sql-server,database-design,Sql Server,Database Design,您好,我正在开发一个电子商务应用程序,在为产品目录设计数据库时似乎遇到了一些问题 我也读过关于stackoverflow的其他类似问题,但我觉得它们没有提供我需要的答案 这就是要求: 产品目录应按类别进行结构化,每个类别将有未知数量的子类别,每个子类别将有未知数量的产品 应用程序应该能够随意添加类别、子类别和产品 子类别将决定每种产品类型的属性 考虑到我刚才提到的,我将提供一个例子,以及我考虑的3个选项,以及为什么我认为它们不好 让我们考虑一台电脑和一台洗衣机: 计算机属性-显卡、程序类型、内存

您好,我正在开发一个电子商务应用程序,在为产品目录设计数据库时似乎遇到了一些问题

我也读过关于stackoverflow的其他类似问题,但我觉得它们没有提供我需要的答案

这就是要求:

产品目录应按类别进行结构化,每个类别将有未知数量的子类别,每个子类别将有未知数量的产品

应用程序应该能够随意添加类别、子类别和产品

子类别将决定每种产品类型的属性

考虑到我刚才提到的,我将提供一个例子,以及我考虑的3个选项,以及为什么我认为它们不好

让我们考虑一台电脑和一台洗衣机: 计算机属性-显卡、程序类型、内存 洗衣机-Putere(w),最大预保险,滤水器

这两种产品将属于不同的类别和子类别: 电脑-个人电脑类别 洗衣机-电子类

候选人一: 在这种情况下,除名称和价格等常见属性外,所有产品属性都将存储在ProductType中。但这将导致大量空值和mantainence噩梦。我认为我无法创建传统产品类型,因为这将导致需要更改ProductType表以添加传统列。有还有一些关于我访问数据的方式的问题,我考虑过,但我认为这些问题与这个问题无关

候选人二:

在这种情况下,每种产品类型都将有一个单独的表,其中包含其属性。但我将访问每种产品的数据,我必须创建一个单独的数据库调用,从而重复许多步骤。 此外,我也不知道如何使应用程序能够添加传统的产品、类别和子类别类型,而无需开发人员这样做

候选人三:

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

我很确定这会起作用,但我不认为在格式化的键值对字符串中存储任何属性都是最好的方法,也可能不是一种好的做法。 我也知道反射速度很慢,可能会有性能上的损失

在设计数据库时,还有其他更好的选择吗?
非常感谢您提供一些示例或链接。

您正在查找子类型或产品,其中每个产品正好是一个子类型

候选1称为“每个层次结构的表”或TPH。一个表捕获所有不同的子类型。这将使许多子类型变得混乱:它只适用于少数子类型

候选2称为“每种类型的表”或TPT。每个子类型有一个表。在Product表中,您有一列要定义类型(已经存在,称为鉴别器),其中ProductID和鉴别器上有一个超键。同样,这对于许多类型来说都很混乱

候选人3叫,呃,什么。这是最简单的方法,你有很多子类型。它看起来效率很低,但由于TPT和TPH设计的开销,它最适合用于扩展许多不同的子类型


就个人而言,我会对一些定义良好的子类型使用TPT,但对许多子类型使用第三种设计。我不喜欢TPH冗余列,因为它浪费了磁盘和内存(对于固定长度的列,即使为空也会分配空间)

您决定了应用程序将在什么环境和框架上运行吗?也许使用实体框架或Hibernate可以让这个过程变得轻松——产品类型只需在C#/Java中枚举并映射到单个列。