- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个用户表,他只能是老师或校长 。我认为在急诊室中,不相交的特化是合适的。我正在使用 MySQL dbms,创建表后,我在 User 表中创建了一个用户(例如 UserId=31)。但问题是,当我将 UserId =31 的新记录插入到 Teacher 表中,并在 headmaster 表中插入相同的 UserId 时,它不会给出任何错误。我认为这被认为是对不相交属性(property)的侵犯。
我有一个具有此属性的用户表
用户(用户 ID、用户名、密码、性别、姓名、地址、教育背景、大学、手机)。
以及像这样映射后出现的教师表
老师(用户ID,类(class))。
和校长 table 。校长(用户 ID,服务年数)。
当我创建教师和校长表时,我在没有主键的情况下创建了它们,然后我在每个表中为 UserId 属性添加了一个索引,并使其引用 User 表中的 UserId。
我的问题:如何使用 MySQL 实现表的不相交?
提前致谢
最佳答案
一种方法是向每个表添加类型指示符,以及包含类型指示符的 FK 约束。
我只是要显示父类(super class)型以及一个子类型表。
CREATE TABLE `User` (
`UserID` bigint(21) NOT NULL,
`UserType` enum('H', 'T') NOT NULL,
...
PRIMARY KEY (`UserID`),
UNIQUE KEY (`UserID`,`UserType`)
) ENGINE=InnoDB;
CREATE TABLE `Teacher` (
`UserID` bigint(21) NOT NULL,
`UserType` enum('H', 'T') NOT NULL,
...
PRIMARY KEY (`UserID`),
FOREIGN KEY (`UserID`, `UserType`) REFERENCES `User` (`UserID`, `UserType`) ON UPDATE CASCADE
) ENGINE=InnoDB;
请注意,UserType
列必须在父类(super class)型和子类型表中以相同的方式定义,才能创建 FK 约束。我向 User 表添加了一个唯一键,以支持子类型中的复合 FK 约束。为了限制每个子类型表中的类型指示器,我们创建触发器:
DELIMITER ;;
CREATE TRIGGER check_teacher_insert BEFORE INSERT ON Teacher
FOR EACH ROW
BEGIN
IF new.UserType != 'T' THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Invalid UserType in Teacher';
END IF;
END;
;;
CREATE TRIGGER check_teacher_update BEFORE UPDATE ON Teacher
FOR EACH ROW
BEGIN
IF new.UserType != 'T' THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Invalid UserType in Teacher';
END IF;
END;
;;
DELIMITER ;
另一种方法是省略类型指示器,而仅使用触发器:
DELIMITER ;;
CREATE TRIGGER check_teacher_insert BEFORE INSERT ON Teacher
FOR EACH ROW
BEGIN
IF EXISTS (
SELECT 1
FROM Headmaster
WHERE UserID = new.UserID
) THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Invalid UserID in Teacher - already exists in HeadMaster';
END IF;
END;
;;
CREATE TRIGGER check_teacher_update BEFORE UPDATE ON Teacher
FOR EACH ROW
BEGIN
IF EXISTS (
SELECT 1
FROM Headmaster
WHERE UserID = new.UserID
) THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Invalid UserID in Teacher - already exists in HeadMaster';
END IF;
END;
;;
DELIMITER ;
关于php - ER图的映射特化,插入子表时重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42631438/
在我的公司,我们使用 SVN,但希望将来无缝切换到 GIT。这就是我开始学习 git-svn 的原因,它有望作为 svn 存储库的前端。 我尝试通过以下设置使用它: SVNREPO - 主 svn 存
在我正在编辑的手册页中,我看到以下内容: .Er ENOENT ENOENT 这到底是什么意思?我查看了 man(1) 手册页,但没有看到任何有关如何读取原始文件的内容。 最佳答案 有关 .Er 的详
我需要为考试练习 ER 建模,请记住,不会有任何第三方工具,它必须在纸上手动完成:(有什么建议可以避免错误吗? 最佳答案 我确信您已经在网络上进行了一些搜索。只是一些提示: 不要忘记注释您的基数(一比
根据这些说明,我正在尝试创建一个 ER 模型。和 这些说明: Total Escapes has a wide variety of tours on offer to its customers.
我使用陈表示法和理由制作了一个 ER 图。有人可以检查我的做法是否正确吗? 除此之外我还有一些其他问题: 为什么弱实体总是只有一和一? (粗箭头形式分配给has) 如何在 ER 图中处理 20 倍到
我做了一个项目,本质上是一个在线书店,人们可以在那里购买书籍并下订单。 我的数据库包含各种表,例如: 用户 user_shipping_address user_ payment_mode user_
我想创建这个,但我不知道它到底是怎样的。我的猜测是,它可能像 Employee 表中的外键一样工作,但同样,我不明白如何创建这样的东西。如果这个问题已经得到解答,我很抱歉,但我不知道如何搜索。 最佳答
假设您有一个带有 read 方法的 FileReader 类。 我知道类级别的属性可以证明拥有一个实例是合理的。但是,是什么阻止了通过将这些相同的属性拉入相应的 static read 方法的范围内来
所以我正在设计一个涉及电影、剧院、销售产品/纪念品的摊位的关系数据库。这是让我感到困惑的问题的一部分: “... 电影院由标识符、名称、地址(街道、市、省),以及影院的银幕总数。 ... 特许摊位是在
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
我正在做一个项目,我在图像中有一个特征,描述为一组 X 和 Y 坐标(每个特征 5-10 个点),这是该特征独有的。我还有一个包含数千个特征的数据库,每个特征都有相同类型的描述符。结果如下所示: my
我有以下问题: 仅使用二元关系,构建实体关系图用于以下描述。包括实体标签、主键字段、关系标签和关系的多重性。 “一家公司经营着几个汽车维修和服务车库,每个车库都有自己的唯一编号 (gargNo)。当车
最重要的是,我正在寻找一种快速(er)方法来多次设置/索引矩阵: for (i in 1:99000) { subset.data summaryRprof("subsetMatrix.out"
对于一个小项目,我正在为一个简单的股票跟踪应用程序创建一个实体关系图。 用户故事 产品由产品供应商销售。产品由办公室订购并交付给他们。可能需要一次或多次交货才能完成订单。该办事处订购的这些产品依次交付
当我尝试按照此处的说明 ( https://github.com/beyondcode/laravel-er-diagram-generator ) 操作时,出现以下错误。 Symfony\Compo
对不起,如果这太简单了,但我最近发现了很多关于 ER 建模的文档,但所有这些似乎都跳过了实际的实现,我只是想澄清一下。 子类型是否只是带有父类(super class)型的外键以及属于子类型的属性的第
我正致力于从 ER 图创建数据库,但我认为我的某些主键和外键不正确。我认为它们不正确的表是部分中的主键和注册表中的 FK 和 PK。我也不认为我正确地执行了我的 FK 约束,因此我无法检测到引用完整性
对于给定的 request-id 第三方服务会生成以下内容 字符串类型的推荐列表(通常为 5-10 条推荐) 字符串类型的治疗列表(通常为 5-10 次治疗) 字符串类型的服务列表(通常为 5-10
我正在学习如何在 MySQL 中创建数据库,理论部分之一是开发 ER 图。我在制作自己的项目时真的需要它吗?如果我想创建一个,我是在关系正常化之后创建它吗? 最佳答案 1).您并不被要求这样做。但它绝
我正在学校做这个项目,关于超市数据库,我有一个需要表示的限制,但我不知道如何表示。这是限制: “每个产品都有一个命名类别。没有类别的产品,每个产品只属于一个类别。 一个类别可以包含在另一个类别(子类别
我是一名优秀的程序员,十分优秀!