簡單對上述要求進行抽象,可以得到如下e-r圖
:
其中使用者-題目
、使用者-回答
關係並不是簡單的一對多關係,當原先的使用者被刪除後,題目和回答應該可以單獨存在,即對應0
個使用者。
為其新增便於查詢的xid
屬性並標記主鍵後得到如下e-r圖
:
使用者(uid,email,密碼,暱稱,許可權)
題目(qid,標題,建立者uid,詳細,最佳答案的aid,建立時間,修改時間)
回答(aid,所屬問題qid,內容,建立者uid,建立時間,修改時間)
標籤(tid,名稱,描述)
題目-標籤(tid,qid)
【beta新增】點讚(uid,aid)
以上所有關係中除了最後乙個都只有第乙個屬性是鍵。題目-標籤關係中,所有屬性共同構成主鍵,每乙個主屬性都是外來鍵。
屬性名描述
基礎型別
額外約束
uid使用者id
int主鍵,由資料庫負責維護,遞增
使用者郵箱
varchar(254)
備用鍵,不能重複,不能更改
bcrypt
密文密碼
char(len)
由於目前沒有確定具體加密演算法,所以資料庫密碼長度暫時未確定
name
暱稱varchar(18)
備用鍵,不能重複,2~18個字元
auth
許可權int
1表示使用者,2表示管理員
屬性名描述
基礎型別
額外約束
qid題目id
int主鍵,由資料庫負責維護,遞增
title
標題varchar(150)
不超過150個字元
creater
建立使用者
int可空外來鍵,應當是user關係中存在的uid,當對應的使用者被刪除時,應由觸發器將此項置為空
remarks
詳細資訊
varchar(max)
best
最佳答案
int可空外來鍵,應當是answer關係中存在的aid,且該aid對應的回答的qid必須與本元組相同,當對應回答刪除時,應由觸發器將此項值為空
createtime
建立時間
date
建立此項的時間,由資料庫維護,不可更改
modifytime
修改時間
date
每次修改此項應當更新,由資料庫維護
屬性名描述
基礎型別
額外約束
aid回答id
int主鍵,由資料庫負責維護,遞增
qid所屬問題
int不可空外來鍵,當qid對應的問題刪除後,此項也應當由觸發器刪除
content
回答內容
varvhar(max)
creater
建立使用者
int可空外來鍵,應當是user關係中存在的uid,當對應的使用者被刪除時,應由觸發器將此項置為空
createtime
建立時間
date
建立此項的時間,由資料庫維護,不可更改
modifytime
修改時間
date
每次修改此項應當更新,由資料庫維護
屬性名描述
基礎型別
額外約束
tid標籤id
int主鍵,由資料庫負責維護,遞增
name
名字varchar(16)
不超過16個字元
desc
詳細描述
varchar(max)
屬性名描述
基礎型別
額外約束
qid問題id
int外來鍵,當qid對應的問題刪除後,此項也應當由觸發器刪除
tid標籤id
int外來鍵,當tid對應的標籤刪除後,此項也應當由觸發器刪除
屬性名描述
基礎型別
額外約束
uid使用者id
int外來鍵,當uid對應的使用者刪除後,此項也應當由觸發器刪除
aid回答id
int外來鍵,當aid對應的回答刪除後,此項也應當由觸發器刪除
建立專案資料庫
建立專案資料庫 開發工具與關鍵技術 當我們分析完專案的需求,了解專案的大概流程和專案的需求之後,我們就可以開始資料庫的設計了,設計專案資料庫是乙個專案裡面非常重要的乙個環節,資料庫中建立的資料結構的種類,以及在資料410物件之間建立的複雜關係是資料庫系統效率的重要決定因素。乙個良好的資料庫設計可以節...
部落格專案 資料庫篇
使用者表 create table lblog user id int 11 not null auto increment comment 使用者表id username varchar 50 not null comment 使用者名稱 password varchar 50 not null ...
專案 資料庫設計經驗
做任何事情,要統一,有序。5s中的一些概念也可以借鑑一下。做專案,資料庫是很重要的一塊,現在是邊學邊總結。一 資料庫表的命名 例如 misqc01m 代表是主表 misqc01d1 代表第乙個明細表 經過對名字的整理,使系統有條理,清潔,使用的時候快速。二 新增常用表字段 create table ...