问题标签 [class-table-inheritance]

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 投票
8 回答
64811 浏览

sql - 我们如何实现 IS-A 关系?

我们通过将一个表的 PK 作为 FK 添加到另一个表来实现一对多关系。我们通过将 2 个表的 PK 添加到第三个表来实现多对多关系。

我们如何实现 IS-A 关系?

实体是技术人员和行政人员,两者都是员工。我可以在表 EMPLOYEE(id, name, surname, role , ...AdminFields..., ...TechFields...)中使用一个额外的字段

但我想探索 IS-A 选项。

编辑:我按照唐尼的建议做了,但没有角色字段。

0 投票
3 回答
918 浏览

ruby-on-rails - Rails 类表继承 gem、伪继承和缺失方法

我正在修改现有 Rails 应用程序的一部分以使用 Class-Table-Inheritance gem (https://github.com/brunofrank/class-table-inheritance)。一切都很好,除了我在我的超类中定义了一些实例方法——Person,所有子类都需要能够访问这些方法。例如,full_name,它返回连接的名字和姓氏,或者cite_name,它返回第一个名字和姓氏。由于 CTI gem 实际上并没有使用 Ruby 继承(所有子类仍然从 ActiveRecord::Base 继承,并且 gem 做了一些时髦的巫术来将 ActiveRecord 字段链接在一起),我无法在我拥有的子类中访问这些方法创建的。关于解决这个问题的任何想法?我对 STI 不感兴趣,但我愿意分叉和破解这个特定的 CTI gem,或者查看其他解决方案。

0 投票
1 回答
2373 浏览

doctrine-orm - 如何在 Doctrine 2 中通过 XML 映射使用“类表继承”

我正在尝试将 Doctrine 2 的“类表继承功能”与 XML 映射(Symfony 2 PR 7)一起使用。

XML 超类 CatalogProduct 的 XML 定义:

XML 超类 CatalogBook 的 XML 定义,应该扩展 CatalogProduct:

./php 应用程序/控制台原则:生成:实体“CatalogBu​​ndle”

工作正常(实体生成),但 CatalogBook 原来是一个“简单”类,而不是扩展 CatalogProduct。

导致异常:

我想,我在 XML 中遗漏了一些东西,它告诉 CatalogBook 实体扩展 CatalogProduct。但是我在 Doctrine 2 文档或 Google 上找不到任何有帮助的东西。

0 投票
2 回答
808 浏览

mysql - CakePHP 替代类表继承?

我想在 CakePHP中创建一个类表继承模型。

我希望有一个类似于ProductBase表格的模型product_bases来保存每个产品应具有的所有基本信息,例如 upc、价格等。

然后让特定的产品类型模型扩展它。例如ProductRing,使用表格product_rings来保存特定的戒指信息,如 ring_size、center_stone 等。

然后,如果我直接从 ProductBase 模型中检索数据,让它提取所有类型:

或仅查找特定类型:

在 CakePHP 中有这样的可能吗?如果没有,我应该怎么做?

做这样的事情的正确蛋糕方式是什么?

0 投票
4 回答
3591 浏览

database - 如何更改 Doctrine2 CTI 继承中的实体类型

您如何(如果可能的话)使用 Doctrine2 更改实体类型,使用它的类表继承?

假设我有一个Person父类类型和两个继承类型Employe,并且Client. 我的系统允许创建一个 Person 并指定它的类型——这很容易实现——但我也希望能够将这个人从 Employe 更改为 Client,同时维护Person- 级别信息(它是 id 和其他相关的记录)。

有没有一种简单的方法可以用 Doctrine2 做到这一点?

0 投票
2 回答
829 浏览

doctrine-orm - 如何转换实体留下它的ID

有一些实体(地区、国家、城市)使用STI(甚至 CTI)。如何将 Country 转换为 City 留下旧 ID?

0 投票
1 回答
1031 浏览

zend-framework - Zend Framework 1.11 + Doctrine 2 + 生成实体的类继承映射 (YAML) 问题

我在尝试实施 CTI 时遇到很多问题

首先,我为我的实体类使用自定义加载器

这个想法是application\Entities用于没有命名空间的类$user = new Users();

然后我定义了类继承

然后我手动创建了类 Work 来扩展 Profiles

第一个问题从 2.0.0 (2.0.1) 开始,当我使用控制台工具的generate-entities时,我得到一个错误,即我没有WorkWork的 id,这很奇怪,因为恕我直言,它与扩展Profiles和扩展的想法相矛盾id已经定义了。

但是,我尝试idWork该类添加一列,但随后我收到一条消息,指出我已经有一个列id。哦!

我尝试为 PK 添加一些其他列名,但实际上我得到了一个不必要的额外列,id因为还创建了正确的继承列。在 CTI 中,我应该有一个 FK 列,并且没有其他 PK 具有自动生成的值。

所以我做了坏事来破解教义类并删除对丢失ID的检查。丑陋但有效。实体开始正确生成,数据库结构很好。

后来我发现所有这些奇怪的行为都是由于教义 2 中的一个错误,在 2.0.5 中得到了修复。

好吧,我尝试了 2.0.5 并且遇到了完全相同的问题,所以我认为错误出在我的代码中。

我在学说的 jira 中提交了一个错误,我得到的回答是我的定义是错误的,我需要子类的 id(并且参考了我们所知道的文档很差,尤其是对于 YAML 映射)。我放弃并坚持我的黑客。

后来我尝试使用 2.0.6 和 2.1,但是对于这些版本,我的实体不再更新,但是每次我使用 generate-entities 时,新的类定义都被附加到末尾,所以会有重复

我的问题是:

这是教义的问题还是我做错了?

如果在我身上,映射 CI 的正确方法是什么

0 投票
1 回答
260 浏览

database-design - 继承与数据库设计

当您通过数据库模型中的类表继承关系对继承进行建模时,您是否...

1)包括一个属性(两个子提示的布尔值,更多子提示的字符串),它标识每条记录的特定子提示?

2) 将此标识作为外键包含到包含所有可能子类型描述的表中?

3)以上都不是,并且依赖于子表中的“反复试验”查找需要几次?

0 投票
1 回答
2004 浏览

php - 如何在 Doctrine2 中为类表继承指定外键列?

如何使用 Doctrine 2 中的类表继承指定用于外键关系的列?例如,采取以下两个类:

有了这个,Doctrine 期望一个表结构有点像这样:

有一个employee.person_id指向的外键person.id。但是我怎样才能告诉 Doctrine 使用哪些列呢?我假设person.id引用来自类@Id上的注释Person,但如果我想创建 FK 来person.ssn代替(这是可以想象的,因为 SSN 自然是唯一的)。

如果我有一个旧数据库employee.person_id被调用employee.p_id怎么办?

0 投票
2 回答
1561 浏览

sql - SQL 一对多表与多个一对一关系

我正在开展一个具有以下目标的项目:用户可以创建一个挑战并选择一个可选的竞争对手来参加这个挑战。挑战会生成每日条目,并将跟踪这些条目的统计信息。

基本的 User 和 Entry 实体如下所示:

我遇到问题的作品是具有竞争对手概念的挑战作品。我可以看到两种方法。

第一种方法的问题是参照完整性很难,因为现在有两列 userId 驻留(ownerId 和 CompetitionId)。为了设置外键,我必须为所有内容(owner_entries、competitive_entries、owner_stats 等)创建两个表。

第二种方法解决了这个问题,并且具有一些优势,例如将来允许多个竞争对手。但是,我不能再用这种方法做的一件事是在单个用户而不是整个挑战表中强制挑战名称唯一性。此外,寻找挑战所有者等任务现在变得更加棘手。

挑战表的正确方法是什么?无论如何以开发人员友好的方式设置这些表,还是我应该一直跳到类表继承并在那里管理所有者/竞争对手的概念?