多用户消息传递模式设计

时间:2014-09-04 03:08:02

标签: database-design

我正在为一个新项目设计一个数据库。我遇到了一些麻烦。在我的设计中,我有两个表学生,教师。我想将他们的消息存储到消息表中。

1.student 2.faculty 3.Message

Multi user messaging schema design

  

蓝色线定义哪个是用户表的外键。蓝色选择列是用户表的外键。

它基本上由具有这些能力的安全消息传递系统组成:

  

*每个学生都可以向对方发送消息。

     

*每个教师都可以向其他教员发送信息。

     

*学生和教师都可以互相发送信息。

1.我在如何实现学生,教师和留言表之间的关系方面遇到了困难。

2.保持它们在两个表中分开是对的?或者我如何实现它??

3.请告诉我如何改进设计及其关系而不是SQL代码。

  

我的完整设计在University Database Design.

1 个答案:

答案 0 :(得分:0)

这是我的建议,

  1. 添加一个新的表格用户,从教师和学生那里获取所有类似的专栏。
  2. 将您的外键指向教职员工和学生。这将是你看到的关系。
  3. 在你的消息表中添加另一个列接收器,引用uid,你的消息表必须有发送者和接收者吗?否则你不会知道该消息是针对谁的。
  4. 指向用户表和消息表,发送方/接收方与uid的外键。这是你想要获得的另一种关系。
  5. 查看表格系列中的通知和消息列,不确定它们是否仍然需要,所以我只是保留它。
  6. 快乐的节目。

    CREATE TABLE user (
                    uid VARCHAR(15) NOT NULL,
                    first_name VARCHAR(20) NOT NULL,
                    last_name VARCHAR(20) NOT NULL,
                    nick_name VARCHAR(10) NOT NULL,
                    genere VARCHAR(6) NOT NULL,
                    email VARCHAR(50) NOT NULL,
                    facebook VARCHAR(50) NOT NULL,
                    mobile INT NOT NULL,
                    image VARCHAR(100) NOT NULL,
                    cv VARCHAR NOT NULL,
                    PRIMARY KEY (uid)
    );
    
    
    
    CREATE TABLE Message (
                    Message_id BIGINT NOT NULL,
                    sender VARCHAR NOT NULL,
                    receiver VARCHAR NOT NULL,
                    text VARCHAR NOT NULL,
                    send_date_time DATE NOT NULL,
                    PRIMARY KEY (Message_id)
    );
    
    
    CREATE TABLE faculty (
                    fid VARCHAR(15) NOT NULL,
                    designation VARCHAR(50) NOT NULL,
                    notification VARCHAR NOT NULL,
                    message VARCHAR NOT NULL,
                    PRIMARY KEY (fid)
    );
    
    CREATE TABLE student (
                    sid VARCHAR(15) NOT NULL,
                    batch TINYINT NOT NULL,
                    cgpa DOUBLE PRECISIONS NOT NULL,
                    PRIMARY KEY (sid)
    );