这是一个编程挑战,我承担了学习一些MySQL基础知识的任务,我不知道如何以我需要的方式实现一对多的关系。见以下代码:
CREATE TABLE Product (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
price FLOAT(7,7) NOT NULL,
needed_for_bundle INT(2) NOT NULL
)
CREATE TABLE Bundle (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
price FLOAT(7,7)
)我在任何地方都找不到如何做到这一点,或者我只是不理解我发现的相似的例子。如果这些是python对象,我将在bundle表/对象中列出引用包中的3-4项的产品I。我知道这是一对多的关系,但我无法从词汇和理论上理解它如何在MySQL中工作。
我会很感激你的帮助。谢谢你们所有人。
发布于 2019-07-26 05:03:02
将列"needed_for_bundle“设置为引用表束的主键的外键意味着两个表之间存在一对多的关系。每个产品必须属于一个捆绑,一个捆绑可以由一个或*产品组成(S)。
因此,首先,needed_for_bundle应该与Bundle表的主键( INT(6) )类型相同。
更改后,可以应用此代码,用于外键约束+索引:
ALTER TABLE `Product`
ADD FOREIGN KEY (`needed_for_bundle`)
REFERENCES `Bundle` (`id`)
ON UPDATE CASCADE
ON DELETE CASCADE;
CREATE INDEX `fk-id_bundle-Product-Bundle`
ON `Product` (`needed_for_bundle`) USING BTREE;发布于 2019-07-26 11:47:07
只有一捆和四种产品..。从bundle表中引用包中的产品。
免责声明。下面描述的解决方案是糟糕的实践。但如果一个人想自杀,我有谁能阻止他?
如果您想要创建“反向一对多的关系”,并从“一个”侧引用到“多个”方,则可以使用引用字段模拟该关系,其中所有N端记录标识符都存储在某种实体格式中。
这种坚实的格式可以是:
每次当您需要设置关系时,都需要将这个实值解析为单独的ID值。代码将是昂贵和丑陋的。
RDBMS不会检查您的数据一致性。您可以使用触发器/约束来模拟它,但是(见前一句)。
发布于 2019-07-26 15:40:36
needed_for_bundle是产品表中的外键,它将通过id字段与Bundle表相关联。此外,needed_for_bundle必须与Bundle表中的id字段相同的数据类型。在Products表中,您将needed_for_bundle定义为INT(2),隐式定义为签名,而非绑定表,定义id为INT(6)无符号。
存储4个产品,您应该开发一个触发器或存储过程,这将有助于控制要存储的项目编号。
https://dba.stackexchange.com/questions/243844
复制相似问题