2016-09-06 159 views
1

我有一个表product(id, name),其中包含几个产品型号不同的产品组。即{motor10,motor20,motor30,pipe10,pipe20,pipe30,扳手12,扳手20等}。“产品类别”是否与“产品”具有识别关系?

我选择创建一个名为product category新表只包含的类别,如{电机,管,扳手,未分类}

enter image description here

问题

对于一个实用的目的应用程序(而不是为了理论目的,如建模ER图),我应该使用识别还是非识别关系?

我的用例 在我的情况下,我可以定义它,以便产品不存在没有类别。但是,如果产品尚未分类,则其类别中包含uncategorized值。类别可以包含尚未分配任何产品的条目。

类别是一个我并不需要使用的构思概念,但它可以帮助我分类我目前拥有的一系列产品。我认为是因为它是一个构思概念,我不确定我想如何使用它,这就是为什么我正在为这个问题而努力。又名..我不根本没有表product_category,但它肯定会帮助我与各种产品分组。

使这种识别关系需要我修改和重写一些代码,并且我想确保在我离开并编写大量代码之前,我确实希望将它作为一种识别关系。

......这样说,会有一种情况,我不会使这种识别关系?

+0

如果它可以帮助你,添加它。就这么简单。尽早做决定,这样你就不会为自己创造很多额外的工作。如果是我,我会添加它。 – Missy

+0

如果您制作PK的'product_category_id'部分,则会增加其他idex的大小,因为它们也会在没有任何原因的情况下包含它。 –

回答

1

您可以将product_category声明为强制性 - 即NOT NULL - 不将其作为识别关系的一部分。

标识关系表示属性是表的主键的一部分。我认为这不适用于你的情况。一个表可以具有NOT NULL属性,而不使它们成为表的主键的一部分。


回复您的评论:

定义识别关系的另一种方法是,在子表中的行不能唯一没有引用父标识。

但就您而言,您可以轻松拥有即使尚不属于某个类别也可以识别的产品,或者该产品属于多个类别(如果您有多个类别,很多关系)。


也许存在并不是真正的标准。但是,您能确定使用其他属性(即主键)而不提及其类别的产品吗?或者产品的类别是否可以改变,而不改变产品的唯一标识?

以一个居住在州内的美国公民为例。国家可能是强制性的(为了辩论的缘故,没有考虑居住在国外或在美国境内的公民)。公民目前的状态是否存在识别关系?没有;他们可以从州到州移动,他们仍然是同一个人。国家只是一个属性,即使它是强制性的。

鉴于不同的例子,例如购物车中的订单项,确实与其父购物车存在识别关系。没有该特定购物车,订单项不存在。

一个更灰色的例子是电话号码。我现在“拥有”我的电话号码,没有拥有者的电话号码是没有意义的。但是如果我放弃我的电话号码,电话公司可以将它重新分配给另一个所有者。我不确定这是否构成一种识别关系。

+0

谢谢你,比尔。我很好奇 - 你怎么看出它不适用?即你是否会争论它适用的情况(仍然考虑同样的情况)? – Dennis

+0

比尔,谢谢,理由似乎是“产品”可以独立存在,即使它没有明确分类。我试图看看是否可以制定像“一个产品无法在概念上不存在没有类别的存在”这样的人造商业规则,并强制执行该规则,然后(我认为)将其作为一种识别关系。也就是说,我想知道,识别与非识别关系的决定是语义还是业务规则的产物,而不是客观性。我不能说我有100%的想法,但感谢让我更近一步。 – Dennis

1

  1. 保留product_category表作为非识别关系。
  2. 具有默认product_categorycategory_name = Uncategorizedid = 1
  3. 1的默认值在product表列product_category_id,使没有一个product_category自动分配所有的新product行默认为Uncategorized