假設我有一個房地產物業(公寓,房屋,工業空間,辦公室)的數據庫,每個數據庫都有一組共同的屬性(所有結構的共同屬性,如地址,價格,描述文字,座標,建築物內的可用表面,電阻框架材料類型(鋼,木材,粘土:D等)等)。 我應該:關於數據庫設計和視圖的問題
1)創建表公寓,房屋,辦公室等,當我做一個涉及所有結構的選擇查詢時,使用一個視圖(說all_constr),從所有表中選擇基於共同的屬性,然後根據各種標準(如用木頭製成的或用(混凝土 - 鋼或粘土)等製成的框架來改進結果)
我並不確定一個視圖如何在罩下工作但我認爲,如果我做類似
SELECT * FROM all_constr AS a --all_constr is the view
WHERE a.price <50000 AND a.surface >100 ;
每次我運行上述查詢特定建築物表迭代一次創建虛擬表,然後再次執行過濾。這似乎不是很有效。另一方面,如果虛擬表AKA視圖被存儲爲真實表,那麼它與情況2)幾乎是相同的情況+如果我想查看特定於建築物的詳細信息,那麼我的運氣不好,因爲沒有獨特的跨越房屋,APS等標識符 一種解決方案,我認爲,將創建這樣的視圖:
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
2)創建另一個表(說構造)和鏈路APS,房屋這樣的:
http://imageshack.us/photo/my-images/31/unledkwx.png/ 這具有不需要使用類似表格的優點
那麼哪個你會推薦看到我多次聽到和閱讀使用視圖是好的做法嗎?
LE:如果可能的話我想避免使用繼承其過於Postgres的特定的(我不介意非常多壽,只要它是最佳的解決方案)