关系建模问题

时间:2010-10-30 00:49:05

标签: sql database-design entity-relationship relational relational-model

我们有三个名为ProductProductTypeProductCategory的实体。

让我们假设我们有三种ProductTypeBookMusicVideo

ProductCategory我们有三个Book FictionNovelTechnicalProductCategory

Music的三个不同RockJazzPopProductCategory

Video我们有三个FictionComicDramaProductProductType

ProductCategory有一个ProductCategory,可以有多个ProductType。但它的ProductType应与其Book匹配。例如,如果FictionNovel,则只能将TechnicalProductCategoryProductCategory作为Product

是否可以使用此限制对此架构进行建模(即ProductType的{​​{1}}应与其{{1}}匹配),而不使用应用程序代码或触发器等 - 只使用表格,外键等

你会如何塑造这个?

2 个答案:

答案 0 :(得分:3)

PRODUCT_TYPE

  • PRODUCT_TYPE_ID(pk)
  • PRODUCT_TYPE_DESCRIPTION

PRODUCT_CATEGORY

  • PRODUCT_CATEGORY_ID(pk)
  • PRODUCT_TYPE_ID(fk到PRODUCT_TYPE.PRODUCT_TYPE_ID
  • PRODUCT_CATEGORY_DESCRIPTION

产品

  • PRODUCT_ID(pk)
  • PRODUCT_TYPE_ID(fk到PRODUCT_TYPE.PRODUCT_TYPE_ID

PRODUCT_CATEGORY_MAP

  • PRODUCT_ID(pk,fk to PRODUCT.PRODUCT_ID
  • PRODUCT_CATEGORY_ID(pk,fk to PRODUCT_CATEGORY.PRODUCT_CATEGORY_ID
  • PRODUCT_TYPE_ID(pk,fk同时为PRODUCT.PRODUCT_TYPE_ID PRODUCT_CATEGORY.PRODUCT_TYPE_ID

答案 1 :(得分:2)

这很容易,这是一个简单的两级分类问题。在您的应用中,您需要两个单独的下拉菜单,在选择ProductType后,填充了ProductCategory。

一个澄清:您的声明“产品具有ProductType并且可以包含许多ProductCategory”与您的描述相矛盾。产品只能有一个产品类别(小说,爵士),它基于ProductType(书籍,音乐)。

此处不需要代理键(可能存在其他建模要求),这里只是多余的。对于像这样的简单分类,CHAR(1)或(2)更好,用户和开发人员友好(当你扫描输出,你知道“B”意味着“书”等),以及比任何数字更快密钥(当然除了tinyint)。

这里没有“技巧”,它是直接规范化,它支持您识别的规则。

Link to Product Classification

我不明白是否需要“地图”表。

我为Product提供了一个代理键,但当然你需要其他键,以实现合理的约束。

回复评论

好的,所以你的要求不明确,现在看来它们正在改变。当您在评论中回答我的具体问题时,支持您的要求所需的模型将很容易。为了提供帮助,我发表了两种可能性。当然它是不完整的,等待你的回答:

Link to Two Possible Models

您的控制管理员与用户之间的“紧张”似乎非常松散。请选择以下其中一项,以便我们可以继续并结束问题:

  1. Product.ProductType由admin设置。这允许管理员和用户为Product.ProductType选择任何有效的ProductCategories,用于他们拥有的任何用途。

  2. 对于每个产品,管理员选择ProductType ProductCategories的子集(来自对Product.ProductType有效的ProductCategories列表)。用户可以然后仅使用产品管理员选择的 选择,无论他们有什么用途。

  3. 请回复,然后我将发布最终版本。