gpt4 book ai didi

mysql - "Product Category"应该与 "Product"有识别关系吗?

转载 作者:行者123 更新时间:2023-11-29 06:09:15 26 4
gpt4 key购买 nike

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

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

enter image description here

问题

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

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

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

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

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

最佳答案

您可以将 product_category 声明为强制性的——即 NOT NULL——而不使其成为标识关系的一部分。

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


回复你的评论:

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

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


也许存在并不是真正正确的标准。但是,您能否使用其他属性(即主键)识别产品而不提及其类别?还是可以在不改变产品独特标识的情况下改变产品类别?

以居住在某个州的美国公民为例。该州可能是强制性的(为了争论,不考虑居住在国外或美国领土上的公民)。该公民的当前状态是否存在识别关系?不;他们可以从一个州搬到另一个州,但他们仍然是同一个人。状态只是一个属性,即使它是强制性的。

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

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

关于mysql - "Product Category"应该与 "Product"有识别关系吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39359139/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com