如何告诉“所有成员”实际选择哪个表?

时间:2018-08-02 09:20:52

标签: sql

在一个表中,如果我有一个“ table_ID”列和一个“ entity_ID”列,我该如何表达“ SELECT * FROM(SELECT table FROM all_tables WHERE table_ID =?),其中键= entity_ID”?

这个问题已经answered,但是对于我们的用例来说,效率不高

我上面回答的问题是我们将有数百个表(类型),并且键只能(一次)在单个表中。我可以以某种方式修改“全部联合”,以便它使用“ type_ID”来优化所有可能不包含键的选择吗?如果我为每个表定义一个视图,并向每个表添加一个恒定的“表ID”列,该怎么办?足以“优化”除一个以外的所有选择吗?

为什么这样做?因为我们已经有了上述 2M LOC 假定此数据模型!请继续阅读:

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

我们现在应该替换我们的数据库(因为它已过时),并且“从上至下”的顺序是“所有新项目都应使用PostgreSQL”。我们的模型非常适合ORM API,因此我正在考虑与我们现有数据模型匹配的替代方案。我目前的计划是为每个具体类型使用一个表,并且没有明确的外键定义(我们之前没有任何定义;只有在“解析”一个错误的实体ID时才遇到异常)。该“实体ID”将替换为该类型/表中的一个“ smallint”数据库ID,一个“ smallint”表ID(类型ID)和一个“整数”作为实体ID(大多数实体“最后为”,并且如果我们创建了多个相同类型的4B实体,则只需将第二个类型ID和表用于相同类型)。 有了这样的模型,我们可以保持我们的代码库相对不变。

0 个答案:

没有答案