Database-Design

設計具有不同類型附件的桌子的最佳方式

  • February 27, 2017

我目前正在建構一個消息表,使用者可以在其中發送帶有不同類型附件的消息,

發件人可以:

  • 每條消息發送文本
  • 每條消息發送一個位置
  • 每條消息發送一張或多張圖片
  • 每條消息發送一個或多個影片

目前,這是我的桌子設計,

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/

就像現在一樣,您可以在這些表中擁有多條記錄,這是一對多的關係。

但我強烈建議您合併到一張表中。

您的附件和圖像表看起來不錯,這將是具有單獨主鍵並使用外鍵連結的一對多關係。

引用自:https://dba.stackexchange.com/questions/165583