Sql 如何告诉“UNIONALL”实际选择哪个表?

Sql 如何告诉“UNIONALL”实际选择哪个表?,sql,Sql,在一个表中,如果我有一个“table_ID”列和一个“entity_ID”列,那么如何表达“SELECT*FROM SELECT table FROM all_tables,其中table_ID=?WHERE key=entity_ID” 这个问题已经存在,但对于我们的用例来说并不有效: 我在上面的答案中遇到的问题是,我们将有数百种表类型,并且键在单个表中只能出现一次。我是否可以修改“union all”,使其使用“type_ID”优化掉所有不可能包含键的选择?如果我为每个表定义一个视图,在每个

在一个表中,如果我有一个“table_ID”列和一个“entity_ID”列,那么如何表达“SELECT*FROM SELECT table FROM all_tables,其中table_ID=?WHERE key=entity_ID”

这个问题已经存在,但对于我们的用例来说并不有效:

我在上面的答案中遇到的问题是,我们将有数百种表类型,并且键在单个表中只能出现一次。我是否可以修改“union all”,使其使用“type_ID”优化掉所有不可能包含键的选择?如果我为每个表定义一个视图,在每个表中添加一个常量“table ID”列,会怎么样?这是否足以优化除一个外的所有选择

为什么要这样做?因为我们已经有超过2M的LOC假设了这个数据模型!请继续阅读:

我们目前使用的OODBMS现在已经“弃用”。我们有一个很深的实体继承层次结构,所有内容都扩展了相同的基本实体,OODBMS允许使用自由混合的“序列化对象”和实体,并在序列化时自动排序实体引用被替换为“句柄”。它提供了一个所有实体的“密钥空间”,并支持在单个事务中访问多个数据库,方法是将“DB ID”16位放入实体ID 64位中。定义新实体所需做的就是扩展现有实体类,并可能将某些字段指定为“索引”。字段也可以从现有实体类型中自由添加或删除。简而言之,它“正常工作”,与使用ORM相比非常方便

我们现在应该替换我们的DB,因为它已经被弃用了,“从最上面”的顺序是“所有新项目都应该使用PostgreSQL”。我们的模型非常适合ORM API,因此我正在考虑与现有数据模型相匹配的替代方案。我当前的计划是每种具体类型使用一个表,并且没有明确的外键定义,我们以前没有外键定义;我们只在“解析”错误的实体ID时出现异常。“实体ID”将替换为一个“smallint”db ID、一个“smallint”table ID type ID和一个“integer”作为该类型/表中的实体ID大多数实体“永远持续”,如果我们创建了超过4B个相同类型的实体,我们只会为相同类型使用第二个类型ID和表。
有了这样一个模型,我们可以保持我们的代码库相对不变。

postgreSQL是一个非常好的选择。在postgreSQL中,您没有提供任何示例来让场景变得可以理解,但是看看postgreSQL中的继承性。看起来这就是您想要的。从顶部开始排序。在我看来,它可能值得一试-允许切换到另一个OODBMS的案例。如果它适合替换不推荐的OODBMS。顺便说一句,您现在使用的是哪一个?想要保留现有的数据模型是一个好主意,如果它设计得很好,并且没有将自身与存储体系结构的太多细节联系起来。不幸的是,这听起来不像我所能想到的l根据您的描述,情况就是这样。至少,请确保您意识到在尝试将一种体系结构的数据模型调整为另一种提供不同体系结构的存储解决方案时,您将面临的技术债务。@lukstorm我们使用的是现在由Actian拥有的Versant JVI。DB将启用,但JVI API将启用现在处于维护模式。他们已经转移到JPA,但没有提供迁移路径。@CetinBasoz,等等,什么?我不知道你可以这么做!我想这是一个备选答案。可能比我想象的要好。