[英]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.