# 1 、 資料庫基礎 ###### tags: `BE101` `PHP` `2020九月第四周` `進度筆記` `Lidemy心得` ## 資料庫系統 - Server → 是專門用來處理 Request 和 Response 的程式。 - 資料庫系統 → 專門用來處理資料的程式。 為何需要資料庫? 寫程式的時候常常需要處理資料,程式開啟時可以存在變數或是記憶體內,但一旦關閉程式後資料就沒了,因此需要把資料存在檔案內(永久保存來存檔)。 可能檔案會透過一般常見的存檔方式下去存: ``` 學號 | 國文分數 | 英文分數 | 總平均 xx號 | 98 | 99 | 98 ``` 但讀存檔本身在自己處理資料,資料一多會很難處理。 讀檔時如果一筆筆下去找就會很沒效率(檔案存取的限制),因此就有了開發資料庫系統,資料在底層一樣存在 I/O , 但資料庫系統提供了方便性、和使用語法去操作、拿取和儲存資料並且容易維護。 - 資料庫的語法很類似。 ## 資料庫系統種類 1. 關聯式資料庫: - 有 table(一整個或是多個表格資料),會有方便的介面來提供存檔讀取或操作。 - 如果除了學號、分數以外還有學生姓名,那就會有兩份 table 來分開存資料: - 學生資料(學號、姓名、地址...etc) 。 - 分數資料(學號、各科分數...etc) 。 - 新增資料會多個欄位或是更改表格結構。 - 這樣兩份資料的 table 關聯共通性就是學號,可以透過關聯性來拿取要的資料、和把資料的定義分開,才不會把不相干的資料放在一起。 - SQL 就是專門用來查詢關聯性資料的程式語言。 - 大部分情形的資料型態蠻適用關聯性資料庫。 - 常見的有 MySQL 、 PostgreSQL...等等。 ## NoSQL (Not only SQL) - 以關聯性資料儲存可能有些限制,可能是字串或是數字類型...等。 - 因此有一定的資料型態。 - 而在 NoSQL 的 System 的型態,可能會存成類似 JSON 的物件型態。 - 因此可能存成 array , 或是另外一個 obj 都是可行的。 ``` { score: [1, 2, 3], student: { name: '123' } } ``` - 存 log 的時候,會派上用場,因 log 資料很大量,而且資料內容(User 資訊)會改變。 - 用 NoSQL 的好處是可以直接存資料,不太需要改結構。 - NoSQL 的 資料庫有 MongoDB...等。 *** 參考資料: [什麼是關聯式資料庫? – Amazon Web Services](https://aws.amazon.com/tw/relational-database/) [關聯式資料庫是什麼?](https://www.oracle.com/tw/database/what-is-a-relational-database/) [資料庫系統應用\- 關聯式資料庫 \- iT 邦幫忙 - iThome](https://ithelp.ithome.com.tw/articles/10185512) [SQL/NoSQL是什麼?認識資料庫管理系統DBMS|ALPHA ...](https://tw.alphacamp.co/blog/sql-nosql-database-dbms-introduction) [該用 MySQL 或 MongoDB?選擇資料庫前你該了解的事](https://tw.alphacamp.co/blog/mysql-and-mongodb-comparison) *** # 1-1 、 MySQL 簡介 ###### tags: `BE101` `PHP` `2020九月第四周` `進度筆記` `Lidemy心得` - MySQL 和 PostgreeSQL 為知名的資料庫系統。 - MySQL 底下分支是 MariaDB , MariaDB 的目標是完全相容 MySQL ,且目前仍是 Open Source 。 - 有些大公司可能採用微軟或是 Oracle 的 SQL 。 *** # 1-2 、 資料庫管理員 - phpMyAdmin ###### tags: `BE101` `PHP` `2020九月第四周` `進度筆記` `Lidemy心得` - 如何存取資料庫系統 ? 用 CLI 使用 MySQL 指令去連接資料庫系統,管理資料庫。 - 也可以用 GUI 介面去管理資料庫 - phpMyAdmin , 是寫好的 php 網頁來幫助管理資料庫。 - 新增資料庫表格 - phpMyAdmin 會幫你下指令(用 SQL)在底層新增。 - 除了 phpMyAdmin (如果對安全性有疑慮) 還有 Adminer 、 Sequel Pro可以使用。  *** # 1-3 、 Table 也有格式設定集 ###### tags: `BE101` `PHP` `2020九月第四周` `進度筆記` `Lidemy心得` ## Table schema 結構簡介 ==phpMyAdmin 結構屬性:== - #(排序) 、 ==名稱(欄位的關鍵名稱)、 型態(欄位存的資訊,字串、數字之類)==、 編碼和屬性..等。 - 欄位名稱(通常是 ID) 、 多種型態(常用的例如:整數 INT) 。 - 編碼排序沒填,會預設用資料表備註的編碼排序。 - 如果資料表備註的沒填,則由 DataBase 的補上(通常 DataBase 設定好就不會動)。 - 屬性指定 unsigned , 數值是正整數的話可以存 0~255 , 是 127 的兩倍(不考慮負值) 。 - Auto Increment (AI) , 自動增加(對 ID 使用,不重複的 ID 遞增) ,每個欄位(row)要有不同 ID , 但 ID 不一定會有延續性,如果 1~5 把 5 刪除,下筆會繼續從 6 開始。 ## 可能的 Table schema 設定 基本資料表,例如: - 會對 username (ID) 做限制,例如型態設成 VARCHAR , 長度/值限制在 20 , 超過不能存入 , VARCHAR 會依照資料的長度變更其儲存空間大小。 - content (ID) , 型態會設成 TEXT ,TEXT 不太需要管長度,不是 Unicode , 長度最大達 2^31-1(2,147,483,647) 大小,文檔再大一點可能會選 LONGTEXT 。 - created_at_when (ID) , 型態 DATETIME(時間) 、 預設值可能是現在的時間點(CURRENT_TIMES) , 如此新增一筆資料的時候,資料庫會幫忙處理把值填進去當作預設值,這樣就不用手動記甚麼時候 User 把文章建立之類的時間。 __填寫好資料表名稱後,儲存完成,即有基本資料表。__  - 欄位 (ID) 、 型態(Int) , 值(不用填,會照預設值自己遞增) 。 - 好了後會用 SQL 語法跑資料。 __做產品前會想資料庫的結構怎麼建立,需要設定多種細節。__ ## 主鍵(Primary Key, PK)  ==是 table 中最重要的欄位,設定成 PK 的欄位要滿足幾個條件:== 1. 不能是空的東西。 2. 不能重複。 3. 例如員工系統、會員帳號會使用。 ## 唯一(Unique) ==唯一性質,該筆資料不能重複,如果在資料庫中新增重複資料會被資料庫擋下。== - 通常 PK 會是 Unique , 不用額外設定。 - 如果不想有相同的帳號或是 e-mail (不是 PK) , 因此可以設定成 Unique 。 ## 索引、目錄(Index) ==快速定位要找的資料== - 因此要符合條件,像是搜尋部分字串,如姓名符合某種條件,叫做 Nick 。 - 會幫你統整資料,例如甚麼資料在甚麼位置,可以被快速定位。 - 會佔空間,對要常查詢的資料使用,但建立後就可以快速查詢。 - 可以把兩種以上欄位複合建立索引: - 例如把 username 和 created_at_when 合在一起,同時要查兩者就會比較快。 *** 參考資料: [The Schema Table - SQLite](https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&ved=2ahUKEwj1nZzhwrbsAhUtK6YKHR3ACJ4QFjAOegQIChAC&url=https%3A%2F%2Fsqlite.org%2Fschematab.html&usg=AOvVaw3Rzu1XHmCGmKufiusHLHRC) [Day10:範例 db Table Schema 及測試用 store procedure 的說明。](https://ithelp.ithome.com.tw/articles/10202744) [\[SQL 基本觀念\] primary Key / Index / Unique 差別« Nic Lin's Blog](https://blog.niclin.tw/2018/06/09/sql-%E5%9F%BA%E6%9C%AC%E8%A7%80%E5%BF%B5-primary-key-/-index-/-unique-%E5%B7%AE%E5%88%A5/) [\[好文分享\] MySQL 中key, primary key, unique key 與index 區別 ...](https://blog.yuyansoftware.com.tw/2018/10/mysql-key-index/) [建立唯一索引\- SQL Server | Microsoft Docs](https://docs.microsoft.com/zh-tw/sql/relational-databases/indexes/create-unique-indexes) https://ithelp.ithome.com.tw/articles/10213922 ***
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up