问题标签 [entity-relationship]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
655 浏览

oop - OO 中的 2x 一对多关系

想象一下这些关系:

  • 1 A 有很多 B
  • 1B有很多C...

相反:

  • C有1个B
  • B有1A
  • 通过传递性,C 有 1 A

为了在 DB 中建模这种关系,我们有:

为了在 OO 中建模这种关系,我们有:

并且... - objB 引用了 objA - objC 引用了 objB

如果objC有一个方法需要调用objA的一个方法,你会怎么做?

选项1。

我知道很多人会这样做,但我也知道这不好,因为 getA() 不是纯面向对象意义上的 B 行为。这样做就像进行过程编程一样。同意不同意?

选项 2。

让objC通过构造函数注入/setter直接引用objA和objB

这是一个好主意吗?但随后 objC 引用的 objB 也引用了 objA。这个可以吗?或者只要不是循环对象引用的情况,就可以接受?

选项 3。

将有问题的方法移动到objA,并通过参数传入objC。

我不确定这是否是一种选择。我认为它不会在所有情况下都有效。让 objC 中的方法减少到仅适用于其状态的最低限度,并让 objA 做 objA 之前或之后需要做的任何事情。

选项 4. (代表团)

将 runMethodXinA() 添加到 B,它调用

C 调用

我之前尝试过这种方法,但是 B 很可能最终会拥有与 A 一样多的方法,并且 B 和 A 中没有 1 个方法违反 DRY?

你的虽然是什么?还有其他选择吗?评论?建议?

0 投票
2 回答
313 浏览

sql-server-2005 - 数据库设计问题

我正在尝试为服务器和数据库清单设计一个数据库,并且我正在寻找一个好的数据库设计。我们有用于服务器集群、独立服务器和数据库的表。我想在数据库中表示以下关系:

从集群到服务器的一对多关系。
从数据库到集群/服务器的一对多关系。

困难在于第二种关系,因为集群和服务器位于不同的表中,并且集群由服务器组成。代表这种关系的最佳方式是什么?

0 投票
2 回答
114 浏览

ruby-on-rails - 在 Rails 中从 2 个变为多个

我有一个正在设计的 Rails 应用程序。我有一个单独的模型,只需要链接到一个模型中的两个。具体来说,我的“评估”有 2 个“成员”,一个评估者和一个评估者。他们也有一些其他的信息,但它们不应该与此相关。

代表这一点的最佳方式是什么?评估中的 2 个外键是最好的,还是评估和成员之间的多对多关系?是否有其他选择会更好?

我最初会考虑多对多,但由于关系的一侧有一个定义的数字,我质疑这里的适用性。据我所知,多对多通常意味着关系每一侧的数字是可变的。

0 投票
2 回答
2546 浏览

sql - 在 ASP.Net MVC 应用程序中自动更新上次修改日期

基本信息:

  1. ASP.NET MVC 应用程序

  2. 使用 ADO.NET 实体框架

  3. SQL 服务器 2005

我有一些表或多或少具有主要是一对多关系的层次结构。大多数(如果不是全部)都有 Last Modified 列,我的问题只是如何最好地确保该列在整个层次结构中正确更新。我宁愿在数据库级别自动完成它,我只是不确定如何。一位同事提到触发器,同时提到它们可能不是最好的方法。我不知道是在我用来管理模型的类中还是在数据库级别执行此操作。我宁愿不必单独更新每个引用,因为这会变得乏味,而且我必须为每个级别制作一堆单独的函数。

那么我的问题是:

  1. 有没有办法在数据库级别使用我可以调用的存储过程来做到这一点?

  2. 如果不是,你会建议我在应用程序方面做些什么来最好地以编程方式处理这个问题?

如果有更多信息有帮助,我很乐意提供,我很难弄清楚如何问这个问题。

0 投票
1 回答
1323 浏览

entity-framework - 在 ADO.NET 实体框架 UpdateException 方面需要帮助

我的数据库中有一个联系人表和一个电话表,在电话表中有一个“ContactId”列,其中一个键将电话引用到联系人。

在服务器的关键选项中,我将其删除选项设置为“级联”。

现在,当我尝试使用上下文删除联系人时:

上面的语句引发了一个 UpdateException,让我知道联系人仍有电话记录,其 ContactId col 设置为其 ID。

现在我知道我可以手动完成并首先删除所有相关电话然后删除联系人,但我正在寻找一种更有效的方法,我希望这一切都应该自动完成。

欢迎任何建议和实践。

谢谢。

0 投票
5 回答
3362 浏览

domain-driven-design - 考虑到领域驱动设计,您如何为角色/关系建模?

如果我有三个实体,Project、ProjectRole 和 Person,其中一个 Person 可以是不同项目的成员并处于不同的项目角色(例如“项目负责人”或“项目成员”) - 你将如何建模这种关系?

在数据库中,我目前有以下表格:Project、Person、ProjectRole Project_Person,其中 PersonId 和 ProjectId 作为 PK,ProjectRoleId 作为 FK 关系。

我真的很茫然,因为我提出的所有域模型似乎都违反了一些“DDD”规则。这个问题有什么“标准”吗?

我查看了 Streamlined Object Modeling 并且有一个 Project 和 ProjectMember 的示例,但 Project 中的 AddProjectMember() 会调用 ProjectMember.AddProject()。所以 Project 有一个 ProjectMember 列表,并且每个 ProjectMember 作为回报都有一个对该项目的引用。对我来说看起来有点令人费解。

更新

在阅读了有关此主题的更多信息后,我将尝试以下操作: 在我的领域中有不同的角色,或者更好的模型关系,它们属于某种角色类型。例如,ProjectMember 是一个独特的角色,它告诉我们有关人员在项目中所扮演的关系的一些信息。它包含一个 ProjectMembershipType,它告诉我们更多关于它将扮演的角色。我确实知道人们必须在项目中扮演角色,所以我将模拟这种关系。

可以创建和修改 ProjectMembershipTypes。这些可以是“项目负责人”、“开发人员”、“外部顾问”或其他不同的人。

一个人在一个项目中可以有很多角色,这些角色可以在某个日期开始和结束。这种关系由类 ProjectMember 建模。

ProjectMembershipType:即。“项目经理”、“开发人员”、“顾问”

0 投票
6 回答
248 浏览

language-agnostic - 数据库设计:偏爱抽象还是外键约束?

假设我们有这种情况:

在这种情况下,所有 3 个实体都具有基本相同的字段:

  • ID
  • 姓名
  • 与相应子代(Artist to Album 和 Album to Track)的一对多关系的外来物

所提供解决方案的典型解决方案是三个表,在一对多关系字段中具有相同的字段(ArtistID、AlbumID 等)和外键约束。

但是,在这种情况下,我们可以合并一种继承形式来避免相同字段的重复吗?我说的是这样的事情:


你觉得上面的设计怎么样?在这个数据库场景中加入“OOP 概念”是否有意义?

最后,您更喜欢第一种情况的外键约束还是更通用的(例如,存在将艺术家与 Track 链接的风险,因为没有检查输入器外键值是否真的是一张专辑)的方法?

..btw,想想看,我想你实际上可以检查一个艺术家的 RelField 的输入值是否对应一个专辑,也许有触发器?

0 投票
5 回答
347745 浏览

sql - 暂时关闭约束 (MS SQL)

我正在寻找一种方法来暂时关闭所有数据库的约束(例如表关系)。

我需要将一个数据库的表复制(使用插入)到另一个数据库。我知道我可以通过以正确的顺序执行命令来实现这一点(不破坏关系)。

但是如果我可以暂时关闭检查约束并在操作完成后重新打开它会更容易。

这可能吗?

0 投票
1 回答
387 浏览

linq - Linq 到实体自引用关系映射

如何使用 LinqToEntity 映射一个名为 category 的表,其中 Id 作为主键,该表具有名为 ParenCategoryId 的自我引用?

0 投票
3 回答
383 浏览

entity-relationship - 关于第三范式的问题

下表:

不是第 3 范式,因为 State 可传递地依赖于主键(EmpId)。

所以,如果我这样打破它: (EmpId,State) (State,PIN)

它在 3NF 中。

我也可以打破它: (EmpId,State) (EmpId,PIN) 它将再次处于 3NF 中。

但在第二种情况下,存在信息冗余,例如

第二次分解违反了哪个性质?