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

sql-server - 数据库子类型/超类型

我有表格“作物”、“玉米”、“大豆”和“谷物”。Crop 中的一个条目对应于其他表之一中的单个条目。这里的问题是 Crop 应该与其他表中的一个是一对一的,但不能超过一个。需要 Crop 表是因为它结合了其他表中的许多公共数据,并使查询信息在代码方面变得更加容易。从这个工作中,我有几个有缺点的策略......

A. 将三列放入 Crop 以获取其他表的 ID,然后填充列“Corn”(如果它是玉米作物等)...

缺点:浪费列,每当我想查看它是什么作物时,都必须检查所有三个列

B. 合并 Corn、Soybean 和 Grain 表,并添加一列来表示它是什么类型的作物。

缺点:每张表有不同的列,每行浪费和不必要的列

可以说我被困在这里了吗?还是有处理此类案件的策略?谢谢。

0 投票
0 回答
366 浏览

php - Yii 框架中使用 MySQL 视图的类表继承

我想在 Yii 中实现类(多)表继承,但是我发现这很困难,所以我打算使用 MySQL 视图的方法。

这是我的表和类的示例:

CmsAd是一个表,它继承了CmsContent表中包含的所有字段:

CmsAd_View是一个 MySQL 视图,包含这两个表的连接:

以下是这些表的型号:

注意 CmsAd 的表名视图CmsAd_View

现在我想实现 CRUD CmsAd。可以使用find()方法,因为它从视图CmsAd_View中检索。

我的问题是使用insert()update()方法,我们必须在其中插入和更新表CmsAdCmsContent

有没有人尝试在 Yii 中实现表继承的视图方法?

0 投票
1 回答
1493 浏览

php - Doctrine 2 类表继承 YML

我正在尝试在 ZF2 和 Doctrine 2 中使用类表继承。我的实现非常简单。我想我已经设置好了类结构,但我认为某处的某些设置可能存在问题。不幸的是,我找到了很多关于类设置的文档,但没有找到很多关于 YML 实现的文档。每个人似乎都求助于使用教义工具来生成一切。就事物的设置方式而言,使用学说工具有点问题,尤其是在使用 ZF2 时。另外,我认为这是一个学习机会。所以,这就是我所拥有的:

当前问题:我没有从子类/表中获取任何数据:

通用注释类/表:

客户备注类/表(继承通用备注):

YML 映射注:

客户备注映射:

通用注释实体

客户备注实体:

通用注意夹具数据:

客户备注夹具数据:

0 投票
1 回答
372 浏览

mysql - 用于分类数据的高效 MySQL 数据库设计

我是 Web 开发一年级的学生,我正在寻找一些关于 MySQL 数据库设计的建议,以扩展我最近为作业创建的网站。

我目前正在开发的网站将用作模拟摄影设备的在线数据库。目前它允许用户搜索或使用过滤器来查找数据库中的特定摄像机。每个相机在网站上都有自己的页面,显示信息和图片等,理想情况下,我希望注册用户可以编辑这些信息,比如 wiki。

当前数据库设计:

目前,相机数据的数据库设计如下:

-->当前数据库设计.png

您可以在图表中看到我有一个“相机”表,其中包含所有带有基本信息的相机。然后,为了规范化和过滤目的,我为现有的所有不同“相机类型”以及我的数据库中的相机所属的所有“相机品牌”提供了附加表。

现在我想做的是扩展我的数据库,以便能够存储每台相机的技术规格,例如镜头、闪光灯、快门速度等,但我意识到其中一些信息的相关性取决于相机类型(例如例如紧凑型相机具有固定镜头,但 SLR 具有可变镜头安装座),理想情况下,我只想在相机页面上显示与其相机类型相关的信息。

-- 数据库重新设计 --

我当时的想法是,我可以将相机的信息存储在两个表中 - 将现有相机表与一般相机数据(如名称和发布年份)一起保存,但也可以在我的数据库中为每种相机类型(SLR、TLR、紧凑,即时...),每个都将存储与该相机类型相关的技术规格,并使用“相机”表中的“相机ID”作为外键来链接两个表之间的相机数据。

虽然我不确定这是否是最好的解决方案 - 也许将相机数据分布在两个表上太混乱和过于复杂?我还想知道如果用户决定他们想要更改相机的类型,这是否会在以后引起问题,因为该相机记录必须移动到另一个表并将其现有数据整合到其中。此外,如果某些相机类型具有相同的变量属性,我将在不同的相机类型表中复制列,我不确定这是否有效。

我能想到的唯一另一种方法是保持现有设计,并在“相机”表中添加更多列,以获取所有可能适用的技术规范,但这只是意味着它可能有点低效会有很多列可能与每台相机都不相关,并且会保持空白(尽管这可能不是一个大问题??)

对不起,如果有很多信息需要接受,但我有点难过!任何意见是极大的赞赏。提前致谢 :)

0 投票
1 回答
123 浏览

php - 多种账户类型?

我目前正在使用 Symfony2 和学说。我正在创建一个“创建帐户”页面。页面上将有 2 种不同类型的帐户可用,normal-users一种用于companies.

我有一个名为Account该表的实体(表),其中包含username,passwordsalt列。

如果公司登录,我想从company-table 获取公司信息,如果normal-user登录,我希望从user-table 获取信息。

我一直在考虑有一个名为的列usertype告诉我它是什么类型,然后如果用户类型是company检索公司信息实体,如果它是user检索用户信息实体(对应于id帐户) .

这是解决这个问题的好方法吗?还是我应该有 2 张不同的桌子?AccountUser 和 AccountCompany?

0 投票
1 回答
426 浏览

php - ZF2 + Doctrine2 类表继承挖掘

我在让我的学说实体提取到我的 ZF2 表格时遇到问题。我对 ZF2 和 Doctrine(以及类表继承)都很陌生。我已经阅读了几乎所有的 ZF2 和 Doctrine 文档,但似乎仍然无法弄清楚如何让它工作。

为了简要解释系统,有一个名为 Policy 的主要实体。Policy 实体包括一个 Proposer 实体和一个 PolicyProduct 实体,以及其他几个列。

我在 PolicyProduct 实体中使用类表继承,因为我有 3 种不同的产品类型,每种都需要不同的数据。3 个产品实体是 TouringCaravan、StaticCaravan 和 Parkhome。

Policy 实体只能有 1 个 Proposer 和 1 个 PolicyProduct。

所有实体的每一列都有 getter 和 setter 方法。

我显示的表单包括来自 Policy 实体和 PolicyProduct 实体的字段。

为了显示表单,我首先获取 Policy 实体和 Policy Fieldset。然后将 Policy Fieldset 设置为基础。

然后我获取 PolicyProduct 特定字段集并将其添加到 policyFieldset。

然后我将 policyFieldset 添加到表单中,将其与 Policy 实体绑定,并返回完成的表单。

需要注意的是,我将DoctrineModule\Stdlib\Hydrator\DoctrineObject as DoctrineHydrator用作每个字段集的 hydrator。init()然后我在每个字段集的方法中调用以下内容 。

如果我填写表格并保存到数据库,我可以看到数据正确存储在表中。如果我随后尝试将同一表单与实体水合,则没有任何 PolicyProduct 实体值被映射。但是,策略实体中的值已正确补充。

如果我转储出来$policyEntity->getPolicyProduct()我可以看到所有数据,这意味着实体正在正确保存和检索信息,问题似乎是当我尝试将实体数据提取到表单字段集时。

我希望这是有道理的,但如果没有,请告诉我,我会尽力澄清。

谢谢


以下是主要实体

政策

政策产品

TouringCaravan - PolicyProduct 继承表的示例

0 投票
1 回答
7781 浏览

symfony - 单表继承实体可以扩展类表​​继承实体吗?

这是我的基础/父实体,设置它的子实体使用他们自己的表。

飞机实体。一个简单的孩子,做得很好

服务实体。一个复杂的孩子,它本身正在使用单表继承。

服务实体的子实体


app/console doctrine:schema:validate没有发现错误,但app/console doctrine:schema:update --force不会生成“服务”表,该表应该使用单表继承。似乎服务实体定义被简单地忽略了。

当然我可以手动为这个表创建 SQL,但是应用程序会增长,在某些时候我需要使用迁移。

有人能指出我的方向吗?谢谢。

找到了一个重复的,但是目前还没有答案,请看:Doctrine 2 multi level inheritance

编辑:
当我也将类表继承用于第二级(@ORM\InheritanceType("JOINED")对于Service实体)时,它工作得很好。参见:Doctrine2 多级继承

0 投票
1 回答
916 浏览

mysql - 店铺产品的类表继承:如何下单

我正在尝试创建一个电子商务/商店系统,我决定根据这个很好的答案在 SQL 设计中选择类表继承设计。

现在我有以下表结构:

这适用于在网站上展示产品。但是,如果我想订购一些产品,这将如何运作?

如果我的产品有一个表,我可以将product_id作为外键分配给关系表,但是对于多个表,这似乎不再可能了。甚至可以使用类表继承吗?

我环顾四周,大多数答案/教程似乎都集中在产品的表示上,而不是客户的订单上。

0 投票
1 回答
7876 浏览

mysql - 错误:无法使用标识列密钥生成( TABLE_PER_CLASS )

我正在使用 Hibernate 来保存所有实体都继承自基本抽象实体的实体。对于所有具体实体,分别有数据库表,具有自动增量主键列。但是使用 GenerationType 作为“AUTO”或“IDENTITY”会出错。我希望代表每个具体实体类的数据库表中的所有记录都应该具有顺序递增的 ID 值。

com.something.SuperClass:

com.something.SubClass:

给了我这个例外:

我知道如果我将 GenerationType 从“AUTO”更改为“TABLE”可以解决这个问题,但是这个解决方案的问题是,生成的密钥的顺序不准确。它在键之间留下了很大的间隙。

我正在寻找允许所有表使用由 Mysql AutoIncrement 主列生成的 Auto Incremental 值的解决方案。

在此先感谢大家。

PS:我已经浏览过以下帖子: Cannot use identity column key generation with <union-subclass> (TABLE_PER_CLASS)

0 投票
1 回答
2180 浏览

symfony - 类表继承,repository->findByTypeId

我对 Symfony 和 Doctrine 还很陌生,我在尝试设置类表继承时遇到了问题。我有一个名为“TeamActionTarget”的父实体,以及两个名为“Player”和“Competition”的子实体。我的父实体的模型如下:

Doctrine2 为我生成了一个父表,其中包含 2 个字段“id”和“type_id”,以及 2 个子表,它们具有自己的独特字段。我现在要做的是从表单发布的整数值中按类型检索所有子项。

所以在控制器中,我编写了这个:

但是 Symfony2 向我返回一个错误: 实体“Van\TeamsBundle\Entity\TeamActionTarget”没有字段“typeId” 这是真的。实体模型不包含该字段,只有父类包含。所以我尝试在实体模型中添加这个字段,但是在尝试更新实体时出现错误,说这个字段和鉴别器之间存在冲突。

我的问题很简单,如何按类型检索我的孩子,从表单发布?