Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Q7. [個人技能題組][Backend] 第一個功能:會員註冊,開立 table。 #8

Open
wildwindjen opened this issue Mar 15, 2017 · 8 comments

Comments

@wildwindjen
Copy link
Contributor

wildwindjen commented Mar 15, 2017

環境架設好,總算可以進入開發的階段。我們就從「會員註冊」開始吧。
想像使用者在瀏覽器,來到「會員註冊」的表單,所以當使用者按下「註冊」時,會把表單資料送給後端存放。為了能夠存放會員資料,我們必須先在 DB 開立一個 table,就叫 member 吧。假設會員資料有「email」「密碼」「姓名」三個要存。

a. 請提供 table schema 。
b. 學到哪些 db client command?
c. 開立 table 要注意哪些事情?
d. 實務上,每個 table 都會有 id, created_at, updated_at 欄位,為什麼?

條件:

  • 只能使用 db 所提供的 client 程式下指令開立 table。

答題時間: 8 hr

@dustfantasy
Copy link

dustfantasy commented Mar 28, 2017

「於 2017/03/28 開始答題」
a.
member.sql

b.
create table member(name char(20),email char(50),password char(11),...);
c.
主要需要注意的為命名方式
命名規則統一、多筆資料加上s、不使用空白...
避免使用NULL作為預設值(會造成索引失效)
d.
id通常為auto_increment當每筆資料新增而遞增的數值,常用於設為主鍵。
created_at,updated_at皆為timestamp型態。
created_at為紀錄創建時間,以alter table time add column 'name' timestamp default current_timestamp建立。
updated_at在每次更新資料會紀錄時間,以alter table time add column 'name' timestamp default current_timestamp on update current_timestamp建立。
在有需要時可以更新時間或創建時間進行排序。

「於 2017/03/28 答題結束」

@dwatow
Copy link

dwatow commented Apr 3, 2017

「於 2017/04/03 開始答題」
a. 請提供 table schema 。
b. 學到哪些 db client command?
CREATE TABLE member (
Id INTEGER,
Name TEXT,
Email TEXT,
密碼 TEXT,
PRIMARY KEY(Id)
);
c. 開立 table 要注意哪些事情?
要有key
要想一下「找唯一值」是否有除了使用primary key之外的「找唯一值」的方法

d. 實務上,每個 table 都會有 id, created_at, updated_at 欄位,為什麼?
id就是要當主key。
created_at避免用id來當作建立前後順序。
updated_at修改日期或次數

「於 2017/04/03 答題結束」

@PenguinRun
Copy link

PenguinRun commented Apr 6, 2017

「於2017/04/06 開始答題」
a. 請提供 table schema 。

mysqldump -u -accountName- -p --no-data -dbName- > -fileName.sql-

DROP TABLE IF EXISTS `customer`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `customer` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `Name` varchar(20) DEFAULT NULL,
  `Email` varchar(20) DEFAULT NULL,
  `Password` varchar(20) DEFAULT NULL,
  `Img` longblob,
  `ImgName` varchar(20) DEFAULT NULL,
  `UpdateDate` datetime DEFAULT NULL,
  `CreateDate` datetime DEFAULT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=123 DEFAULT CHARSET=latin1;
/*!40101 SET character_set_client = @saved_cs_client */;

b. 學到哪些 db client command?

  • 建立一個table

    • CREATE TABLE -tableName- (
      -fieldName- -fieldType- ...
      )
  • 修改table name

    • ALTER TABLE -oldName- RENAME TO -newName-
  • 新增額外field

    • ALTER TABLE -tableName- ADD -newFieldName- -dataType-
  • 修改field

    • ALTER TABLE -tableName- CHANGE -oldFieldName- -newFieldName- -dataType-
  • 讓field內容可輸入中文

    • ALTER TABLE mytable CONVERT TO CHARACTER SET utf8

c. 開立 table 要注意哪些事情?

  • field型態在建立table前要先選好。
  • 每個table最少要提一個field來當主key(不可重複)。
  • 若沒設立CHARSET則不能輸入中文。

d. 實務上,每個 table 都會有 id, created_at, updated_at 欄位,為什麼?

  • id
    • 用來將資料做獨立的標記,當資料量大時避免混淆。
  • created_at
    • 在資料建立時做個紀錄。
  • updated_at
    • 在資料被修改時做個紀錄。

「於2017/04/06 答題結束」

@YenChunchen
Copy link

「於2017/04/10 開始答題」
a. 請提供 table schema 。

CREATE TABLE member (
id int(11) NOT NULL AUTO_INCREMENT,
email varchar(50) not NULL,
pwd varchar(20) not NULL,
nickName varchar(100) CHARACTER SET utf8 DEFAULT NULL,
PRIMARY KEY (id)
);

b. 學到哪些 db client command?
CREATE TABLE 資料表名稱 ( 欄位名稱 資料型態 是否允許NULL,.....); //建立資料表
INSERT INTO 資料表名稱 (欄位名稱...) VALUES (對應欄位值...); //新增資料
DESCRIBE 資料表名稱 //查看資料表結構

c. 開立 table 要注意哪些事情?

  • 規畫資料表前建議先畫出結構並決定資料型態
  • 資料表欄位命名需一致
  • 資料表必須要有主鍵,主鍵內容不可重複,不可為 NULL
  • 資料表如有外鍵,需對應至另一個資料表的主鍵

d. 實務上,每個 table 都會有 id, created_at, updated_at 欄位,為什麼?
id:可以建立資料的獨立性,方便作資料索引
created_at:該筆資料被建立的時間,可作資料回溯時的參考使用
updated_at:該筆資料最後被更新的時間,可作資料回溯時的參考使用

@HoHow
Copy link

HoHow commented Apr 20, 2017

「於2017/04/20 開始答題」
環境架設好,總算可以進入開發的階段。我們就從「會員註冊」開始吧。
想像使用者在瀏覽器,來到「會員註冊」的表單,所以當使用者按下「註冊」時,會把表單資料送給後端存放。為了能夠存放會員資料,我們必須先在 DB 開立一個 table,就叫 member 吧。假設會員資料有「email」「密碼」「姓名」三個要存。

a. 請提供 table schema 。
CREATE TABLE members (
id varchar(255) NOT NULL,
name varchar(255) NOT NULL,
email varchar(255) NOT NULL,
img varchar(255) NOT NULL,
password varchar(255) NOT NULL,
birthday varchar(255) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY members_title_unique (title)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
b. 學到哪些 db client command?
CREATE TABLE 建立資料表
ALTER TABLE ... ADD ... 新增欄位
ALTER TABLE ... modify ... 修改欄位
ALTER TABLE ... CHANGE ... 改變欄位
ALTER TABLE ... DROP ... 刪除欄位
c. 開立 table 要注意哪些事情?
不要亂命名,型別要用對,id要是主鍵,是否是必填欄位和編碼設定
d. 實務上,每個 table 都會有 id, created_at, updated_at 欄位,為什麼?
created_at:資料被建立的時間
updated_at:資料最後被更新的時間
「於2017/04/20 開始答題」

@wildwindjen
Copy link
Contributor Author

@HoHow

UNIQUE KEY members_title_unique (title)

這個是?

@wildwindjen
Copy link
Contributor Author

想到 mysql/mariadb 還有一個編碼 utf8mb4。

@alxtz
Copy link

alxtz commented Jun 1, 2017

「於2017/06/01 開始答題」

a.

  1. table schema

  1. 學到的 db command

    • CREATE DATABASE training_db; 開立新的資料庫
    • \l 列出現有的資料庫
    • \connect training_db 連接上資料庫
    • \d 列出資料庫裡的table
    • CREATE TABLE member(); 創建一個叫做member的資料庫
    • ALTER TABLE member ADD COLUMN email varchar(50); 在member裡面新增一個欄位
  2. table有些使用上的慣例

    參考資料 : http://study.com/academy/lesson/database-table-design-conventions.html , http://leshazlewood.com/software-engineering/sql-style-guide/

    • table如果會裝多筆資料,名稱會加上s
    • column的名稱通常會是全部小寫,不使用空白,改用_
    • 會有id欄位來標示唯一性
    • 注意SQL的關鍵字
    • 避免在任何欄位存入NULL
  3. 參考資料 : https://www.techonthenet.com/postgresql/primary_keys.php , https://stackoverflow.com/questions/1207983/in-general-should-every-table-in-a-database-have-an-identity-field-to-use-as-a

    id 拿來當作primary key,讓table裡的資料有獨特性

    有timestamp這樣的欄位可以方便除錯、以及記錄DB的動態
    「於2017/06/01 結束答題」

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants