2015-12-02 90 views
0

我試圖建模一個數據庫來保存(大部分)英國人口普查記錄信息。那些比我更好理解的人會快速瀏覽一下以下草案數據庫模式並告訴我,如果我的規範化是正確的,還是我犯了明顯的錯誤?數據庫模式規範化

Census Draft Database Schema

我認爲這是相當自我解釋,但我還沒有走近多年的數據庫設計,而忽略tbPerson & tbLocation,思維去,我需要兩個鏈接表,因爲首先一個人可以在許多出現人口普查......其次是一次人口普查,可以有很多地址。這個設計草案是否有效?鏈接表仍然是這些天做事的最佳方式?

回答

0

總評:

  • 的多重關係是錯誤的:大多數的1:1是1:N; 你有1:n的人看錯了方向 - 當然有1人 有n PersonCensus,你有1 PersonCensus n人。
  • 地址和位置對我來說看起來很混亂。您無法按照您擁有的方式將人員鏈接到地址。
  • 在PersonPensus內,你有一個關係,可能是另一個人。沒有辦法將PersonCensus或其擁有的Person鏈接到其他PersonCensus或Person。

這就是說,鏈接表仍然是正確的方式來執行n:n關係,PersonCensus是完全合理的。

編輯 - 添加位置的東西。

位置的問題是PersonCensus鏈接到一個位置(可能有許多PersonCensus鏈接到它)。另外,地址鏈接到一個地點(可以有多個地址鏈接到它)。所以你可以從PersonCensus到他們的位置,但是你有很多地址鏈接到位置。哪一個是PersonCensus的地址?沒有辦法告訴。

如果因爲其他原因,除了顯示PersonCensus居住/工作/人口普查時的任何其他原因,我不知道該目的是什麼,因此不能作出任何進一步的評論。

但是,如果地址應該鏈接到PersonCensus,那麼按照設計它是沒用的。要將PersonCensus鏈接到Address,請從PersonCensus中刪除LocationId,並用AddressId替換。現在PersonCensus首先連接到Address,然後連接到Location。

現在我將停止更新,因爲如果您有更多問題,您確實需要更好地描述您正在做的事情,從而打開另一個問題。乾杯 -

+0

對不起,我應該添加忽略關係標記(1:1,1:N等)我用Dia來繪製草稿並自動添加它們。無論如何,除了減少寫下「兒子」,「妻子」,「頭」之外,關係表並沒有起作用,所以我並不太擔心。至於地址和位置,我還沒有完全正確地處理它...任何建議,以更好地安排它? – Gary

+0

不知道地址和位置之間的區別是什麼,它們在這種情況下意味着什麼。 –

+0

數據庫中的位置表包含城鎮或村莊的名稱以及城鎮/村莊和經度和緯度的簡要說明。地址表是指一個人的住所或農場等物理地址。我想分開這兩個,因爲這似乎是規範化數據的合理方式。那有意義嗎?因此,例如,沒有多個地址/房屋條目都與每個記錄中複製的城鎮位置數據相同... – Gary