基础故事分享网站的数据库设计

表:

Users                User_profile
--------             -------------
user_id(PK)          user_profile_id(PK)
username             user_id(FK)
password             display_name
date_created         birth_date
last_login           gender


Story                story_chapter                 chapters
------              -----------------              -------------
story_id(PK)        story_chapter_id(PK)           chapter_id(PK)  
image_id(FK)        story_id(FK)                   chapter_title
story_title         chapter_id(FK)                 chapter_content
synopsis            date_added                     
                    last_updated 


story_genre          story_tag          story_content_warning
-----------          ---------          ----------------------
story_genre_id(PK)   story_tag_id(PK)   story_content_warning_id(PK)
story_id(FK)         story_id(FK)       story_id(FK)
genre_id(FK)         tag_id(FK)         content_warning_id(FK)


genre                tags               content_warning
-------              ----------         ----------------
genre_id(PK)         tag_id(PK)         content_warning_id(PK)
genre_name           tag_name           content_warning


Published_story    
-----------------    Profile_image           image_type
published_id(PK)     --------------          ------------
story_id(FK)         profile_image_id(PK)    image_type_id(PK)
user_id(FK)          image_type_id(FK)       type_name
published_date       file_name
last_updated         file_path


Bookmark             Follow_author
----------           --------------
bookmark_id(PK)      Follow_id(PK)
published_id(FK)     published_id(FK)//get the user_id in published table
user_id(FK)          user_id(FK)//user_id of the user who followed
bookmark_date        follow_date



review               review_type          chapter_review/rate     
------------         -----------          -------------------- 
review_id(PK)        review_type_id(PK)   chapter_rate_id(PK)
published_id(FK)     type_name            chapter_id(FK)
review_type_id(FK)                        user_id(FK)
rating                                    rating
content/summary                           rate_date
review_date    

image_type表没什么特别的。 行type_name引用此图像用于哪个页面,因为每个页面具有不同的显示尺寸。 例如: 'story'类型名称用于显示故事图像封面(200x200)。 'user'用于用户配置文件(100x100)。

我在codeigniter中为此使用了image_lib。 $this->image_lib->resize(); 所以在我上传图片上传的文件夹中。 我存储3种类型,原始版本,200x200版本和100x100版本。

用户可以:

  • 浏览故事
  • 发布故事
  • 评论故事/作者/章节(发布故事的其他用户)
  • 书签故事
  • 请关注作者
  • 得到通知
  • 让我详细说明通知部分。

    用户:
    如果将新章节添加到故事(书签)接收通知
    如果作者发布了新故事(后续),则会收到通知
    接收对故事/章节进行的通知更改(编辑)

    作者:
    如果用户/读者评论故事和评分章节,则会收到通知。
    如果用户/阅读者遵循作者或书签故事,则会收到通知。
    如果用户/读者评论作者(简介),则会收到通知。

    基于上述规范,我的数据库设计是否足够好? 另外关于通知。 我知道我需要制作记录每个动作的日志/事件表。

    例如,如果用户发布了一个故事,那么我将不得不将其插入到日志/事件表中。

    问题是,idk如何设计事件表。 有不同类型的事件(发布,评分,评论等)。 所以我需要一个'类型'列来区分。 但我在哪里把id外键指向事件的实际记录。

    说发布事件的published_id(FK)。 或审查事件的review_id(FK)。

    将一列作为action_id(FK)但将其指向多个表(published_story,review,bookmark等)是错误的。

    我还在网上读到,它有多个外键列是空的。 由于对于第1行,我只需要1个外键来指向哪个表,因此其余列将为空。

    Event
    ----------
    event_id(PK)
    publish_id(FK) NULL
    bookmark_id(FK) NULL
    review_id(FK) NULL
    Follow_id(FK) NULL
    event_date
    

    更新:

    我真的不知道如何设计我的通知系统。

    如果我不想要多个空外键的上表,我必须将它们分隔到不同的表中。

    event_publish            event_review          event_follow         
    -------------            -------------         -------------
    event_publish_id(PK)     event_review_id(PK)   event_follow_id(PK)
    publish_id(FK)           review_id(FK)         follow_id(FK)
    
    event_bookmark           event_chapter_rate      
    ---------------          -------------------
    event_bookmark_id(PK)    event_chapter_rate_id(PK)
    bookmark_id(FK)          chapter_rate_id(FK)
    

    我如何将上述表格并入我的通知系统呢?

    链接地址: http://www.djcxy.com/p/70627.html

    上一篇: Database Design for basic story sharing site

    下一篇: Comments for multiple parent objects