1

我有一张表product(id, name),其中包含几组不同型号的产品。即{motor10,motor20,motor30,pipe10,pipe20,pipe30,wrench12,wrench20等}。

我选择创建一个名为product category仅包含类别的新表,例如 {motor, pipe, wrench, uncategorized}

在此处输入图像描述

问题

出于应用程序的实际目的(而不是出于理论目的,例如建模 ER 图),我应该使用识别关系还是非识别关系?

我的用例 在我的例子中,我可以定义它,这样一个产品就不能没有类别而存在。但是,如果产品尚未分类,则它uncategorized在类别中具有价值。类别可以包含尚未分配任何产品的条目。

类别是一个虚构的概念,我真的不必使用,但它可以帮助我对我目前拥有的产品集进行分类。我认为因为它是一个虚构的概念,我不确定我想如何使用它,这就是我在这个问题上苦苦挣扎的原因。又名.. 我根本不需要桌子product_category但它肯定会帮助我进行各种产品分组。

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

...也就是说,是否存在我不会将其作为识别关系的情况?

4

2 回答 2

1

我会

  1. 将表保留product_category为非标识关系。
  2. 有一个带有=和=的默认product_category行。category_nameUncategorizedid1
  3. 为table1中的列设置默认值,以便所有没有自动分配的新行默认为.product_category_idproductproductproduct_categoryUncategorized
于 2016-09-06T23:28:16.813 回答
1

您可以声明product_category为强制性的——也就是说,NOT NULL不使其成为识别关系的一部分。

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


回复您的评论:

定义标识关系的另一种方法是,如果不引用父表,则无法唯一标识子表中的行。

但是在您的情况下,您可以轻松地拥有一个存在并且可以识别的产品,即使它不属于某个类别,或者它属于多个类别(如果您有多对多关系)。


Maybe existence isn't really the right criteria. But can you identify a product using other attributes (i.e. the primary key) without mentioning its category? Or can the category of a product change, without changing the unique identity of the product?

Take for example a US citizen who lives in a state. The state might be mandatory (for the sake of argument, not taking into account citizens living abroad or in US territories). Is there an identifying relationship on that citizen's current state? No; they can move from state to state and they're still the same person. The state is merely an attribute, even if it's mandatory.

而另一个示例,例如购物车中的订单项,确实与其父购物车具有识别关系。没有该特定购物车,订单项就不存在。

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

于 2016-09-06T23:32:24.103 回答