gpt4 book ai didi

mysql - 使用数据库关系限制输入

转载 作者:行者123 更新时间:2023-11-29 21:15:37 25 4
gpt4 key购买 nike

我无法理解限制关系数据库中的输入。场景如下:

数据库:MySQL

表 1:

CREATE TABLE IF NOT EXISTS `manufacturers` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NOT NULL,
`created_at` DATETIME NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`))
ENGINE = InnoDB

表 2:

CREATE TABLE IF NOT EXISTS `models` (
`id` INT NOT NULL AUTO_INCREMENT,
`manufacturer_id` INT NOT NULL,
`name` VARCHAR(45) NOT NULL,
`created_at` DATETIME NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`, `manufacturer_id`),
INDEX `fk_models_manufacturers_idx` (`manufacturer_id` ASC),
CONSTRAINT `fk_models_manufacturers`
FOREIGN KEY (`manufacturer_id`)
REFERENCES `manufacturers` (`id`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB

表3:

CREATE TABLE IF NOT EXISTS `cars` (
`id` INT NOT NULL AUTO_INCREMENT,
`manufacturer_id` INT NOT NULL,
`model_id` INT NOT NULL,
`photo` TEXT NULL,
`price` DECIMAL(6,2) NULL DEFAULT 0.00,
`created_at` DATETIME NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`, `manufacturer_id`, `model_id`),
INDEX `fk_cars_models1_idx` (`model_id` ASC, `manufacturer_id` ASC),
CONSTRAINT `fk_cars_models1`
FOREIGN KEY (`model_id` , `manufacturer_id`)
REFERENCES `models` (`id` , `manufacturer_id`)
ON DELETE CASCADE
ON UPDATE CASCADE)
ENGINE = InnoDB

我正在用 PHP 编写一个应用程序,人们可以在其中将汽车添加到他们的数据库中。正如您所看到的,汽车的型号和制造商从型号表中链接起来,以保持汽车按其型号和制造商链接。我如何确保当有人添加汽车时,他们不会混淆型号和制造商 ID,这样他们就不会说型号 A 是制造商 C 制造的,而模型是由制造商 B 制造的,并且在型号表中注明。

有没有办法通过关系做到这一点?很确定只是不确定如何正确设置表格来防止这种情况发生。

编辑:澄清一下,只有一个制造商可以制造一种型号。如果制造商生产相同型号的汽车,那么它将是一个新条目,因为它会有不同的规范。这是一个小型数据库,因为我稍后会添加诸如规范之类的列,只是试图让基本功能正常工作并了解 mysql 如何使用关系来限制输入。

最佳答案

Car表具有 model_id 的组合和manufacturer_id作为主键。现在,当您添加新车时,manufacturer_id 将充当 manufacturer 中的外键。表和model_id将充当 model 中的外键 table 。

所以不会像你说的那样发生任何冲突。另外,model表与 manufacturer 具有多对一关系主键为 id 的表。

这是一个非常开放的问题,您可以找到其他方法来设计数据库,这实际上取决于您的需求以及您想要如何项目系统。

关于mysql - 使用数据库关系限制输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35974381/

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