零售体育用品公司数据库模型

时间:2011-02-16 19:12:21

标签: mysql database-design relational-database

我是一名专业设计师,曾做过一些数据库。关于我在表格配置中犯的任何重大错误以及PK和FK如何相关,我想对此提出一些反馈。

蓝色框表示来自其他数据库的数据。

Click here to see database design

Click here to see New Design
更改了产品尺寸和颜色表

2 个答案:

答案 0 :(得分:1)

你有2个鞋码表。

以服装尺寸表为例,如果将尺寸设为其中一列,则会获得更大的灵活性。

apparelSizeId  Size   Sort order
1              M      1
1              L      2
1              XL     3  
2              S      1
2              M      2
2              L      3

使用这种类型的表格设计,可以更轻松地添加新尺寸。

您还可以将大量的样式表和样式表组合到一个表中,尽管它确实使设计更难以理解业务类型。

答案 1 :(得分:1)

与Gilbert Le Blanc描述的一致,您可以使其更具可扩展性和效率,如下所示:

一个。每当您发现自己为表示可能的用户选择的项添加列时,请考虑它们是否应该在新表中实际建模为ROWS。这被称为“规范化”(除此之外还有更多,但为了这个目的,它应该涵盖我想说的......),并且是正确数据库设计的关键。如果你没有正确地恢复正常,你将会遇到广泛的痛苦,并在路上感到遗憾。 Imagin您的一家供应商在您使用数据库6个月后推出了一种新颜色。您必须重新编码数据访问例程,才能将该颜色添加到您正在创建的任何前端演示文稿中。

B中。您可能希望将一些类别/子类别/类结构合并到一个或两个表中。虽然我不知道更多关于零售业的具体建议,但似乎可能有任何数量的heirarchies,具体取决于产品。从理论上讲,你实际上可以使用SINGLE表来实现这个目的:

**tblCategories**
CategoryID Int PK
ParentCategoryID Int FK on tblCategories CategoryID
CategoryName

使用ParentCategoryID>记录0是子类别。

我将尝试在我刚刚描述的内容中附加一张图像(我之前没有在此处做过)。警告:

  1. 我在SQL Server中工作,所以事情可能与您有所不同。

  2. 出于本示例的目的,我过度简化了模型。但它确实说明了我所描述的关系。

  3. 可能是其他人对产品/类别建模提出了更好的建议。我提出的概念可能很难直截了当,但利用递归关系来创建一个非常灵活/可扩展的表结构。

  4. enter image description here

    我认为你走在正确的轨道上。但是,仍有一些领域(可能)显着改善您的标准化。我之所以说,可能是因为我对运动服装业务,尺码等等了解不够。但是,有些意见:

    一个。我看到在几个不同的表中表示了相同的实体,即Nike,Adidas等。虽然我知道一个供应商可能有几个不同的品牌,但您的表结构可以使这更清楚。如果“耐克”是供应商,那么耐克的品牌可能是耐克,匡威,以及耐克提供的其他品牌。如果这是你的桌子所做的,那么请原谅。

    B中。您的服装尺码表可能具有一些额外的标准化潜力,或者可能没有。看起来很复杂,而且,我对那里代表的关系很不了解。我确实看到在字段中重复显示的数据可能更好地表示为其他表中的行。

    ℃。我在B中所描述的一个例子是鞋类尺码。这可以更有效地规范化。请注意,我已经在tblFootwear_Sizing_Index中任意放置了GenderCategory的FK,它可能属于tblFootwearSizes。再说一次,对鞋业还不够了解。但除了这个狡辩之外,您会发现以下安排更有效和易于管理:

    enter image description here

    您的模型中还有其他领域可能会进行类似的重组。但是,正如我所说,由于我对你的行业缺乏了解,我很难看到。我仍然认为你可能想要重新检查“类别”和“类”的许多风格。此外,你绝对应该为某些类别/类表(或任何表,真的)找到一些更具描述性的名称。想想“ProductCategory”,“GenderCategory”,“FootwearCategory”等等。另外,不要太害怕更长的表名,如果让你更容易(或者更重要的是,你的继任者现在四年形成)来辨别什么你的代码正在进行中。现在打字可能会比较麻烦,但是在你上线6个月之后,你正试图弄清楚为什么你的一个查询没有按预期返回,你会很高兴你做到了。毕竟,您始终可以使用通常使用的表名别名。

    我强烈建议您查看有关数据库规范化的一些信息,然后尝试将其应用于您的模型。从跳转中获取后端数据库模型可以决定您的应用程序。这是我通过谷歌搜索“数据库规范化”得到的许多文章之一:

    http://databases.about.com/od/specificproducts/a/3nf.htm

    本文主要关注第三范式(3NF),但提供了1NF和2NF的链接,这些是3NF的先决条件。

    您应该始终在数据库设计中争取最小化3NF。

    希望有所帮助,我很想知道你是如何取得进展的。