2012-12-02 60 views
0

我是新來的數據庫,但一直在研究技術,但不是很清楚我的數據庫的最佳計劃?如何設計這個數據庫,一對多?

我有一個「index_table」有以下的列(具有約65,000行)

dbo.index_table 
Line 
Locality 
Route (unique) 

我然後計劃約65,000表有以下的列:(每個約20-40行)

dbo.table2,3.4....etc 
Route 
Place 
Name 
Stop 

我的C#web服務在index_table中查找line和locality之間的匹配,結果將是Route。 然後我需要返回其他表中的所有匹配行。 基本上每個表(除了index_table)都包含在運輸路線上的停靠點,所以我從路線標識符中找到停靠點。

這是設計的正確方法,還是應該以不同的方式來實現簡化和性能的原因。

我是初學者,請溫柔:)

+0

table2,table3,table4,table5,...,table65000中的每一個都應該表示不同的路由嗎? –

+2

我沒有真正想要什麼,但有65000表結構identic結構恕我直言不可能是正確的解決方案,也許一個表與一些額外的keyrows – bummi

+0

嗨是的,每個表都包含該路線上的停止列表,30- 50例如,並且大約有65,000條路線 –

回答

3

我認爲完全沒有必要65,000表。您應該閱讀database normalization以瞭解具有高效和有組織架構的原則。你會讓你的生活變得更難以嘗試實施和管理65,000張桌子。具有(65000 * 20-40)1300000-2600000行的單個表可以得到非常有效的管理。

在你的index_table,當你的意思是route,你的意思是一個單一的值?或者這route有多個值呢?

我的設計思路是:

路線(路線,路線,地點)

route_stop(路線,地點,名稱,停止)

  • route_stop.route會是一個外鍵route.route
  • 由於我沒有示例數據,您的主鍵route_stop可能是做一個獨特的價值
+0

這是一個有趣的概念。我不確定是否說100萬行會過多,而不是成千上萬行少的表。 路由是一個單一的值,像45B_B16_SE的唯一代碼,例如 –

+0

感謝您的鏈接,對新手非常有用 –

+0

在這兩個表設計中,將有20-40個相同的route_stop.route字段,這是可能的與外鍵概念? –

1

65000條路線,每20-40停止列的組合,你只有很少的數據和無處其中一個數據庫會的重壓下死點附近一張巨大的桌子。 (如果你有數千萬次的停止,你仍然可以使用1-3個表格,如果需要的話使用分區或分片和其他技術)。

njk是正確的,如果你是一對多的路線和站點之間,你只需要一個路由表和一個停靠表(順便說一句,他BTW)。

但是我無法想象你真的在這裏有一個一對多的情況。在我所知的所有運輸系統中,停靠在路線之間共享,並且您將有一個多對多方案。我將爲停止表引入一個主鍵stop_id,然後有一個連接路線和停靠點的連接表。連接表將包含路線內停靠點位置的第三列。

所以在一個關係數據庫中:三張表。

ROUTE: route_id, line, locality 
STOP: stop_id, name, place 
ROUTE_STOP: route_id, stop_id, position 

(旁白:如果您在NoSQL的任何權益,這將是一個非常好的應用程序,爲您熟悉的文檔數據庫,如MongoDB的那麼你可以使用一個列表,每到一站,而不是需要一個位置號碼來命令路線內的停靠點 - 順便說一下,我正在「溫柔」:)是你原來的問題似乎缺乏的東西,如果我理解正確....)

+0

這可以工作得很好。我有一個現有的數據庫,其中包含一個包含300,000個唯一停止節點行的表,這些行已經滿足您的STOP表的目的。 –

+0

很好。我只是猜測在你的問題中,「停止」是一個字符串,所以你一直都有這個部分。 :)也許答案的排序部分是新的? –

+0

是的,你是正確的關於運輸路線共享站! –

相關問題