【发布时间】:2017-10-09 11:31:31
【问题描述】:
我正在考虑将Concrete Table Inheritance 用于一个用例,并且需要帮助确定我是否需要使用识别与非识别关系,以及是否需要准确地构建我的表。
我的用例
我有一个 HTML 表单对象,其中的表单在很多情况下大部分是相同的,即它是一个大表单,对于不同的产品是相同的,除了 product_options,这取决于确切的 product_type。我想将表单数据保存到表中,以便存储/检索。我想我想使用 Concrete Table 实现,并且需要反馈是否可以这样做。
这是我的想法:
假设我想检索“A”类型产品的信息,我
- 读取 selection_for,检索
product_type - 基于
product_type,我阅读了相应的选项表
这个好像有点复杂……
我也在使用 Doctrine ORM 在后台驱动数据库,因此这种数据操作可能很难通过 ORM API 实现,但我想先考虑这个选项。
问题:
- 我的设计会按原样工作吗?可以改进吗?我是否正确实施了混凝土表设计?
- 我对产品选项表使用识别关系还是非识别关系?
我也可以像这样做一个替代图表:
如果这些外键之一不是 NULL,那么我读取该键,然后读取相应的表以检索数据。
问题:
与第一种方法相比,第二种方法有优缺点吗?
【问题讨论】:
标签: design-patterns database-design entity-relationship data-modeling concrete-inheritance