瀏覽分類:

後端前進 PostgreSQL

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

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

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

閱讀更多

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;
閱讀更多

JOIN 資料表的結合

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

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

閱讀更多

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

關聯式資料庫的概念,是由多個互相有關係的資料表儲存資料並建立關聯。每個資料表是一個實體物件資料,像是我們的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)

閱讀更多

PostgreSQL COPY 匯入資料

今天來嘗試匯入資料的功能,這個超級方便,先想辦法下載資料吧!

打算用 行政院農業委員會資料公開平台下載動物認養資料(.csv)測試 https://data.coa.gov.tw/Query/AdvSearch.aspx?id=QcbUEzN6E6DL

如果用 INSERT 插入資料的陳述句,要寫上百條,上千條資料,苦惱、麻煩、不想做,還好有一個方便的功能 COPY 陳述句,這是 PostgreSQL專有的功能,可以匯入有分隔符號,一行一筆資料的檔案。

  1. 準備好原始要匯入的檔案 今天以 .csv 當範例
  2. 建立好資料表(因為PostgreSQL 只會全部讀入,所以欄位資料一定要夠,並且依照原始檔csv內容去新建)
  3. 利用 COPY 程式碼匯入資料
閱讀更多

資料類型

在建立資料表的過程中,我們需要對新建立的資料表定義欄位結構。

每個欄位都必須給它屬性,例如 文字、數字、日期 這些最常見。

我們前幾天有建立一張 animals 資料表,sql 語法如下

CREATE TABLE animals (
    id bigserial,
    name varchar(255),
    created_at timestamp,
    updated_at timestamp
);
  • bigserial 遞增型的八位元整數
  • varchar 自動適應的字串最大255字元
  • timestamp 日期與時間

之前有說明過,但還有很多資料類型!

閱讀更多

插入資料、SELECT資料

INSERT

INSERT INTO animals (name, created_at, updated_at)
VALUES  ('大黑', now(), now()),
        ('安娜', '2019-09-11 10:00:00', '2019-09-11 10:00:00');

昨天建立好資料庫 animal ,以及資料表animals,如上SQL 語法插入兩筆動物資料。

提醒

有時候可能你輸入的程式碼有問題,手殘按錯字母,PostgreSQL 會顯示相對應的錯誤,提醒我們錯誤的位置在哪邊,但有時候還是會有點模糊,就要發揮工程師的點滿技能,上網查一下問題的解決方法,可能有人也經歷過一樣的問題,可參考他的解決辦法。

閱讀更多