问题标签 [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 投票
1 回答
126 浏览

sql - 这个实体关系能不能更规范

艺术家

艺术家文件夹

文件夹

草图

我现在想要的是这样的:

1 位艺术家有 N 个草图。

我将不得不向表 Sketch 添加一个新字段:ArtistId

当我为文件夹插入草图时,此字段将始终为空/null。

你知道更好的设计吗?

0 投票
1 回答
193 浏览

c# - 在实体框架中组合类型表和表继承

假设我有一个 table+class A,另一个 table+classAType代表不同类型的A,以及一个 table+classB继承自A.

B是某种类型的A,但它太复杂了,无法A在数据级别与其他类型的 相适应,并且需要在模式级别拥有自己的表 - 当然它是自己的类。

B仍然是 的一种A,所以我想在AType表示中有一个记录B,并且type归档在A记录中实际上是Bs 指向该记录AType。我还希望能够添加更多继承自的表+类A,并对其 PK 进行硬编码。

现在,如果我直接使用 SQL,我会A为 PK 的继承者创建负值记录。这样,AType在数据级别添加的具有正 PK 的新 s 将永远不会与硬编码模式级别的冲突,并且作为一个很好的奖励,我可以很容易地分辨出哪些记录A是硬类型的,哪些是软类型 - 无需查看AType

我是 Entity Framework 的新手,所以我不想在尝试传统方式之前应用黑客式的解决方案。那么在实体框架中解决这个问题的惯例是什么?

0 投票
2 回答
148 浏览

database-design - 指向各种表的 FK 列

有人建议我在项目中使用此处描述的表格,虽然我不能说为什么,但我认为这不是一个好主意。

MyTable(MyTableId PK,类型 INT NOT NULL,MyForeignKey INT NOT NULL)

MyForeignKey 可以根据 Type 的值指向各种表中的数据。当然,我们不能使用这样的模型来强制执行 FK 完整性,但是这个论点是否足以不使用它?

我会给你一个可以使用它的例子。假设您在系统中有一个 Notes 表来保存有关各种对象的注释;关于用户、文档等的注释。通常,我会这样建模:

注释(NoteId PK、Text VARCHAR(4000)、UserId INT NULL、DocumentId INT NULL、...)

我同事的建议是换一张这样的桌子:

注释(NoteId PK、文本 VARCHAR(4000)、ObjectType、ObjectId)

在第二个实现中,ObjectType 会告诉我们 ObjectId 是指向 Users 表还是 Documents 表中的一行。它的优点是如果我们想添加另一种类型的对象,数据库结构和代码需要的修改较少。

每种解决方案的优缺点是什么?

注意:我们永远不会拥有无数的对象类型。它应该保持在 10 以下。

事实上,我们的现实生活场景要复杂一些。它与权限系统有关,在该系统中,用户可能有权或可能无法访问各种类型的对象(文档、注释、事件等)

所以现在在我的数据库模型中,我有这些对象的表和其他表来建立它们与用户之间的关系(UserDocuments、UserNotes、UserEvents 等)。权限是通过这些链接表中的属性设置的。

我的同事提议使用一个单一的权限表,而不是像这样

权限(PermissionId PK、UserId INT、ObjectType、ObjectId、...其他权限字段...)

这是一个好主意吗?

另外,我们可以称之为 EAV 或 Open Schema 吗?这与我在这些主题上阅读的内容并不完全相同。

0 投票
2 回答
298 浏览

python - SQLAlchemy,使用表继承过滤连接查询

首先,很抱歉,如果事实证明我要做的是在这里冒烟,我绝不是 DB 或 SQLA 专家。=)

我有两个类,Person 和 Organization,它们使用表继承从 Contact 继承。( Person.id 是 Contact.id 的一个 fkey ),它工作正常。

我想从搜索框中搜索并获取所有联系人的列表。通常,当我完成一系列事情时,我会这样做:

然后在其他地方执行查询。问题是我想取回一个联系人对象列表,但我想过滤 Organization.name、Person.name_last 和 Person.name_first,所有这些都来自在搜索表单上的“名称”框中键入的值。我不知道如何用一个查询来做到这一点,甚至不确定它是否可能。不过,我肯定想避免两个单独的查询具有交错的结果。

是否有一些过滤功夫可以让我做到以上几点?IE

  • 取回所有联系人:
    • 有 name_last 或 name_first 匹配,如果联系人是一个人
    • 如果联系人是组织,则名称匹配

谢谢

伊恩

0 投票
1 回答
207 浏览

ruby-on-rails - Ruby on Rails 继承

我想在我的 Rails 应用程序中实现以下模型结构,其中包含 3 个单独的表 - Value、DecimalValue 和 TextValue - 其中 DecimalValue 和 TextValue 继承自 Value。这个想法是 Value 应该只包含 id,子表应该引用那个 id。我怎样才能实现这个基于o ROR?

值模型 (id, type) DecimalValue (value_id, value:decimal) TextValue (value_id, value:string)

提前致谢!

0 投票
3 回答
5442 浏览

doctrine-orm - Doctrine2:映射超类上的 OneToMany

我的数据库结构如下:

工作:

  • CTI工作
  • MappedSuperclassAbstractImageWork扩展Work
  • 扩展AbstractImageWork的决赛桌PhotoWork

评论:

WorkComment与Work具有 ManyToOne 关系:

Work与WorkComment具有 OneToMany 关系:

问题是 Doctrine 在更新模式时给了我这个错误:

我想这与夹在WorkPhotoWork中间的 MappedSuperclass AbstractImageWork有关,但我实际上并没有将这种关系放在 MappedSuperclass 上,而是放在 CTI 表上.. 那么为什么 Doctrine 会这样呢?

有任何想法吗?

0 投票
2 回答
1747 浏览

inheritance - Doctrine2 继承和查询构建器

我将继承与 Doctrine 2.1 一起使用:

Fiche 是主实体,Artist 是从 Fiche 派生的

所以:Fiche -> 艺术家

然后我有这个方法,在另一个名为 Abonnement 的存储库中:

这是 Abonnement ORM 定义:

我在这里遇到的问题是我总是通过 Artist 实体而不是 Fiche,我得到了这个错误:

在此上下文中不允许使用“Teelt\FicheBundle\Entity\Artist”类型的表达式。

所以我想我必须从我的艺术家那里获取 Fiche ......这听起来很糟糕,因为它是同一个对象!

0 投票
3 回答
182 浏览

c# - 每层次表和未来证明

我正在开发一个使用 NHibernate 将“命令”存储在数据库中的应用程序。每个命令都有一组参数。例如,“sleep”命令有一个持续时间,“set text”有一个字符串值。所有这些命令都派生自相同的Command基本类型。

我希望将来可以添加其他命令,以尽可能减少对数据库的影响。我最初的反应是使用按层次结构表的模式,因为唯一需要修改的模式是将一列添加到命令表中。

我还考虑使用 TPH 模式,但映射通用列而不是特定列,然后将它们转换为类本身中的特定(强类型)属性值(即使用强类型公共属性映射映射的通用字符串属性) . 这样,如果我的列数等于任何命令可能需要的最多参数,我根本不必更改表。不过,这些在我的脑海里似乎有点骇人听闻......

作为数据库设计和 NHibernate 使用的相对新手,有人可以指出这些方法中的漏洞,或者提出更好的建议吗? 我试图避免更改架构(尽可能),同时允许未来的扩展和简单的 C# API。

0 投票
1 回答
662 浏览

java - 如何将每个子类的集合从同一层次结构映射到一个拥有类?

有谁知道如何使用由 Hibernate 4.0.0.Final 支持的 JPA 2.0 注释将同一层次结构中的每个子类的集合映射到一个拥有的类上?

有点复杂,所以这里有一个例子。层次结构类如下所示:

这一切看起来都很好,当我持久化对象时,我可以看到它们以正确的鉴别器和正确的所有者进入数据库。

这是我的“拥有”类——它的注释没什么特别的:

2 List 集合具有吸气剂。当我调用 getSubClassOnes() 时,我得到一袋所有关联实体,作为 SubClassOne 类型,即使是那些在数据库中具有 SubClassTwo 鉴别器的实体。当我调用 getSubClassTwos() 时,我得到似乎是一袋 SubClassTwos,但是当我在运行时迭代集合时,它会爆炸

初始化(AbstractPersistentCollection.java:379)[hibernate-c at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:112)[hibernate-core-4。在 org.hibernate.collection.internal.PersistentBag.iterator(PersistentBag.java:266) [hibernate-core-4.0.0.Final.jar:4.0.0.Final]

我想要发生的是 getSubClassOnes() 返回一个集合,其中包含与具有类 SubClassOnes 的所有者相关联的集合,而 getSubClassTwos() 返回一个具有相关 SubClassTwos 的集合。有谁知道我怎么能做到这一点?

0 投票
5 回答
1340 浏览

mysql - 2种用户的数据库设计

我有两种方法让用户在我的网站上创建帐户。

一种。普通登记表(电子邮件、密码) b.通过 Facebook Connect 注册(fb_userid、电子邮件)

使用 MySQL(InnoDB 引擎)实现这一点的最佳实践是什么?

我的做法:

你有什么建议?