美文网首页js css html
529.【博客开发】服务端概要设计-数据库设计

529.【博客开发】服务端概要设计-数据库设计

作者: 七镜 | 来源:发表于2022-12-24 00:04 被阅读0次

此次博客开发,为了更加抽象,主要涉及到的实体为:账号<user>、维度<dimension_*>、维度周边生态<eco_*>

举个例子,维度可以是阅读金句,这时起的表名可以叫dimension_reading;维度可以加一个写作文章,这是起的表名可以叫dimension_writing……

也就是说这个博客以后可以容纳的所有展示内容都可以上面的规则添加。

再接在往下举例子,维度周边生态可以是评论,这是起的表名可以叫eco_comment。表示针对某个展示内容(即维度)的评论。

为了尽可能简化逻辑,本次实现在数据库实体上,只分三层:账号下面是隶属的维度,维度下面是隶属的生态,账号可以创建生态。(举个例子:用户a发表文章b,用户c在文章b下面评论d)

1. 实体构建(Go 实现)

一般先画 E-R 图,再写代码,但鉴于现在的开发工具比较高级,我们这里先实现实体的结构,再反向生成E-R图做诠释:

账号<user>:

type User struct {
    Account           string              `gorm:"not null;unique;" json:"account"`
    Password          string              `gorm:"not null;" json:"password"`
    Base              Base                `json:"base" gorm:"embedded"`
    DimensionReadings []*DimensionReading `json:"dimension_readings" gorm:"many2many:user__dimension_reading;constraint:OnDelete:CASCADE;comment:用户建的维度-读书"`
    DimensionWritings []*DimensionWriting `json:"dimension_writings" gorm:"many2many:user__dimension_writing;constraint:OnDelete:CASCADE;comment:用户建的维度-写作"`
    DimensionPhotos   []*DimensionPhoto   `json:"dimension_photos" gorm:"many2many:user__dimension_photo;constraint:OnDelete:CASCADE;comment:用户建的维度-图片"`
    EcoComments       []*EcoComment       `json:"eco_comments" gorm:"many2many:user__eco_comment;constraint:OnDelete:CASCADE;comment:用户写的评论"`
    BindProfiles      []*BindProfile      `json:"bind_profiles" gorm:"many2many:user__bind_profile;constraint:OnDelete:CASCADE;comment:个人资料"`
}

用户资料<bind_profile>(也属于维度)

type BindProfile struct {
    Nickname    string        `json:"nickname" gorm:"comment:昵称"`
    Avatar      string        `json:"avatar" gorm:"type:json;comment:头像"`
    Intro       string        `json:"intro" gorm:"type:text;comment:个人介绍"`
    Tag         string        `json:"tag" gorm:"type:json;comment:个人标签"`
    Base        Base          `json:"base" gorm:"embedded"`
    EcoComments []*EcoComment `json:"eco_comments" gorm:"many2many:bind_profile__eco_comment;constraint:OnDelete:CASCADE;"`
}

维度:*<dimension_*>

type DimensionReading struct {
    Author        string        `gorm:"not null" json:"author"`   //作者
    Location      string        `gorm:"not null" json:"location"` //出处
    BaseDimension BaseDimension `json:"base_dimension" gorm:"embedded"`
    EcoComments   []*EcoComment `json:"eco_comments" gorm:"many2many:dimension_reading__eco_comment;constraint:OnDelete:CASCADE;comment:这个维度的评论"`
    Users         []*User       `json:"users" gorm:"many2many:user__dimension_reading;constraint:OnDelete:CASCADE;comment:这个维度属于谁"`
}
反向生成E-R图

[2023-07-19更新] 最初的继承层级依次为:Base -> BaseDimension -> *Dimension,并且每个实体的“ID” 列都在Base 中定义,如今考虑到“ID”列太过于常见,经常默认在最显眼的位置,故每个实体的“ID”列改完在 *Dimension 中定义。

相关文章

  • MySQL--进阶

    数据库设计 需求分析 需求设计 概要设计 抽取实体:业务模型->实体模型(类) 数据库设计:业务模型/实体模型->...

  • 打卡第二天

    技术开发文档 软件概要设计文档 软件详细设计文档 数据库设计文档 用户使用手册文档 信息结构设计 多任务时间节点规...

  • 数据库设计及使用规范

    一、前言 数据库设计及使用规范概要此规范可规避数据库设计与使用不当的问题,有效降低开发、运维、沟通、时间等成本,提...

  • 计算机二级java程序语言设计

    公共基础 数据库 数据库设计过程主要包括需求分析、概要结构设计、逻辑结构分析、数据库物理设计、数据库实施、数据库运...

  • 2021-09-10 转载: 软件开发类项目关键文档

    软件开发计划 需求规格说明书 软件概要设计说明 数据库设计说明 软件详细设计说明 可执行程序生成说明 软件测试计划...

  • 开发一个社交APP要多少钱?

    一般APP开发的流程 1)用户需求分析2)产品原型设计3)UI视觉设计4)数据库搭建5)服务端开发6)iOS客户端...

  • 服务端API开发鉴权设计

    服务端API开发鉴权设计

  • 大型系统设计容易遗漏的关键点

    这是山猫的第15篇原创 今天给大家说说软件系统设计容易遗漏的关键点,通常软件设计包括概要设计、数据库设计、详细设计...

  • 阿里数据库开发规范:谁还敢说你的数据库设计的“烂”

    数据库设计几个规范: 数据库命名规范、数据库基本设计规范、数据库索引设计规范、数据库字段设计规范、数据库SQL开发...

  • 2018-08-27 测试方案

    软件测试工作过程 1. 消化需求/概要设计/ui设计/编码规范/架构设计/数据库设计; 2. 分析并编写测试计划(...

网友评论

    本文标题:529.【博客开发】服务端概要设计-数据库设计

    本文链接:https://www.haomeiwen.com/subject/xlqpqdtx.html