首页 > 解决方案 > 如何实现表之间的正确关系?

问题描述

大家好,

我打算为我的公司更改当前的后端。我打算用asp.net coreef core创建新的网络服务。老实说,我坚持使用架构。

我不知道应该如何实现实体框架表之间的关系。员工职位不止一个。而且我不想为这个架构实现角色层。所以我创建了这样的表:EmployeesCashiersPackers等。并设计它们是这样的:Employees (EmployeeId, EmployeeName, ...) Cashiers (EmployeeId, Fee, ...) 但我读过某处没有办法在 sql 中使用 1 对 1 关系。那么如何实现这种关系呢?

ER图: 实体关系

标签: sqlasp.netdatabaserelational-databaseentity-framework-core

解决方案


如果您使用的是 SQL Server,那么我同意,不可能建立真正的一对一关系。

关系需要为 1:0..1,因为您需要先插入一行,然后再插入另一行。在最短的时间内,这种关系会是 1:0,然后会切换到 1:1。

要实现真正的一对一,您需要使用名为Constraint Deferrability的标准SQL 功能。不幸的是,据我所知,此功能仅在 PostgreSQL 和 Oracle 数据库中可用。在这些数据库上,您可以真正拥有 1:1 关系,因为约束不是在每次插入行时都验证,而是在事务结束时验证。

话虽如此,我也不会太在意。如果您使用数据库事务执行插入,那么我不明白为什么这会导致任何问题。使用如下过程:

  1. 开始交易。

  2. 插在桌子上Employee

  3. 插在桌子上Cashier

  4. 提交事务。

这应该确保您永远不会有没有相关表的悬空员工。


推荐阅读