--- title: 資料庫期末專案 tags: NTOU CLASS, Project --- # 資料庫期末專案 ::: info * 課程名稱:資料庫系統 * 授課老師:[name=張雅惠老師] * 修課學期:112-1 ::: [TOC] --- ## Introduction :::info * 主題:資工電神交流區 * 成員:[DHugo](/@DHugo) [shen0628](/@shen0628) ::: --- ## 功能介紹 :::info 此系統是提供給資工系的學生互相交流與學習,使用者可以註冊並登入此系統,登入後即可開始上傳、修改、刪除筆記以及程式練習題目,就算沒有帳號的使用者也可以瀏覽或查詢別人分享的筆記以及程式練習題目。 ::: --- ## ER-Diagram ![ER Diagram](https://hackmd.io/_uploads/H13tf3Vh6.jpg) :::info * note 跟 code_practice 的 id,是指他們各自的文章ID,也是他們的 primary key * title、description、topic、course_name、url、userid,分別指他們各自的標題、描述、主題、相關課程、網址、作者ID(foreign key) ::: --- ## 表格定義與正規型式分析 ::: info **Tables** * user (userid, password, username) * note (id, title, description, topic, course_name, url, userid) * code_practice (id, title, description, topic, course_name, url, userid) ::: ::: info **Table `user`** ```sql= CREATE TABLE `user` ( `userid` varchar(50) NOT NULL, `password` varchar(1024) NOT NULL, `username` varchar(50) NOT NULL, PRIMARY KEY(`userid`) ); ``` **Normalization** F={   userid→password   userid→username } ::: spoiler 此表格符合3NF和BCNF 1. userid代表一個特定的user,所以可以決定唯一的username。 2. userid代表一個特定的user,且為一個特定的帳號,所以可以決定唯一的password。 3. userid是一個candidate key :::success ::: ::: info **Table `note`** ```sql= CREATE TABLE `note` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(64) NOT NULL, `description` varchar(1024) DEFAULT NULL, `topic` varchar(256) DEFAULT NULL, `course_name` varchar(64) DEFAULT NULL, `url` varchar(2048) NOT NULL, `userid` varchar(50) NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY (`userid`) REFERENCES `user` (`userid`) ON UPDATE CASCADE; ); ``` **Normalization** F={   id→title   id→description   id→topic   id→course_name   id→url   id→userid } ::: spoiler 此表格符合3NF和BCNF 1. id代表一個特定的noteID,所以可以決定唯一的title、description、topic、course_name、url、userid 2. id是一個candidate key ::: ::: info **Table `code_practice`** ```sql= CREATE TABLE `code_practice` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(64) NOT NULL, `description` varchar(1024) DEFAULT NULL, `topic` varchar(256) DEFAULT NULL, `course_name` varchar(64) DEFAULT NULL, `url` varchar(2048) NOT NULL, `userid` varchar(50) NOT NULL, PRIMARY KEY(`id`), FOREIGN KEY (`userid`) REFERENCES `user` (`userid`) ON UPDATE CASCADE; ); ``` **Normalization** F={   id→title   id→description   id→topic   id→course_name   id→url   id→userid } ::: spoiler 此表格符合3NF和BCNF 1. id代表一個特定的noteID,所以可以決定唯一的title、description、topic、course_name、url、userid。 2. id是一個candidate key ::: ---