資料表設計規則-命名規則

之前有提到過小弟我是在開發WEB的工程師,經過幾次的案子會發現,注意一些小細節,建立好一個原則,對於大型的專案有很大的幫助。一開始可能覺得很麻煩,就跟後端程式碼的Coding Style一樣,縮排要空幾格、逗號之後空一格、名稱格式…感覺沒什麼用,資料庫也是一樣,如果隨便命名資料表,依照當下心情去決定,或是不想設定條件約束,設定後礙手礙腳,不好操作。

不過只要知道原理,以及命名有一個原則,等到有非常多資料表在資料庫中時,就會感受到這些小細節帶給你的好處!

閱讀更多

會員權限設計(管理員、一般會員)

昨天設定修改資料表以符合需求,接下來要設定權限部分,打算分兩種會員 管理員與一般會員。

權限說明
管理員可以做所有的新增刪除修改
一般會員可以新增動物而已,並且只能修改自己新增的動物。無法新增刪除修改分類

新建一個原則 policy

php artisan make:policy AnimalPolicy -m Animal
產生policy檔案
閱讀更多

JOIN 介紹

今天來介紹JOIN,有以下幾個模式!

  1. JOIN
  2. LEFT JOIN
  3. RIGHT JOIN
  4. FULL OUTER JOIN
  5. CROSS JOIN
SELECT aga.area_pkid, a.name, aga.subid, aga.place, aga.kind 
FROM adoption_gov_animals AS aga LEFT JOIN areas AS a 
ON aga.area_pkid = a.id;
閱讀更多

修改資料表新建 migration

明天我們要來建立權限的部分,之前設定的是驗證使用者使用 token 身份,但一班的網站至少會有管理員或一般會員的區分,因此今天先來修改基本需要設定的東西。

變更資料表

資料表原本規劃時沒注意到的地方,或是規劃好的東西難免都會被要求修改需求,所以修改資料表也是一門學問,用 migration 檔案修改檔案可以方便整個團隊更新到最新的版本。

跟大家說一個經驗,如果目前的系統是在線上用運行中的,並且公司沒有 DBA 在負責管理資料庫的話,要變更資料庫欄位時一定要三思而後行。 至少要確認有沒有備份。

閱讀更多

JOIN 資料表的結合

為什麼拆開了!又要結合~你真的很野小,雖然只是把地區編號不重複的查詢出來,並補上資料,拆成areas 資料表,感覺起來好像沒有什麼,但是如果去拆分csv原始檔 後面的 動物所屬收容所代碼名稱,就會感受到拆解出來可以結審很多空間。

但在拆解後面的資料前,我們先嘗試把兩張資料表結合再一起吧!雖然是結合起來,但並不是真的合成一張表,是用 JOIN這個陳述,查詢出來並不是建立一個資料表

閱讀更多

OAuth2 認證機制 Token 原理

簡單說要做任何需要認證的請求時。例如(我「想」要新增動物)那麼就要先跟伺服器請求核發一組 Access Token(就是一段亂碼)。把這個 Token 附帶在請求中,就可以操作需要驗證的API (我要新增動物-附帶有效的Token)

Passport 是一個官方推薦的套件,可以輕鬆簡單的讓你完成一個完善的 OAuth2 認證機制!

(這裡指的是否登入的感覺,不是權限角色的分組)

順帶一提,Passport Laravel版本必須要大於 5.3 才能使用。

閱讀更多

加入會員認證、註冊帳號

現在的API所有人都可以去操作這些資源Animal、Type 我們要來製作必須驗證後才可以操作API。

Laravel 提供了一種快速的方法,可以使用一個簡單的命令來建置認證所需的所有路由和前端畫面(view),主要是介紹著一個功能,方便我們註冊User帳號。

php artisan make:auth

執行後會產生這些變更

閱讀更多

整理資料表(一) 什麼是關聯式資料表?

關聯式資料庫的概念,是由多個互相有關係的資料表儲存資料並建立關聯。每個資料表是一個實體物件資料,像是我們的animals 資料表,裡面每一筆資料都是物件資料,內容包含動物的所有特性。

我們來整理一下前幾天匯入的另外一張資料表 adoption_gov_animals。如果沒匯入請到前天的文章執行一下SQL

拆分種類資料

adoption_gov_animals 中有一個欄位資料是紀錄動物種,可以用下方SQL執行看看,公開資料有多少種類。

SELECT DISTINCT kind FROM adoption_gov_animals;

顯示結果是有三種,我們把它拆出來到另外一張資料表。先建立一張資料表 types 裡面包含主鍵 id ,以及 name 欄位。其他欄位是紀錄新建以及更新時間。

CREATE TABLE types (
  id bigserial PRIMARY KEY,
  name varchar(20),
  created_at timestamp,
  updated_at timestamp
);

建立完成資料表以後,我們把資料寫入 types 資料表

INSERT INTO types(name,updated_at,created_at)
SELECT DISTINCT kind, now(), now() FROM adoption_gov_animals;

成功!我們有一張 分類資料表了!來記錄每一種分類,例如:貓|狗|鳥…

我們建立一個新的欄位在 adoption_gov_animals 欄位名稱為 types_id 來紀錄兩個的關係,欄位類型要跟 types 資料表的 id 一樣(bigint)

閱讀更多