Django-2.播客系統數據庫模型設計
分析
- 多人使用播客系統。採用BS架構實現。市面上多數某某系統歸根結底都是這種設計。
- 播客系統,核心模塊有:
- 用戶管理
- 註冊、登錄
- 刪除查用戶
- 博文管理
- 增刪改查博文
- 用戶管理
- 需要數據庫,本次使用Mysql5.5,InnoDB引擎。
- 需要支持多用戶登錄,各自可以管理自己的博文(增刪改查),管理是不公開的,但是博文是不需要登錄就可以公開預覽的。
- 先不要思考過多的功能,先完成最小的核心需求代碼。
數據庫設計
創建數據庫
CREATE DATABASE IF NOT EXISTS blog;
需要用戶表、文章表
用戶表user
字段 | 說明 |
---|---|
id | 主鍵,唯一標識 |
name | 用戶姓名,描述性字段 |
電子郵箱,註冊用信息,應該唯一。可用作登錄名、可用於密碼找回 | |
password | 密碼存儲。注意,不能明文存儲密碼。一般採用單向加密算法,如MD5 |
CREATE TABLE `user` (
`id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
`name` VARCHAR ( 48 ) NOT NULL,
`email` VARCHAR ( 64 ) NOT NULL,
`password` VARCHAR ( 128 ) NOT NULL,
PRIMARY KEY ( `id` ),
UNIQUE KEY `email` ( `email` )
) ENGINE = INNODB DEFAULT CHARSET = utf8;
文章表post
字段 | 說明 |
---|---|
id | 主鍵,唯一標識 |
title | 標題,描述性字段 |
author | 博文作者要求必須是註冊用戶,這個字段應該存儲userid |
postdate | 發佈日期,日期類型 |
content | 文章內容,博文內容可能很長,一般來說不會小於256個字符的 |
-
一對多關係:一篇博文屬於一個作者,一個作者有多篇博文。
-
Content字段的設計
- 字段類型:博文一般很長,不可能只有幾百個字符,需要大文本字段。MySQL中,選擇TEXT類型,而不是char或者varchar類型。
- 大小:text類型是65535個字符,如果不夠用,選擇longtext,有個字符長度。足夠使用了。
- 圖片存儲:博文就像HTML一樣,圖片是通過路徑信息將圖片是嵌入在內容中的,所以保存的內容還是字符串。圖片來源有2中:
- 外聯:通過URL鏈接訪問,本站不用存儲該圖片,但容易引起盜鏈問題。
- 本站存儲:需要提供博文的在線文本編輯器,提供圖片上傳到網站存儲,並生成圖片URL,這個URL嵌入播客正文中,不會有盜鏈問題,但要解決衆多圖片存儲問題、水印問題、在線壓縮問題、臨時或垃圾圖片清理等等難題。
- 本播客項目不實現圖片功能
- 字段考慮
- content字段存儲文本類型大字段,一般不和數據頻繁查詢的字段放在一張表中,需要拆到另一張表中。
CREATE TABLE `post` (
`id` BIGINT ( 20 ) NOT NULL AUTO_INCREMENT,
`title` VARCHAR ( 256 ) NOT NULL,
`author_id` INT ( 11 ) NOT NULL,
`postdate` datetime NOT NULL,
PRIMARY KEY ( `id` ),
KEY `author_id` ( `author_id` ),
CONSTRAINT `fk_post_user` FOREIGN KEY ( `author_id` ) REFERENCES `user` ( `id` )
) ENGINE = INNODB DEFAULT CHARSET = utf8;
CREATE TABLE `content` (
`id` BIGINT ( 20 ) NOT NULL AUTO_INCREMENT,
`content` text NOT NULL,
PRIMARY KEY ( `id` ),
CONSTRAINT `fk_content_post` FOREIGN KEY ( `id` ) REFERENCES `post` ( `id` )
) ENGINE = INNODB DEFAULT CHARSET = utf8;
- 注:這裏的SQL腳本本次不要用來生成表,使用ORM庫寫代碼來創建表,用來檢查實體類構建是否正確。
- 用戶完成的功能有登錄、註冊、登出等,user表基本滿足。
- 播客功能有用戶發文、文章列表、文章詳情等,post、content表基本滿足。
項目
項目構建
- 在Pycharm中創建一個項目,使用虛擬環境,Python使用版本是3.6