Dynamic-Sql
動態創建表是一種好習慣嗎?
假設我正在製作一個 IRC 機器人,除了應該儲存在數據庫中的所有其他內容之外,我還想記錄機器人所在的每個頻道中的所有消息。
我已經有一個
channels
包含列id
,channel_name
和一些其他資訊的表。對於記錄每條消息,對我來說最有意義的是
messages_channelname
為每個通道創建一個表,並在其中儲存消息以及與之關聯的任何其他資訊。但是,這引發了一個問題 - 表的名稱現在與通道的名稱分離
id
(儘管我可以通過創建表名來緩解這種情況messages_channelid
)。我覺得這裡的最佳實踐,而不是最有意義的做法,是擁有一個
messages
包含來自所有渠道的消息的主表,其中包含列和channel_id
,其中每個渠道的消息索引。但後來我會(毫無根據)擔心表大小和可能的搜尋速度。id``message``id
解決這個問題的最佳方法是什麼?
這個問題沒有任何確定的答案。
您已經正確地確定了一些可能的權衡(單表=更簡單/可能更慢/更多爭用?,多個表=更複雜/更快,也許?/在其他情況下更難使用?)。
一般的建議是從更直接的單表解決方案開始,然後在測試顯示問題時將其分解。
大多數情況下,只要您擁有良好的硬體和適當的索引設計,您就會在單個表上獲得良好的性能。
根據特定平台,您可能有其他技術解決方案,例如過濾索引視圖和類似的東西。