web-dev-qa-db-ja.com

1つのフィールドに複数の外部キー値を格納する方法は?

MS SQL-Serverデータベースに次の2つのテーブルがあります。

user_info
  ( user_id PRIMARY KEY, 
    email, 
    password
  ) 

そして

messages
  ( time_stamp, 
    message, 
    sender, 
    recipients, 
    FOREIGN KEY(sender) 
      REFERENCES user_info (user_id), 
    FOREIGN KEY(recipients) 
      REFERENCES user_info (user_id)
  ) 

messagesテーブルの受信者フィールドに複数のuser_id値を格納できるかどうか疑問に思っています。私は初心者です。この問題の解決方法を教えてください。

2
Al-Amin Khan

これを行う最善の方法は、1対多の関係message_recipients テーブル。

user_info
( 
  user_id INTEGER PRIMARY KEY, 
  email VARCHAR(256), 
  password VARCHAR(256)
);

messages
( 
  message_id INTEGER PRIMARY KEY
  time_stamp DATETIME, 
  message VARCHAR(4000), 
  sender INTEGER -- references user_info.user_id
);

message_recipients
(
  message_id INTEGER, -- references messages.message_id
  recipient_id INTEGER -- references user_info.user_id
);
7
Philᵀᴹ