【问题标题】:database design for online ordering system在线订购系统的数据库设计
【发布时间】:2019-02-14 19:13:55
【问题描述】:

在设计在线商店数据库时,我遇到了一个部分问题,请问有人可以告诉我它是否设计好?这个想法是有些产品可以分配给类别。每个类别都有一组参数,以便客户更轻松地搜索产品。例如,类别“CPU”将具有参数“cpu family”、“cpu speed”,类别“HDD”将具有“form factor”和“spindle speed”。这些参数名称存储在表 tbCatParam 中,每个产品的参数值都存储在表 tbProdCatParam 中。

我的架构在此处以 jpeg 格式提供:http://cid-ce0a6f63806e1ea9.office.live.com/self.aspx/PuclicFolder/scheme.jpg

它会像这样工作吗?非常感谢

【问题讨论】:

  • 没有理由您拥有的架构不会“工作”来捕获您描述的数据。性能、可扩展性等真正的问题是您可以直接回答的问题。适当地解耦您的代码,您应该不会有太多麻烦来适应任何需要的架构更改。
  • 谢谢。这个设计似乎有效,但正如你所写的那样,在继续之前我想问一下性能问题,节省空间等。你看,如果有很多记录,这个设计将不得不改变?为什么会这样,有什么更好的方法来做到这一点?这似乎是一项微不足道的任务,这就是为什么我有点尴尬。
  • 当我尝试点击链接时,我被告知找不到资源。根据您的描述,产品参数和值似乎是动态的。这可以非常灵活。但是您是否尝试过将这种结构转化为屏幕上和报告中的可用信息,这可能很难让您气馁。

标签: sql-server database-design db-schema


【解决方案1】:

如果表 TbProdCatParam 和 TbProdCat 之间没有关系会更好,因为它是递归的。您正在关联 TbProdCat 和 TbCategories,这与 tbCatParam 相关。因此,如果 tbCategories 有参数,那么在 tbCatParam 和 tbProdCat 之间创建另一个 NxN 关系是没有意义的,它本身就是一个 NxN 表。

这样,您甚至不需要表 tbProdCatParam(除非您在产品和类别中都需要 paramCategories,但没有意义)。

【讨论】:

  • 我遇到的问题是,在 tbCatParam 我存储了一组与特定类别相关的参数名称(如“cpu speed”和“cpu model”),而在 tbProdCatParam 中存储了这些参数的值分配给特定类别的每个产品的参数。除了 tbProdCatParam 之外,我还能在哪里存储这些值?如果我删除 tbProdCatParam 和 tbCatParam 之间的连接,那么我的参数值将与 tbCatparam 中的任何参数无关,并且会一团糟。我确实在这个架构中看到了问题,但不知道如何正确地重新设计它。
  • 好吧,你应该问所有关系的“多少”,以帮助你理解。我看到,一个产品会有很多类别,而一个类别会有很多产品。所以,我们有 NxN 关系(与 tbProdCat),没关系。问题似乎是关于参数和类别的概念:这些类别,是参数的类别吗?而这些参数是关于产品规格的吗?您能否举例说明必须存储在 BD 中的信息?
  • 嗨,是的,这个问题是关于一般概念的。是的,这些参数是产品的规格,我认为最好的解决方案是分别存储每个类别的产品规格,以便于同一类别中的产品分类/选择。这类似于 eBay 的展示概念。您可以在“英特尔 CPU”或“其他台式电脑部件”类别中列出英特尔 E7400 CPU,在浏览这些类别中的任何一个时,您会在屏幕右侧看到不同的选择标准,用于仅过滤掉您的产品想看
  • ..more.. 所以你问了一个例子。继续使用 CPU,在 tbCatParam 中,我存储了应在特定类别中填写的规范(例如“制造商”和“Ghz”),而 tbProdCatParam 被认为用于存储这些参数的实际值,即对于 Product1:“AMD”和“ 2.8" 和 Product2 "Intel" 和 "3.2" 等。然后在网上商店浏览 "CPUs" 类别时,客户将能够快速过滤掉所有 AMD 处理器或比 "3Ghz" 更快的处理器。应该有一些比我的更有效的架构,但我被困在这个任务上。感谢您的帮助!
  • 好吧,我一直在想,你不能使用 tbProdCatParam 来建立 tbProdCat 和 tbCatParam 之间的关系。在我的概念中,你应该有一个产品,比如某个处理器。例如,该产品属于两个类别。这个类别应该是“英特尔产品”和“桌面处理器”。它可能有一个或多个参数,例如(在“桌面处理器”中)“时钟”、“FSB”、“内核数”和“纳米”。因此,您可以将信息存储在表本身的列中。想象三个字段:param_ID、param_name、param_value [1, "Cores", 4]。继续...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-06
  • 2010-12-18
  • 1970-01-01
  • 2014-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多