我想弄清楚什麼是最佳數據庫和表結構來存儲類型(var)char的節點之間的關係。我多年前最後一次使用MySQL作爲一些簡單的PHP網頁的後端,並且從未超越過。我希望一些經驗豐富的用戶可以給我他們的意見。節點關係的MySQL表
比方說,我有一大堆的名字:
- 托馬斯
- 簡
- 菲利克斯
- 馬克
- 安妮
我現在想存儲他們的關係。我的想法是有可能看起來像這樣兩個表:
names (id, name) relationships (id_1, id_2)
0 Thomas 0 1
1 Jane 0 3
2 Felix 1 2
3 Marc 3 4
4 Anne ...
...
數據的範圍如下:
- 表「名稱」將包含約。 500萬行。
- 表'關係'將包含150-200萬行。
- 數據庫將只能由我本地訪問(服務器和客戶端是同一臺機器)
- 我不需要Web服務器的響應能力,在我訪問它的幾個場合中只有很高的吞吐量(以減少等待時間)
我的問題是:
- 我記得正確使用PRIMARY_KEY是很重要的。我隱約記得有可能將鍵分配到兩列(即id_1,id_2在我的情況);這有助於查詢我想象?
- 有沒有辦法在MySQL內部防止在插入過程中創建重複關係(例如0:4 & 4:0)?
- MySQL默認爲InnoDB。這是你會爲我的場景推薦的數據庫嗎?
任何指針歡迎。謝謝。
你還沒有談到節點關係。他們是隨機分配多對多關係還是某種樹形結構?這種關係是否有方向性(即親子關係)?關於存儲引擎選擇,你可以談談你正在使用的數據訪問模式和MySQL版本嗎? –
@Mike Brant我應該更具體,但沒有考慮到這些區別。在我的情況下,這種關係不是有方向性的,即我只需要存儲兩個節點是否連接。沒有任何類型的層次結構。每個表格將在一個長期會話中填充(首先是左側,然後是右側)(通過Python進行SQL查詢),然後保持這種狀態。稍後我會完整地讀出兩張表格,結合字符串及其關係。我可能會這樣做十幾次,直到我的最終產品令人滿意。 – Adrian