用于共享其他用户帖子的数据库设计

abd*_*rim 3 mysql database database-design relational-database relationship

我正在开发一个社交网络

我的问题是如何在数据库中设计共享帖子

我现在拥有什么

user table 
Run Code Online (Sandbox Code Playgroud)

post table有一个外键user id

like table包含两个外键user idvspost id

我正在寻找的是有任何小型解决方案来分享用户的帖子,并将该解决方案与类似的表连接起来,因为如果有人分享帖子,他会得到新的类似内容

我不知道创建一个新的share table是否好,但是像现在这样呢?

有什么想法吗?

Bor*_*lev 6

所以,总而言之,你有:

  • 用户
  • 帖子
    • 参考文献 用户
  • 分享
    • 参考文献 用户
    • 参考帖子
  • 喜欢
    • 参考文献 用户
    • 参考帖子或分享

该域模型的 SQL 实现如下:

CREATE TABLE users (
    id int NOT NULL autoincrement
);
CREATE TABLE posts (
    id int NOT NULL autoincrement,
    user_id int NOT NULL,
    CONSTRAINT fk_users FOREIGN KEY (user_id) REFERENCES users (id)
);
CREATE TABLE shares (
    id int NOT NULL autoincrement,
    user_id int NOT NULL,
    post_id int NOT NULL,
    CONSTRAINT fk_users FOREIGN KEY (user_id) REFERENCES users (id),
    CONSTRAINT fk_posts FOREIGN KEY (post_id) REFERENCES posts (id)
);
CREATE TABLE likes (
    id int NOT NULL autoincrement,
    user_id int NOT NULL,
    post_id int,  /* NULLABLE */
    share_id int,  /* NULLABLE */
    CONSTRAINT fk_users FOREIGN KEY (user_id) REFERENCES users (id),
    CONSTRAINT fk_posts FOREIGN KEY (post_id) REFERENCES posts (id),
    CONSTRAINT fk_shares FOREIGN KEY (share_id) REFERENCES shares (id)
);
Run Code Online (Sandbox Code Playgroud)