这个问题的目的是得到最干净和“最好”的方式来处理这类问题。
我读过许多关于如何在SQL中处理继承的问题,并且最喜欢Table Per Type
模型,并希望使用它。这方面的问题是,您必须知道要查询什么类型才能执行正确的连接。
假设我们有三个表:Son
、Daughter
和Child
。
例如,如果您想要查询所有的女儿,这是非常有效的。你可以加入孩子的行列,得到所有的信息。
我要做的是按ID查询Child
并获取相关的子类信息。我可以做的是向子元素添加一个列Type
,并使用第二个select来选择相关的数据,但这似乎不太好。另一种方法是加入所有的子表,但这似乎也不太好。
是否有一个继承模型来解决这类问题,以一种干净、良好和表现良好的方式?
我用的是MySQL
发布于 2016-05-28 14:38:12
给出了用例注释中的详细定义
服务器获取http请求domain.com/随机The。
显然,您手头有一个ID,您希望检索派生实体的属性。对于您的情况,我建议使用左联接方法:
SELECT age,
son.id is not null as isSon,
randomColumn,
daughter is not null as isDaughter,
whatEver
FROM child
LEFT JOIN son on child.id = son.id
LETT JOIN daughter on child.id = daughter.id
WHERE
child.id = @yourRandomId
这种方法,BTW,非常接近您当前的数据库设计,因此您不需要进行太多的更改。然而,您可以从改进的数据模型提供的存储节省中获益。
除此之外,我看不出有多少不同的机会:
type
属性在您的问题中已经被拒绝;发送单个SELECT
语句也是如此。在评论中,您表示您正在寻找类似于Map<ID, Child>
In MySQL的内容。请注意,这个java‘is表达式是一个编译时表达式,它在运行时使用相应的实例类型实例化。SQL不知道运行时和编译时之间的区别。因此,也没有必要使用这样一个通用表达式。最后,还请注意,对于您的Java程序,您还需要分析(通过反省或使用instanceof
)您的value
实例有哪些类型--这也是您需要执行的“单记录”活动。
https://stackoverflow.com/questions/37503730
复制相似问题