Database design 关于数据库设计和视图的问题

Database design 关于数据库设计和视图的问题,database-design,postgresql,views,Database Design,Postgresql,Views,假设我有一个房地产数据库(公寓、房屋、工业空间、办公室),每个数据库都有一组公共属性(所有建筑的公共属性,如地址、价格、描述文本、坐标、建筑内可用表面、电阻框架材料类型(钢、木材、粘土:D等)等)。 我应该: 1) 创建表格公寓、房屋、办公室等,当我执行涉及所有建筑的选择查询时,使用一个视图(比如all_constr),该视图根据公共属性从所有表格中进行选择,然后根据各种标准(例如,用木材或(混凝土钢或粘土)制成的抗性框架等)细化结果 我不确定引擎盖下的视图是如何工作的,但我认为如果我做类似的事

假设我有一个房地产数据库(公寓、房屋、工业空间、办公室),每个数据库都有一组公共属性(所有建筑的公共属性,如地址、价格、描述文本、坐标、建筑内可用表面、电阻框架材料类型(钢、木材、粘土:D等)等)。 我应该:

1) 创建表格公寓、房屋、办公室等,当我执行涉及所有建筑的选择查询时,使用一个视图(比如all_constr),该视图根据公共属性从所有表格中进行选择,然后根据各种标准(例如,用木材或(混凝土钢或粘土)制成的抗性框架等)细化结果

我不确定引擎盖下的视图是如何工作的,但我认为如果我做类似的事情

     SELECT * FROM all_constr AS a  --all_constr is the view
     WHERE  a.price <50000 AND a.surface >100 ; 
2) 创建另一个表(比如constr)并链接aps,如下所示:

这样做的优点是不需要使用tableoid

既然我多次听到和读到使用视图是一种好的做法,那么您推荐哪种解决方案呢


LE:如果可能的话,我想避免使用继承,因为它太过特定于postgres(我不太介意,只要它是一个最佳解决方案)

在PostgreSQL中,视图是一个缩写

当查询计划器遇到规则/视图时,它会将规则中的查询片段替换到当前查询中,并继续优化查询


这与您直接从视图中输入查询相同;postgresql将优化查询,就好像根本没有视图一样,并尽可能做到最高效。使用视图不会降低性能。

将所有常用内容合并到一个表中,并在此表中添加“type”(保留字…)列。使可选属性为空,或将它们放入一个或多个单独的表中

     CREATE VIEW all_constr AS  
     SELECT x.common_att1, x.common_att2, x.tableoid, x.id
     FROM aps AS x
     UNION ALL  
     SELECT x.common_att1, x.common_att2, x.tableoid, x.id
     FROM houses AS x 
     UNION ALL  
     SELECT x.common_att1, x.common_att2, x.tableoid, x.id
     FROM ind_spaces AS x