2012-03-09 32 views
0

我有一張叫Person的表格:
person_id | first_name | middle_name | last_name | group_id | PROPERTY_ID
(GROUP_ID將參考表GroupOfPerson的GROUP_ID列, PROPERTY_ID將參考表屬性的PROPERTY_ID列)如何在設計數據庫模式時通過所屬組的屬性覆蓋表的屬性?

並號召GroupOfPerson另一個表:
GROUP_ID | group_name | PROPERTY_ID
(PROPERTY_ID將把表格屬性的PROPERTY_ID列)

而另一臺叫物業:
PROPERTY_ID | property_name

這裏,如果Person屬於GroupOfPerson,Person表中的property_id將被相應Person的GroupOfPerson表中的property_id覆蓋。在設計數據庫模式時如何有效地完成這項工作?提前致謝。

+0

不確定你在問什麼。這個「覆蓋」是什麼意思?例如:Person't財產是否總是與他的GroupOfPerson財產相同? – 2012-03-10 01:59:44

+0

@ypercube:它應該,但是如何在設計數據庫表格時實現設計明智? – bns007 2012-03-12 15:25:04

+0

如果一個人總是屬於某個組,並且您希望該組的屬性來定義該人的屬性,那麼您只需從該表中除去Person.property_id。 – 2012-03-12 15:27:48

回答

2

我不認爲你可以在表設計級別定義它。

但是,您可以使用Person表中的插入/更新觸發器強制執行它。如果Person表中的group_id值不爲空,觸發器會將property_id的值從GroupOfPerson表複製到Person表。

或者,您可以在查詢級別執行此操作。無論何時從Person表中選擇數據,請將其與GroupOfPerson表一起加入,並根據group_id列中的空/無空值,選擇property_id列的適當來源。

+0

對於替代解決方案,你的意思是說我可以使用COALESCE?聽起來不錯。其實我想知道是否有一種方法來設計模式,以達到這個目的。但是在你的建議中,似乎在設計層面上是不可能的。非常感謝您的寶貴意見。我會試試這個,看看它有多有效。 – bns007 2012-03-12 15:22:53