2010-11-30 204 views
0

我有4個表,法院,部門,地址和telephone_numbers。SQL規範化

每個法院可能有一個或多個司,民事,刑事,家庭等。這些組合中的每一個可能有一個或多個地址,即特定法院的民事司可能或可能不在刑事法庭。這同樣適用於電話號碼,它們對於每個分部或地址可能是相同的,或者它們可能不同。

我已經考慮過幾種方法,但不知道最好用嗎? a)我可以有一張大桌子,它可以多次複製大部分數據。

b)我曾考慮在分區表中持有法院FK,地址表中分區的FK。這意味着複製分區表中每個法院的分區值。那時我不確定該怎麼處理電話桌。

c)我最後的做法是讓一個鏈接表保存FK的所有其他4個表。這意味着不會複製數據,但意味着需要大量的連接來獲取任何有意義的內容,並且可能難以使用。

我敢肯定,我忽略了這裏的顯而易見的事情,但是建立這些表格的最佳方式是什麼?

這些表格將通過CakePHP訪問,但也許我們會暫時將其留給一方。

+0

「noramlisation」已經有很多SO問題和網頁了! – 2010-11-30 13:39:25

+0

對不起,我是否有人在需要幫助時來到這裏?我*有*閱讀規範化,這就是爲什麼我試圖產生一個不會重複數據的架構。也許下一次你提出一個問題的時候,人們會告訴你,已經有很多頁面了! – Dave 2010-11-30 13:50:18

回答

0

你的描述是星型模式,是建議的方式來做到這一點

court 1:m divisions 
divisions 1:m addresses 
address 1:m telephone 

我想你應該看看查詢你需要做的,因爲你需要它雖然只是一個走出數據描述不是sql將是第一步

+0

感謝您的想法,我認爲它更像法院1:米師,師1:米地址,師1:米電話。我已經看過星形模式,並使用事實表和多維表,就像我上面的選項c一樣。那麼我需要做的是將事實表中的一行與我的主要記錄聯繫起來,因爲主要記錄需要引用法庭,其部門,地址和電話號碼。是否這樣走,因爲我沒有看到任何以這種方式使用事實表的例子? – Dave 2010-11-30 14:48:49

1

如果你將有不到10,000行計算四個表的所有組合,我會建議只是一個單一的平臺結構。如果行大小約爲8K,數據大小約爲80兆。大多數免費或低成本的數據庫將在內存中佔據很大的比例,並將您的I/O成本降到零。

如果您覺得您需要多個表格,那麼這裏有一個設計可以讓您靈活地擴展您的設計。您可以將特定於應用程序的列添加到顯示的表中。 alt text

TypeList表可以容納諸如州,聯邦,本地的法院類型,其中條目由「法院」的TL_Table值所鍵入。分部列表​​將在這裏與「Division」的TL_Type一起存儲。使用TL_Type可以填充數據輸入的下拉列表。電話號碼的類型列表可能是電話,傳真,小學,前臺,職員,sherrif等。

您決定哪種方式我確信有人會有一個尖叫的負面評論,但如果它的工作,他們會只是在太空中進行篩選。