播客系統資料庫模型設計–Django播客系統(二)
文章目錄
- 播客系統資料庫模型設計--Django播客系統(二)
-
分析
- 多人使用播客系統。采用BS架構實作。市面上多數某某系統歸根結底都是這種設計。
- 播客系統,核心子產品有:
- 使用者管理
- 博文管理
- 需要資料庫,本次使用Mysql5.5,InnoDB引擎。
- 需要支援多使用者登入,各自可以管理自己的博文(增删改查),管理是不公開的,但是博文是不需要登入就可以公開預覽的。
- 先不要思考過多的功能,先完成最小的核心需求代碼。
資料庫設計
建立資料庫
CREATE DATABASE IF NOT EXISTS blog;
需要使用者表、文章表
使用者表user
字段 | 說明 |
id | 主鍵,唯一辨別 |
name | 使用者姓名,描述性字段 |
email | 電子郵箱,注冊用資訊,應該唯一。可用作登入名、可用于密碼找回 |
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,有 2 32 − 1 2^{32}-1 232−1個字元長度。足夠使用了。
- 圖檔存儲:博文就像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
播客系統資料庫模型設計--Django播客系統(二)播客系統資料庫模型設計–Django播客系統(二) - 使用虛拟環境,Python挑選喜歡的版本(本次選用3.6)
播客系統資料庫模型設計--Django播客系統(二)播客系統資料庫模型設計–Django播客系統(二) - 注:Pycharm中可通過setting重新設定虛拟環境。
播客系統資料庫模型設計--Django播客系統(二)播客系統資料庫模型設計–Django播客系統(二) - 本次項目使用Django開發背景。