Database-Design
設計具有不同類型附件的桌子的最佳方式
我目前正在建構一個消息表,使用者可以在其中發送帶有不同類型附件的消息,
發件人可以:
- 每條消息發送文本
- 每條消息發送一個位置
- 每條消息發送一張或多張圖片
- 每條消息發送一個或多個影片
目前,這是我的桌子設計,
message -id -type (text,images,videos,location) -sender_id message_text -id -message_id -body message_location -id -message_id -latitude -longitude message_images -id -message_id -image_path -image_height -image_width message_videos -id -message_id -video_path
我做的事情對嗎?
我擔心的是使用者可以附加多個圖像或影片,但只能附加一個位置。
通過使用單獨的表來表示消息、消息文本和位置,您可能會使事情過於復雜。只需將它們合併到一個表中:
消息
-id
-type
-sender_id
-body
-latitude
-longitude
如果列可能沒有值,請確保在表定義中將它們設置為 NULLable。
使用一對一關係有多種正當理由,例如,如果您希望在主表中有很多具有較短欄位的記錄,但只是偶爾需要在輔助表中具有較長欄位的記錄,但在大多數情況下它們沒有必要,只會使您的設計複雜化,這將需要更多的連接,否則不會。
從您問題的一般語氣來看,您似乎是數據庫設計的新手,我懷疑您是否真的想這樣做。將有關消息的所有內容保存在一張表中,然後您本質上只能有一個位置、一個正文等。
如果您想創建一對一的關係,通常的做法是使輔助表上的主鍵也成為引用主表的外鍵。因此,對於給定的記錄,兩個表都將具有相同的主鍵值——這將確保您只能擁有一個。
https://www.mkyong.com/mysql/how-to-define-one-to-one-relationship-in-mysql/
就像現在一樣,您可以在這些表中擁有多條記錄,這是一對多的關係。
但我強烈建議您合併到一張表中。
您的附件和圖像表看起來不錯,這將是具有單獨主鍵並使用外鍵連結的一對多關係。