我已经关注了多篇文章,这些文章主要使用Entity Framework查询来展示如何检索数据。但是,如果您考虑下面的表结构:
如果我想使用纯SQL查找ID为2的汽车的详细信息,我是否应该使用该ID在所有继承的表中查找匹配项("二手车"和"新车"在这个例子中)?
是否不能完全扫描"二手车"我在“新车”#34;表?或者有一种方式我可以知道我必须去"新车"直接表?
或者我假设每个类型的表设计是错误的吗?
答案 0 :(得分:3)
如果你想找年份,你可以这样做:
select c.*, coalesce(uc.year, nc.year) as year,
(case when uc.id is not null then 'Used' else 'New' end) as which
from car c left join
usedcar uc
on c.id = uc.id left join
newcar nc
on c.id = nc.id
where c.id = 2;
您应该将id
声明为所有表中的主键(尽管我将其命名为carId
)。然后就不会进行扫描。只需索引查找。
换句话说,你的设计很好。您可能需要各种约束来确保汽车是新的或使用的,但不是两者都适用。