【问题标题】:Multi user messaging schema design多用户消息传递架构设计
【发布时间】:2014-09-07 12:07:44
【问题描述】:

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

1.学生 2.师资力量 3.留言

蓝色线定义了用户表的外键。蓝色选中的列是用户表的外键。

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

*每个学生都可以向其他学生发送消息。

*每个教师都可以互相发送消息。

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

1.我在如何实现学生、教师和消息表之间的关系时遇到困难。

2.把它们分开放在两张桌子上是不是?或者我如何实现它??

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

我的完整设计在这里University Database Design.

【问题讨论】:

  • 那么,每个人都可以向其他人发送消息吗?我不确定我是否看到了问题。
  • @paqogomez 我这里没有实现任何关系,请检查屏幕短。
  • 我还是不明白,你是在寻找一个 sql 查询来显示每个用户的消息吗?您是否想知道要在桌面上放置哪些约束?您有什么要求?
  • 我不是在寻找 sql 查询。我有两张桌子学生和教师。我想将他们的消息存储到消息表中。如何改进我的设计?
  • 消息表应该包含发送者ID和接收者ID

标签: database-design


【解决方案1】:

这是我的建议,

  1. 添加一个新的表调用用户,从教师和学生那里取出所有相似的列。
  2. 将您的外键指向教师和学生表。这将是您查看的关系。
  3. 在您的消息表中添加另一列receiver 引用uid,您的消息表必须有发送者和接收者对吗?否则您将不知道该消息是给谁的。
  4. 将您的外键指向用户表和消息表、发送方/接收方与 uid。这是您试图建立的另一种关系。
  5. 看看你在表教师中的通知和消息列,不确定它们是否仍然需要,所以我只保留它。

编程愉快。

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)
);

【讨论】:

  • 检查我的 2、4,那边我指出要使用哪一列,语法明智你应该可以自己做吧?
  • 我不明白你的意思是什么关系。在步骤 2 中为表教员和学生的 uid 外键???
  • 2. 将外键指向教师和学生表。这将是您正在查看的关系。所有学生/教师都属于用户,uid 上的 PK 和 fid/sid 上的 FK
  • 嗯,正是我想要的。现在我明白了。
  • @joynal,BirthDate和SendDate是什么关系?
猜你喜欢
  • 2020-01-29
  • 1970-01-01
  • 2013-04-23
  • 2011-03-21
  • 1970-01-01
  • 2021-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多