Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何确保产品规格适用于类别实体?_Mysql_Sql_Relational Database_Entity Relationship_Rdbms - Fatal编程技术网

Mysql 如何确保产品规格适用于类别实体?

Mysql 如何确保产品规格适用于类别实体?,mysql,sql,relational-database,entity-relationship,rdbms,Mysql,Sql,Relational Database,Entity Relationship,Rdbms,我有下表: 产品id、名称、价格、类别\u id 类别id、名称、描述 现在,由于每个类别的产品可能与其他类别的产品具有不同的属性,我想使用,但我的问题是: 我想确保添加的任何产品属性的值都属于该产品的类别,并且不允许添加不属于该产品的arrtibutes 你能告诉我怎么做吗 我希望确保添加的任何产品属性的值都属于该产品的类别,并且不允许添加不属于该产品的属性。你能告诉我怎么做吗 当然。在建模和SQL级别上,这是一个相当常见的需求,而且非常简单。然而,由于理论家将1960年代的原始记录归档系统推

我有下表:

产品id、名称、价格、类别\u id 类别id、名称、描述 现在,由于每个类别的产品可能与其他类别的产品具有不同的属性,我想使用,但我的问题是:

我想确保添加的任何产品属性的值都属于该产品的类别,并且不允许添加不属于该产品的arrtibutes

你能告诉我怎么做吗

我希望确保添加的任何产品属性的值都属于该产品的类别,并且不允许添加不属于该产品的属性。你能告诉我怎么做吗

当然。在建模和SQL级别上,这是一个相当常见的需求,而且非常简单。然而,由于理论家将1960年代的原始记录归档系统推广为关系型,而同一人群对关系型方法的压制,这是未知的

RFS是链接记录而不是行的物理记录ID,而关系模型是逻辑的,使用逻辑键链接行而不是记录。关系键提供了意义。因此,首先需要理解概念,然后很容易实现

1960年代的档案系统 您的文件:

我所有的数据模型都在中呈现,这是自1993年以来关系数据库建模的标准 我的书是初学者的必备读物。 这是对那些失足者的一次复习 关系数据库•概念•子类型 这是你需要理解的概念

根据您的要求,每个类别在产品中需要不同的属性,并且每个类别都与其他类别相互排斥。 它是一个普通的子类型集群,在本例中是独占的。 有些人可能会称之为元数据,例如,它超出了数据范围,并且对产品有着决定性的影响。 更多信息。 1960年代的记录归档系统•实施 现在使用给定的文件实现

将Category维护为逻辑键CHAR Key,充满意义,而不是记录Id。 我们在产品中部署独占子类型集群,类别作为鉴别器。 但是,由于使用了记录ID,这些ID是物理的,不是逻辑键,而是作为主键实现的,这会让任何人都感到困惑,因此产品文件中的行可能会被复制 每个逻辑产品行都必须是唯一的 这意味着,根据E F Codd博士的关系模型,使用由数据组成的键 产品名称是PK的唯一可能 关系数据库•实现 如果我们将系统提升到关系,并防止行与记录的重复,这是禁止的:

人类用户不会使用数字作为标识符。ProductId未被他们看到或使用。 该名称是唯一唯一的行产品标识符,但太长,无法指定主键。然而,它必须是独一无二的。 用户将使用短代码作为产品标识符。 这使得ProductId非常无用和冗余,只需增加一列和一个索引。 与往常一样,这也是最少的列和索引。 SQL 所有这些都是普通SQL,关系模型的数据子语言。它可以通过使用普通SQL约束等实现完全保护和完整性。提供了完整的实现细节

但是,请注意,MySQL和PusGreSQL不是SQL,它们不符合SQL要求,并且缺少SQL的许多普通函数,因此它们使用术语SQL是欺诈性的。 此外,它们没有服务器体系结构,这意味着性能糟糕,并发性差。
如果您对不同的产品有不同的属性,那么您可能希望为每个产品提供一个单独的表。不幸的是,MySQL没有强制执行检查约束。我认为上面的建议是一个笑话。有一个单独的表来标识哪些属性可以属于哪个产品。