sql - 如何实现表之间的正确关系?
问题描述
大家好,
我打算为我的公司更改当前的后端。我打算用asp.net core和ef core创建新的网络服务。老实说,我坚持使用架构。
我不知道应该如何实现实体框架表之间的关系。员工职位不止一个。而且我不想为这个架构实现角色层。所以我创建了这样的表:Employees、Cashiers、Packers等。并设计它们是这样的:Employees (EmployeeId, EmployeeName, ...) Cashiers (EmployeeId, Fee, ...)
但我读过某处没有办法在 sql 中使用 1 对 1 关系。那么如何实现这种关系呢?
ER图: 实体关系
解决方案
如果您使用的是 SQL Server,那么我同意,不可能建立真正的一对一关系。
关系需要为 1:0..1,因为您需要先插入一行,然后再插入另一行。在最短的时间内,这种关系会是 1:0,然后会切换到 1:1。
要实现真正的一对一,您需要使用名为Constraint Deferrability的标准SQL 功能。不幸的是,据我所知,此功能仅在 PostgreSQL 和 Oracle 数据库中可用。在这些数据库上,您可以真正拥有 1:1 关系,因为约束不是在每次插入行时都验证,而是在事务结束时验证。
话虽如此,我也不会太在意。如果您使用数据库事务执行插入,那么我不明白为什么这会导致任何问题。使用如下过程:
开始交易。
插在桌子上
Employee
。插在桌子上
Cashier
。提交事务。
这应该确保您永远不会有没有相关表的悬空员工。
推荐阅读
- android - 没有内部类的 Android RecyclerView 项 OnClickListener
- python - Sympy 不会用小数简化或扩展指数
- angular - 如何在订阅方法中访问组件变量
- certificate - 在 Synology 上的 owncloud 中允许自己的签名证书
- python - 有没有一种方法可以使用列表理解来计算按元素分组的频率在特定条件下而不是其他元素?
- html - 修复 Firefox 中的背景图像位置(引导轮播)
- java - Java - 将带有列表变量的对象转换为对象列表
- javascript - 为什么从 Vue.js 应用程序获取时浏览器不显示 JSON 数据
- sql - 在临时表中插入多选语句
- r - 按值对堆积条形图进行排序