问题标签 [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.
sql - 这个实体关系能不能更规范
艺术家
艺术家文件夹
文件夹
草图
我现在想要的是这样的:
1 位艺术家有 N 个草图。
我将不得不向表 Sketch 添加一个新字段:ArtistId
当我为文件夹插入草图时,此字段将始终为空/null。
你知道更好的设计吗?
c# - 在实体框架中组合类型表和表继承
假设我有一个 table+class A
,另一个 table+classAType
代表不同类型的A
,以及一个 table+classB
继承自A
.
B
是某种类型的A
,但它太复杂了,无法A
在数据级别与其他类型的 相适应,并且需要在模式级别拥有自己的表 - 当然它是自己的类。
B
仍然是 的一种A
,所以我想在AType
表示中有一个记录B
,并且type
归档在A
记录中实际上是B
s 指向该记录AType
。我还希望能够添加更多继承自的表+类A
,并对其 PK 进行硬编码。
现在,如果我直接使用 SQL,我会A
为 PK 的继承者创建负值记录。这样,AType
在数据级别添加的具有正 PK 的新 s 将永远不会与硬编码模式级别的冲突,并且作为一个很好的奖励,我可以很容易地分辨出哪些记录A
是硬类型的,哪些是软类型 - 无需查看AType
。
我是 Entity Framework 的新手,所以我不想在尝试传统方式之前应用黑客式的解决方案。那么在实体框架中解决这个问题的惯例是什么?
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 吗?这与我在这些主题上阅读的内容并不完全相同。
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 匹配,如果联系人是一个人
- 如果联系人是组织,则名称匹配
谢谢
伊恩
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)
提前致谢!
doctrine-orm - Doctrine2:映射超类上的 OneToMany
我的数据库结构如下:
工作:
- CTI表工作
- MappedSuperclass表AbstractImageWork扩展Work
- 扩展AbstractImageWork的决赛桌PhotoWork
评论:
- MappedSuperclass表注释
- 扩展评论的决赛桌WorkComment
WorkComment与Work具有 ManyToOne 关系:
Work与WorkComment具有 OneToMany 关系:
问题是 Doctrine 在更新模式时给了我这个错误:
我想这与夹在Work和PhotoWork中间的 MappedSuperclass AbstractImageWork有关,但我实际上并没有将这种关系放在 MappedSuperclass 上,而是放在 CTI 表上.. 那么为什么 Doctrine 会这样呢?
有任何想法吗?
inheritance - Doctrine2 继承和查询构建器
我将继承与 Doctrine 2.1 一起使用:
Fiche 是主实体,Artist 是从 Fiche 派生的
所以:Fiche -> 艺术家
然后我有这个方法,在另一个名为 Abonnement 的存储库中:
这是 Abonnement ORM 定义:
我在这里遇到的问题是我总是通过 Artist 实体而不是 Fiche,我得到了这个错误:
在此上下文中不允许使用“Teelt\FicheBundle\Entity\Artist”类型的表达式。
所以我想我必须从我的艺术家那里获取 Fiche ......这听起来很糟糕,因为它是同一个对象!
c# - 每层次表和未来证明
我正在开发一个使用 NHibernate 将“命令”存储在数据库中的应用程序。每个命令都有一组参数。例如,“sleep”命令有一个持续时间,“set text”有一个字符串值。所有这些命令都派生自相同的Command
基本类型。
我希望将来可以添加其他命令,以尽可能减少对数据库的影响。我最初的反应是使用按层次结构表的模式,因为唯一需要修改的模式是将一列添加到命令表中。
我还考虑使用 TPH 模式,但映射通用列而不是特定列,然后将它们转换为类本身中的特定(强类型)属性值(即使用强类型公共属性映射映射的通用字符串属性) . 这样,如果我的列数等于任何命令可能需要的最多参数,我根本不必更改表。不过,这些在我的脑海里似乎有点骇人听闻......
作为数据库设计和 NHibernate 使用的相对新手,有人可以指出这些方法中的漏洞,或者提出更好的建议吗? 我试图避免更改架构(尽可能),同时允许未来的扩展和简单的 C# API。
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 的集合。有谁知道我怎么能做到这一点?
mysql - 2种用户的数据库设计
我有两种方法让用户在我的网站上创建帐户。
一种。普通登记表(电子邮件、密码) b.通过 Facebook Connect 注册(fb_userid、电子邮件)
使用 MySQL(InnoDB 引擎)实现这一点的最佳实践是什么?
我的做法:
你有什么建议?