2010-06-04 152 views
0

我設計了一個數據庫結構,用於研究目的,收集有關汽車一段時間的數據。汽車的車主每個月都會輸入大量關於汽車的相關數據,這是性能等。但是,我現在必須處理車輛所有權轉移(可能不止一次)的情況,而且我想知道是什麼在數據庫中處理這個問題的最好方法是。數據庫設計查詢

如果汽車被轉移,以前的車主應該不能再添加有關汽車的數據,但他們仍然應該能夠查看他們輸入的數據直到轉移日期。新的所有者將能夠從轉移之日起輸入關於該車的數據。出於研究目的,我需要能夠將這些傳輸的汽車記錄之間的數據加入,並將它們合併成一組數據。

當前,數據庫中的每個車輛記錄都屬於車主,通過Cars表中的外鍵。我現在想的是在汽車記錄之間創建一個遞歸的父/子關係,其中一個汽車記錄可能屬於另一個汽車記錄(例如car_id作爲Car表中的外鍵)。如果汽車記錄屬於另一輛汽車記錄,則表示轉移。這允許我保存每個汽車記錄的一組數據(特定於其擁有者),同時還將相關的汽車記錄鏈接在一起。除此之外,我正在考慮添加一個Car_transfer表,以記錄關於轉移的額外數據(實際上可能只是日期,因爲前面的和新的所有者將通過Car表中的owner_ids顯而易見) - 添加date_transferred對於大多數記錄而言,Car記錄中的列可能大部分是多餘的,所以我不確定這些數據是否值得新的關係表。

無論如何,我希望這是有道理的!我一直在圍繞試圖找到一個合理的解決方案 - 任何意見將不勝感激!

回答

2

你不需要遞歸父/子在這裏,只是許多一對多的關係

基本上你需要鏈接表[汽車所有者]:

car_id, owner_id, ownership_date 

所以你將有數據在裏面:

--------------- 
1, 2, 2009-01-01 
1, 3, 2010-05-01 
... 

同一輛車擁有兩個不同日期的人。

+0

有道理 - 比我的建議簡單得多。我可以在M-N表中添加一個「轉移」列,以表明該所有者不再擁有所有權。 – kenny99 2010-06-04 10:09:15

+0

@ kenny99:除非您希望允許多個同時擁有車輛的車主,否則不需要。只需查找給定車號的所有權表中的最後日期即可。 – 2010-06-04 10:14:48

+0

我在想,爲了防止以前的車主輸入有關車輛(已被轉移)的新數據,簡單的轉移標誌將很容易在應用程序級別工作(例如,如果($ owner-> car- >轉移= 0),允許繼續),但我想這可以避免只是檢查car_id是否有一個記錄擁有日期晚於登錄的所有者的記錄 - 您怎麼看? – kenny99 2010-06-04 10:23:30

2

我會添加一個汽車所有權表。遞歸設計不太直觀。