问题标签 [polymorphic-associations]

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 投票
2 回答
2032 浏览

ruby-on-rails - RoR: has_one “或其他”?(或者,没有继承的多态性。)

大家好,我的项目有一些有趣的要求。我需要一种has_one关系,它要么是一个类,要么是另一个类,但没有继承。如果这是唯一的方法,我可以摆脱继承,但是两个关联记录具有完全不同的数据并且根本不相关。

我需要弄清楚的是以下内容。

WhereFoo有一个赋值,类型为Baror Baz; 它们只共享一个公共列,所以也许我可以从中创建一个父对象。但是,如果我让它们继承自一个通用对象(当它们包含的数据确实是橙子和苹果时)我必须为记录制作一个表吗?如果记录是抽象记录,但孩子们不是,我可以侥幸逃脱吗?

我想现在你可以看到我的困难了。我对 RoR 很陌生,但到目前为止我很喜欢它。我敢肯定有办法解决这个问题,但如果我无法弄清楚它是什么,我会被诅咒的。

0 投票
6 回答
12668 浏览

database-design - 类似于数据库设计中的继承

假设您正在建立一个数据库来存储各种车辆的碰撞测试数据。您想要存储快艇、汽车和卡丁车的碰撞测试数据。

您可以创建三个单独的表:SpeedboatTests、CarTests 和 GokartTests。但是每个表中的很多列都是相同的(例如,执行测试的人员的员工 ID、碰撞方向(前、侧、后)等)。但是,很多列会有所不同,因此您不想将所有测试数据放在一个表中,因为您将有很多列对于快艇始终为空,还有很多列将始终为空对汽车来说是空的,而对于卡丁车来说,相当多的总是空的。

假设您还想存储一些与测试不直接相关的信息(例如被测试事物的设计者的员工 ID)。这些列似乎根本不适合放在“测试”表中,特别是因为它们将在同一辆车上的所有测试中重复。

让我说明一种可能的表格排列方式,以便您了解所涉及的问题。

这种结构有什么好处/坏处,实现这样的东西的首选方式是什么?

如果还有一些适用于您希望在 Vehicles 表中拥有的所有车辆的信息怎么办?CarTests 表会看起来像......

看起来这只是一个皇家混乱。应该如何设置这样的东西?

0 投票
8 回答
54752 浏览

ruby-on-rails - ActiveRecord - 查询多态关联

我正在使用多态关联来跟踪我的项目中的评论。所有非常直接的东西。

我遇到的问题是基于多态关联进行查询并从评论模型加入到它的所有者。

所以 ...

我有一个评论模型

还有一个 ForumTopics 模式:

我还有其他几个现在不重要的“可评论”模型。所有这些都有效。

我要做的是找到属于具有指定条件的 ForumTopic 的所有评论(在这种情况下,'featured' == true)。

当我尝试使用查找器加入模型时:

我收到以下错误:

不能急切地加载多态关联:commentable

使用 AR“包含语法”:

返回:

未找到名为“forum_topics”的关联;也许你拼错了?

如果我尝试使用表名而不是关联名称(字符串而不是符号)加入:

我懂了:

Mysql::Error: Unknown table 'comments': SELECT comments。来自评论 forum_topics WHERE (forum_topics.featured = 1)*

(您可以在此处看到底层查询的语法完全关闭,并且完全缺少连接)。

不确定我正在做的事情是否可行,还有其他方法可以达到所需的结果,但似乎应该是可行的。

有任何想法吗?有什么我想念的吗?

0 投票
1 回答
3785 浏览

ruby-on-rails - Rails 中的多态关联

多态关联在 Rails 中是如何工作的?他们的优势是什么?有没有办法belongs_to通过运行迁移来添加方法?

0 投票
1 回答
3163 浏览

mysql - 在同一列中引用外键

我正在为 mysql 设计一个 bd 方案。我的数据库存储 3 种点:a、b 或 c,路径由 n 对点组成:

路线 = [ (a1 or b1 or c1 ; a2 or b2 or c2), (a2 or b2 or c2 ; a3 or b3 or c3), ...]

(*) 一对点是 (m, n) 或从 m 到 n

So I'm storing pair of points together with their path's id. My problem is that I had to create two columns identifying the tables' name of m and n. table_from for m and table_to for n. Thus I'd have to use these two columns in my code to know what kind of points are saved in a route (path and point_pairs table). My question: Does MySql provide something for referencing n foreign keys in the same column? I already thought about joining a, b and c point tables but I'd have to add a type column to this new table and my php classes would become useless.

Thanks in advance!

0 投票
2 回答
35077 浏览

ruby-on-rails - 为什么在多态关联中不能有外键?

为什么在多态关联中不能有外键,比如下面的 Rails 模型?

0 投票
6 回答
3126 浏览

database - 在 StackOverflow 克隆中,Comments 表与 Questions and Answers 应该有什么关系?

在我正在构建的类似于 StackOverflow 的应用程序中,我试图确定我的Questions,AnswersComments表应该有什么关系。

我可以有Questions并且Answers两者都由一个表表示Posts

这将允许Comments有一个外键Posts

但是,如果QuestionsAnswers是单独的表,那么Comments每个表应该有什么关系呢?

更新:虽然选择的答案推荐了类表继承方法,这似乎是数据库方面的最佳方法,但 Rails ORM 不支持此选项。因此,在 Rails 中,我的模型必须使用单表继承,并且可能看起来像这样:

0 投票
4 回答
7349 浏览

jpa - 如何在 JPA 中表达多态关联?

态关联类似于外键或多对一关系,不同之处在于目标可能是多种类型之一(语言中的类,数据库中的表)。

我正在将我多年来一直使用的数据库设计从 PHP 移植到 Java。在旧代码中,我推出了自己的 ORM,由于多种原因,这并不是最优的。虽然我可能稍后会开始调整,最终可能会再次自己实现,但现在我想在我的实体类上使用现成的 ORM 和 JPA。

现在,关于数据库布局的一件事我不知道如何在 JPA 中表达:

我有一个Node和一个Edge存储图表的表格(一个 DAG,如果重要的话)。每个节点可以选择性地引用数据库中的另一个实体。这些实体可能在整个图表中被多次引用,也可能存在“孤立”实体,用户无法访问这些实体,但至少保留一段时间可能是有意义的。

这些对象在继承等方面完全不相关,但具有自然层次结构,类似于 Customer->Site->Floor->Room。事实上,几年前,我一开始只使用指向“父”对象的外键字段。但是,这种层次结构不够灵活,并开始分崩离析。

例如,我想允许用户在文件夹中对对象进行分组,一些对象可以有多个“父母”,而且关系也会随着时间而变化。我需要跟踪过去的关系,所以图的边有一个与之关联的时间跨度,它说明了从什么时候到什么时候那个边是有效的。

从节点到对象的链接存储在节点表的两列中,一列带有外部表中的 id,一列带有其名称。例如(省略了一些列):

可能有与使用 JPA 不同的解决方案。我可以更改表格布局或引入新表格等。但是,我已经考虑了很多,表格结构对我来说似乎还可以。也许还有第三种我没有想到的方式。

0 投票
2 回答
169 浏览

ruby-on-rails - 我可以缩小 Rails 中的多态关系检索到的类的类型吗?

我在 Rails 中有一个多态关系,但在一个特定的使用实例中,我只想检索特定类的记录。

这样做的最佳方法是什么?

0 投票
2 回答
2722 浏览

ruby-on-rails - 与 Rails/ActiveRecord 的多态 habtm 关系

我将如何使用 Rails/ActiveRecord 创建多态 has_and_belongs_to_many 关系?

我看到的大多数示例都涉及创建一个 belongs_to 关系,这将我的多态端限制为仅与一个父级相关:

表:任务

表:Tasks_Targets

表:客户商店

表:软件系统

在这种情况下,CustomerStore 和 SoftwareSystem 都属于“Targetable”类型。据我了解,如果我像大多数示例所示那样实现多态关系,我只能将 Targetable 与 Task 关联一次

一些澄清可能会有所帮助,因为大多数在线搜索仍然无法解释这种关系背后的一些理论......

谢谢!