上一節(jié)我們已經(jīng)能在pycharm下新建了blog app了, 這個(gè)時(shí)候,我們需要設(shè)計(jì)一下博客的數(shù)據(jù)庫設(shè)計(jì)
- 關(guān)于數(shù)據(jù)庫表的設(shè)計(jì),作為新手的我們并不需要要求懂太多稍微的懂一些也就可以了,畢竟數(shù)據(jù)庫也是需要有一定的功底的,
這里我們依據(jù)博客學(xué)習(xí),將博客表設(shè)計(jì)為三份:文章表,標(biāo)簽表,分類表
結(jié)構(gòu)類似于這樣子:


圖片也是截的,比較丑,這里我按照我個(gè)人的理解,說一下:
每一篇文章都有對應(yīng)的文章id,正文,發(fā)表時(shí)間,分類,標(biāo)簽
這很合理,我們能理解,但是!每篇文章都有些分類,標(biāo)簽,這樣會產(chǎn)生重復(fù)的數(shù)據(jù),造成資源的浪費(fèi),所以我們把分類與標(biāo)簽提取出來,單獨(dú)做成表,再跟文章相關(guān)聯(lián)起來。這就有了圖二的內(nèi)容。
2 接下來我們開始在blog/models下進(jìn)行數(shù)據(jù)庫表的創(chuàng)建(注意:因?yàn)閐jango使用的orm系統(tǒng)(Object Relational Mapping ))
貼上這里的三個(gè)表結(jié)構(gòu):
from django.db import models
# 專門用于處理網(wǎng)站用戶的注冊、登錄等流程,User 是 Django 為我們已經(jīng)寫好的用戶模型。
from django.contrib.auth.models import User
# Create your models here.
# 分類數(shù)據(jù)庫表
class Category(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
# 標(biāo)簽數(shù)據(jù)庫
class Tag(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
# 文章數(shù)據(jù)庫
class Post(models.Model):
'''
文章數(shù)據(jù)庫包含字段:標(biāo)題title 正文body 創(chuàng)建時(shí)間created_time
修改時(shí)間modified_time 摘要excerpt 分類category 標(biāo)簽tag 作者author
'''
title = models.CharField(max_length=100)
body = models.TextField()
created_time = models.DateTimeField()
modified_time = models.DateTimeField()
# blank 為true表示參數(shù)可以為空值za
excerpt = models.CharField(max_length=200,blank=True)
# ForeignKey,即一對多的關(guān)聯(lián)關(guān)系(一個(gè)分類下可以有多篇文章)
category = models.ForeignKey(Category)
# 而對于標(biāo)簽來說,一篇文章可以有多個(gè)標(biāo)簽,同一個(gè)標(biāo)簽下也可能有多篇文章,
# 所以我們使用 ManyToManyField,表明這是多對多的關(guān)聯(lián)關(guān)系。文章可以沒有標(biāo)簽,所以blank可以為true
tag = models.ForeignKey(Tag,blank=True)
# 文章作者,這里 User 是從 django.contrib.auth.models 導(dǎo)入的。
# django.contrib.auth 是 Django 內(nèi)置的應(yīng)用,專門用于處理網(wǎng)站用戶的注冊、登錄等流程,
# User 是 Django 為我們已經(jīng)寫好的用戶模型。
# 這里我們通過 ForeignKey 把文章和 User 關(guān)聯(lián)了起來。
# 因?yàn)槲覀円?guī)定一篇文章只能有一個(gè)作者,而一個(gè)作者可能會寫多篇文章,因此這是一對多的關(guān)聯(lián)關(guān)系,和 Category 類似
author = models.ForeignKey(User)
def __str__(self):
return self.title
以后有機(jī)會會改善代碼的顯示界面,如果支持的情況下,我們這里再貼上代碼的圖片


3 同步數(shù)據(jù)庫:


如果想知道django是如何操作數(shù)據(jù)庫的,可以使用命令:
圖片.png
這里再貼一下使用數(shù)據(jù)庫的命令:
python manage.py makemigrations
python manage.py migrate
當(dāng)我們看到Applying blog.0001_initial ....ok 就說明同步數(shù)據(jù)庫成功了。
python manage.py sqlmigrate blog 0001
django命令行知識:
1 同步數(shù)據(jù)庫: python manage.py makemigrations
python manage.py migrate
2 查看django如何操作數(shù)據(jù)庫:python manage.py sqlmigrate blog 0001
以上就是建數(shù)據(jù)庫表的設(shè)計(jì)。
