簡體   English   中英

如何設計這個數據庫,一對多?

[英]How to design this database, one to many?

我是數據庫新手,但是一直在研究技術,但是對於我的數據庫的最佳計划還不清楚嗎?

我有一個帶有以下各列的“ 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)都包含公交路線上的站點,因此我從Route標識符中找到站點。

這是設計的正確方法,還是我應該采用其他方法來簡化設計和提高性能?

我是初學者,請保持溫柔:)

我認為絕對不需要65,000張桌子。 您應該閱讀數據庫規范化知識,以了解有關擁有有效且有組織的架構的原則。 您將很難實施和管理65,000張桌子。 可以非常有效地管理具有(65000 * 20-40)1300000-2600000行的單個表。

index_table ,當您表示route ,是指一個值嗎? 還是這route會有多個價值?

我對設計的想法是:

路線 (路線,線路,位置)

route_stop (路線,地點,名稱,站點)

  • route_stop.route將是一個外鍵route.route
  • 由於我沒有示例數據,因此route_stop上的主鍵可能是構成唯一值的列的組合

擁有65,000條路線,每條路線都有20至40個停靠點,您的數據非常少,而且距離數據庫在海量表的重壓下將死掉的地步還很遠。 (如果您有數以千萬計的停靠點,則對1-3個表仍然可以,如果需要,可以使用分區或分片以及其他技術)。

njk是正確的,因為如果您在路線和停靠點之間是一對多的,則只需要一個路線表和一個停靠點表(順便說一句為他+1)。

但是我無法想象您這里確實有一對多的情況。 在我所知道的所有公交系統中,路線之間共享站點,您會遇到多對多的情況。 我將為stops表引入一個主鍵stop_id ,然后有一個鏈接表來鏈接路線和stops。 聯接表將包含第三列,用於顯示路線內停靠點的位置。

因此在關系數據庫中:三個表。

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

(此外:如果您對NoSQL感興趣,這對您熟悉MongoDB這樣的文檔數據庫將是一個非常不錯的應用程序。然后您可以為每個停靠點使用一個列表,而無需位置編號來訂購停在一條路線內-順便說一句,我“很溫柔” :),如果我正確理解的話,這似乎是您最初提出的問題中缺少的東西。...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM