这个社交媒体平台postgresql数据库设计正确吗?

kq4fsx7k  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(262)

下面是一个简单的社交媒体平台的持久性设计。目前,有以下表格:
users:数据库的主表,包含在我们的应用程序中注册的用户的信息。将存储在此表中的数据将是名称
名称:用户
字段:身份证,姓名,用户名,密码,电子邮件,简历,追随者,以下,图片。
主键:id
posts:包含来自所有用户的所有post的数据库表。每篇文章都将包含标题、描述和文章的主要内容。
姓名:职位
字段:id,title,picture,description,content,created\u at,likes,user\u id。
主键:id
外键:表用户的用户id
post liked by users:一个表,定义多个喜欢的post和喜欢它们的用户之间的多对多关系。
名称:posts\u liked\u用户
字段:post\u id,user\u id
外键:post\u id到表posts
外键:表用户的用户id
跟随。表,以便能够在用户之间创建“跟随”关系。
姓名:follows
字段:后跟用户id,后跟用户id
外键:跟随\u user \u id到表users
外键:跟随\u user \u id到表users
下面是创建表的命令

CREATE TABLE users(
    id SERIAL PRIMARY KEY,
    name VARCHAR (50) NOT NULL,
    username VARCHAR (50) UNIQUE NOT NULL,
    password VARCHAR (255) NOT NULL,
    email VARCHAR (255) NOT NULL,
    bio VARCHAR (255) NOT NULL,
    followers INTEGER NOT NULL,
    following INTEGER NOT NULL,
    picture VARCHAR (255) NOT NULL
  )

CREATE TABLE posts(
    id SERIAL PRIMARY KEY,
    title VARCHAR (255) NOT NULL,
    picture VARCHAR (255) NOT NULL,
    description VARCHAR (255) NOT NULL,
    content TEXT NOT NULL,
    created_at TIMESTAMP NOT NULL DEFAULT NOW(),
    likes INTEGER NOT NULL,
    user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE
  )

CREATE TABLE posts_liked_users(
    post_id INTEGER NOT NULL REFERENCES posts(id) ON DELETE CASCADE,
    user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE
  )

CREATE TABLE follows(
    following_user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
    followed_user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE
  )

下面是图表:

图和总体设计是对的还是缺了什么?

avkwfej4

avkwfej41#

作为对任何有类似问题的人的回答,我根据一些建议和研究重构了设计:
我更新了 VARCHAR 待处理字段 TEXT 这是总的指导方针。
因为正常化,我把 followers 以及 followingusers 以及 likespost 以减少数据冗余,提高数据完整性。
我加了一个 created_at 场上的 follows 以及 posts_liked_users 保留用户关注另一个帖子或喜欢某个帖子的时间。

CREATE TABLE users(
  id SERIAL PRIMARY KEY,
  name TEXT NOT NULL,
  username TEXT UNIQUE NOT NULL,
  password TEXT NOT NULL,
  email TEXT NOT NULL,
  bio TEXT NOT NULL,
  picture TEXT NOT NULL
)

CREATE TABLE posts(
  id SERIAL PRIMARY KEY,
  title TEXT NOT NULL,
  picture TEXT NOT NULL,
  description TEXT NOT NULL,
  content TEXT NOT NULL,
  created_at TIMESTAMP NOT NULL DEFAULT NOW(),
  user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE
)

CREATE TABLE posts_liked_users(
  created_at TIMESTAMP NOT NULL DEFAULT NOW(),
  post_id INTEGER NOT NULL REFERENCES posts(id) ON DELETE CASCADE,
  user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE
)

CREATE TABLE follows(
  created_at TIMESTAMP NOT NULL DEFAULT NOW(),
  following_user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
  followed_user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE
)

参考文献:
评论来自https://www.reddit.com/r/postgresql/comments/h87gf8/is_this_social_media_platform_postgresql_database/
postgresql:text和varchar之间的差异(字符变化)
使用数据类型“text”存储字符串有什么缺点吗?
https://en.wikipedia.org/wiki/database_normalization

相关问题