mysql - 多对多关系实体双重间接外键问题
问题描述
我的表之间有以下关系:
CREATE TABLE `class` (
`id` int(0) NOT NULL,
`grade` varchar(255) NOT NULL COMMENT 'first, second, etc (grade)',
`province` varchar(255) NOT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB ROW_FORMAT = Dynamic;
CREATE TABLE `class_province` (
`id` int(0) NOT NULL,
`class` int(0) NOT NULL,
`province` int(0) NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
INDEX `fk_nm_class`(`class`) USING BTREE,
INDEX `fk_nm_province`(`province`) USING BTREE,
CONSTRAINT `fk_nm_class` FOREIGN KEY (`class`) REFERENCES `class` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `fk_nm_province` FOREIGN KEY (`province`) REFERENCES `province` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB ROW_FORMAT = Dynamic;
CREATE TABLE `class_schooltype` (
`id` int(0) NOT NULL,
`class` int(0) NOT NULL,
`schooltype` int(0) NOT NULL,
INDEX `fk_nm_schooltype`(`class`) USING BTREE,
CONSTRAINT `fk_nm_classschooltype` FOREIGN KEY (`class`) REFERENCES `class` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
CONSTRAINT `fk_nm_schooltype` FOREIGN KEY (`class`) REFERENCES `school_type` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB ROW_FORMAT = Dynamic;
CREATE TABLE `country` (
`id` int(0) NOT NULL,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB ROW_FORMAT = Dynamic;
CREATE TABLE `province` (
`id` int(0) NOT NULL,
`name` varchar(255) NOT NULL,
`country` int(0) NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
INDEX `fk_province_country`(`country`) USING BTREE,
CONSTRAINT `fk_province_country` FOREIGN KEY (`country`) REFERENCES `country` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB ROW_FORMAT = Dynamic;
CREATE TABLE `school_type` (
`id` int(0) NOT NULL,
`name` varchar(255) NOT NULL,
`country` int(0) NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
INDEX `fk_schooltype_country`(`country`) USING BTREE,
CONSTRAINT `fk_schooltype_country` FOREIGN KEY (`country`) REFERENCES `country` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB ROW_FORMAT = Dynamic;
我的问题是,现在班级可以同时拥有一个省(拥有 A 国)和一个可以拥有 B 国的学校类型。这应该是不可能的。我可以改变什么?先感谢您!
解决方案
推荐阅读
- c# - 使用搜索文本框中的值过滤数据网格视图列表:“对象引用未设置为对象的实例。”
- installation - NSIS:如果程序名称更改,我如何在安装新版本之前卸载以前的版本?
- jquery - Select2 在运行时使用 Ajax 更改颜色
- ms-media-foundation - 将视频数据捕获到屏幕和文件
- javascript - 迭代 JSON 给出字符,而不是元素
- r - 最后 3 行的 R 平均值(不同列中的值)按两列分组
- node.js - 是否可以使用 Node 拦截对文件的写入?
- python - Scrapy:无法从页面中提取所有数据
- verilog - 在 Verilog 中使用 Generate loop 浮动输入端口
- fortran - 分离的模块,每个模块都有不同的派生类型和相关的过程,如何相互使用?