แนะนำการใช้ฐานข้อมูล SQLite กับ Lazarus

ข้อดีของ SQLite

  • พัฒนาโดย D. Richard Hipp ด้วยภาษา C จำนวนโค๊ดรวมๆแล้วประมาณสามหมื่นกว่าบรรทัด ซึ่งผู้พัฒนาได้รับคำชมว่าเป็นผู้ที่เข้าใจในวิทยาการด้านคอมพิวเตอร์อย่างลึกซึ้ง
  • สำหรับ SQLite น่าจะเป็นฐานข้อมูลที่นิยมใช้กันมากที่สุดในโลก เนื่องจาก เล็ก เร็ว แรง และที่สำคัญมากคือ เสถียร และข้อดีอีกที่ไม่พูดไม่ได้คือ ฟรีและ cross-platform เป็นฐานข้อมูลที่จัดเก็บในไฟล์เดียว ไม่ต้องมีฝั่ง Server ไม่ต้องตั้งค่าใดๆให้ยุ่งยาก
  • สามารถใช้ภาษาโปรแกรมได้เกือบทุกภาษาในโลกนี้ โดยเฉพาะ Lazarus จะมี component ที่ติดตั้งมาให้พร้อมใช้งานได้เลย

สถานการณ์ที่เหมาะและไม่เหมาะสำหรับ SQLite

  • ถ้าใช้เป็นฐานข้อมูลสำหรับ website ที่คนเข้าไม่มากนักก็ใช้ได้ดี หรือเป็นฐานข้อมูลสำหรับโปรแกรมสำหรับเครื่อง PDA ก็สะดวกเพราะมีขนาดเล็ก สำหรับความคิดของผมแล้วฐานข้อมูลไหนก็ตามที่ใช้ Microsoft Access ใช้ SQLite แทนได้ทั้งนั้น แถมดีกว่าทุกๆอย่าง
  • สถานการณ์ที่ไม่เหมาะได้แก่โปรแกรม Client/Server ที่ระบบข้อมูลมีการส่งผ่านข้อมูลสูงมาก เช่น website ที่มีคนเข้ามาก ควรหันไปใช้ RDBMS ตัวใหญ่ๆจะดีกว่าเช่น MySQL, MS SQL

Download และ ติดตั้ง

  • สำหรับ windows ไปดาวน์โหลดไบนารีได้ที่ http://www.sqlitedll.org/sqlite-3_6_19.zip (ขณะที่เขียน blog นี้เป็น version 3.6.19) เมื่อแตกไฟล์ zip ออกมาจะได้ sqlite3.dll และไฟล์  sqlite3.def  ให้ copy ไปไว้ที่ c:\windows\systems32 หรือ copy ไปไว้ที่โฟลเดอร์ของโปรแกรมที่กำลังพัฒนาด้วย lazarus
  • ถ้าต้องการ tools สำหรับ admin ใช้บน command line เพื่อจัดการฐานข้อมูลก็ดาวน์โหลดได้ที่ http://www.sqlite.org/sqlite-3_6_19.zip
  • สำหรับ Linux ที่ผมใช้อยู่คือ Ubuntu และ PCLinuxOS ใช้คำสั่งเดียวกันคือ

[sourcecode language=”bash”]$ sudo apt-get install sqlite[/sourcecode]

สุดยอด Admin Tools สำหรับ SQLite บนวินโดส์

  • ลองมาหลายอย่างแล้วไม่มี tools ตัวไหนดีเท่ากับตัวนี้ ชื่อโปรแกรมก็คือ SQLite Administrator สมกับที่ผู้พัฒนาเรียกโปรแกรมเขาว่า power tool สามารถออกแบบ สร้าง บริหารฐานข้อมูล SQLite ได้
  • ดาวน์โหลดได้ที่ http://download.orbmu2k.de/files/sqliteadmin.zip
  • โปรแกรมมีขนาดเล็กไม่ต้องติดตั้ง unzip ไปวางไว้ตรงโฟลเดอร์ไหนก็ได้ มารันโปรแกรมกันดู
sqliteadmin1

เริ่มต้นสร้างฐานข้อมูลด้วย SQLite Administrator

  • การสร้างฐานข้อมูล SQLite ใหม่สามารถทำได้หลายวิธี วิธีที่ยากกว่า(แต่ก็ไม่ยากเท่าไหร่) ก็คือสร้างด้วยโค๊ด ที่เราสนใจคือสร้างด้วย Lazarus โดยเรียกใช้ผ่านภาษา sql ส่วนวิธีที่ง่ายกว่า ก้สร้างด้วยโปรแกรม SQLite Administrator ที่แนะนำกันนี้แหละ
  • ตัวอย่างที่จะแนะนำกันได้แก่สร้างฐานข้อมูลเพื่อเก็บรูปทรงรีเพื่อมาใช้แทนยูนิตของ Lazarus ที่ผมเสนอไปหลายตอนแล้วคือ GeoEllipsoids (geoellipsoids.pas) ผมจะเริ่มจาก text file (.csv) ชื่อไฟล์ Ellipsoids.csv ที่เก็บรูปทรงรีดังลิสต์ด้านล่าง (ถ้าผู้อ่านสนใจก็ลอง copy ไปวางที่ text editor แล้วเซฟชื่อเป็น ellipsoids.csv)

Airy 1830,AA,6377563.396,6356256.909,299.3249646
Modified Airy,AM,6377340.189,6356034.448,299.3249646
Australian National,AN,6378160,6356774.719,298.25
Bessel 1841(Namibia),BN,6377483.865,6356165.383,299.1528128
Bessel 1841,BR,6377397.155,6356078.963,299.1528128
Clarke 1866,CC,6378206.4,6356583.8,294.9786982
Clarke 1880,CD,6378249.145,6356514.87,293.465
Everest  1830,EA,6377276.345,6356075.413,300.8017
Everest (E. Malasia & Brunei),EB,6377298.556,6356097.55,300.8017
Everest 1956,EC,6377301.243,6356100.228,300.8017
Everest 1969,ED,6377295.664,6356094.668,300.8017
Everest 1948,EE,6377304.063,6356103.039,300.8017
Everest (Pakistan),EF,6377309.613,6356109.571,300.8017
Mod. Fischer 1960(South Asia),FA,6378155,6356773.32,298.3
Helmert 1906,HE,6378200,6356818.17,298.3
Hough 1960,HO,6378270,6356794.343,297
Indonesian 1974,ID,6378160,6356774.504,298.247
International 1924,IN,6378388,6356911.946,297
Krassovsky 1940,KA,6378245,6356863.019,298.3
GRS 80,RF,6378137,6356752.314,298.2572221
South American 1969,SA,6378160,6356774.719,298.25
WGS 72,WD,6378135,6356750.52,298.26
WGS 84,WE,6378137,6356752.314,298.2572236

  • ที่เมนเมนูของโปรแกรมคลิกที่ Database > New… หรือคลิกที่ icon “Create Database” ก็ได้ ป้อนชื่อฐานข้อมูลเป็น Datums.s3db แล้วเซฟไว้

สร้าง Table ใหม่

  • ตอนนี้เราได้ฐานข้อมูลมาแล้วหนึ่งไฟล์ ต่อไปเราจะสร้าง Table เพื่อเก็บรูปทรงรีจะตั้งชื่อ Table นี้ว่า Ellipsoids คลิกขวาที่ Tables > Create Table ดังรูปด้านล่าง
sqliteadmin3
  • จะเห็น dialog ขึ้นมา ป้อนชื่อ table แล้วคลิกที่ Add field ป้อนชื่อ field , field type ดังรูปด้านล่าง
sqliteadmin4
  • ทำการ Add field เข้าไปอีกให้ครบ
sqliteadmin5
  • จากรูปด้านบนผมตั้งให้ field ชื่อ Code ของทรงรี เป็น primary key และไม่ซ้ำกัน ต่อไปเราจะ import หรือปั๊มข้อมูลเข้า table ซึ่งยังว่างๆในตอนนี้

การปั๊มข้อมูลเข้า Table

  • ที่เมนูหลักคลิกที่ Data > Import data… จะเห็น dialog เป็นดังรูปด้านล่าง
sqliteadmin6
  • จากรูปด้านบน จุดที่ 1 คลิกที่ Open File เลือกไฟล์ ellipsoids.csv ที่เราเตรียมไว้ โปรแกรมจะถามว่าใช้อะไรเป็นเครื่องหมายคั่น ให้พิมพ์เครื่องหมายจุลภาค(comma) และถามต่อว่าไฟล์ ellipsoids.csv มีหัวไฟล์ (header column) ตอบ No ดูที่จุดที่ 2 เลือก Target Table เลือกตาราง Ellipsoids จุดที่ 3 ทำการ map column ของไฟล์ให้เข้ากับ field ของฐานข้อมูลดังรูปด้านบน จุดที่ 4 คลิกที่ Import Data เพื่อนำข้อมูลเข้าได้เลย
  • ตรวจสอบข้อมูลได้ ดูรูปด้านล่างประกอบ
sqliteadmin7
  • จากรูปด้านบนตรงแท็ปด้านขวามือจะเห็น SQL Query คลิกเพื่อลองทดสอบการ query พิมพ์ sql  ดังรูปด้านล่าง
sqliteadmin8
  • แล้วคลิกที่เมนูหลัก Query > Execute with Result คลิกไปที่แท็ป Result เพื่อดูผลลัพธ์ดังรูปด้านล่าง
sqliteadmin9

การใช้เครื่องมือ Adimin ที่เป็น command line

  • สำหรับความรู้สึกผมแล้วการใช้ command line ในบางครั้งกลับสะดวกกว่าโปรแกรมที่ใช้ GUI เสียอีก ตัวอย่างก็หนีไม่พ้นใน linux การใช้ command line เป็นเรื่องสะดวกมากๆ เช่นคำสั่ง ls, dmesg, df, env, lspci, lsmod อะไรประมาณนี้ การใช้เครื่องมือ admin ที่แนะนำให้ดาวน์โหลดไปตอนต้นคือ sqlite3.exe ผมจะแนะนำการใช้คร่าวๆ ผม copy ไปไว้ที่โฟลเดอร์ c:\sqlite3 ถ้าใช้ windows กดคีย์บอร์ด ALT + R พิมพ์คำสั่ง cmd กด Enter แล้วเรียกใช้คำสั่งดังรูปด้านล่างเพื่อเรียกโปรแกรม
  • cmd1
    ผมเปิดฐานข้อมูลด้วยคำสั่ง sqlite3 e:\sourcecodes\lazarus\sqliteproj1\datums.s3db ถ้าสงสัยหรือจำคำสั่งไม่ได้ก็ให้พิมพ์ .help เข้าไป
  • ผมใช้คำสั่ง .databases เพื่อดูว่า database อะไรที่เราใช้งานอยู่ ตามด้วย .header ON เพื่อให้แสดงคอลัมภ์ชื่อฟิลด์ และ .show เพื่อแสดงพารามิเตอร์ แล้วลอง query  ดูด้วย syntax “select” ดังรูปด้านล่าง
  • cmd2
    จากรูปด้านบนจะเห็นผลลัพธ์ของ sql  ด้วย syntax “select” ที่จริงยังมีคำสั่งอีกมากที่ทำได้ในสภาวะ command line แต่ตอนนี้ขอพอแค่นี้ก่อน ตอนหน้าจะลงลึกไปอีกนิดว่าจะนำ SQLite มาใช้กับ Lazarus อย่างไร

5 thoughts on “แนะนำการใช้ฐานข้อมูล SQLite กับ Lazarus”

  1. สำหรับงานด้าน GIS พวกที่เก็บค่าพิกัด มากๆ หรือประมวลผลความสัมพันธ์เชิงพื้นที่
    ผมใช้ spatial sqlite เป็นส่วนขยาย รองรับงานด้าน mapping โดยตรงมีฟังก์ชั่นเยอะและจัดการข้อมูลใหญ่ เช่นการทำ index พวก gist index rtree index ให้ด้วยครับ ที่สำคัญต่อกับโปรแกรมแสดงผลแผนที่ได้ทันทีเลย

    http://emap.wordpress.com/2009/03/22/spatiallitegis-module-on-sqllite/

    1. เห็น plug in ใน qgis ที่ support spatialite เดี๋ยวผมจะลองศึกษาดูครับ

  2. อยากทราบว่าใส่ foreign key ยังไงค่ะ ยกตัวอย่าง พร้อมภาพประกอบด้วยน่ะค่ะ

    ขอบคุณไว้ถ่วงหน้าเลย ขอถ่วนด้วยน่ะค่ะเพราะทำ project อยู่ค่ะ จาเปนพระคุณยิ่ง

  3. อีกอย่างค่ะ ความสัมพันธ์ด้วยค่ะ เช่น 1 to 1 , 1 to many ค่ะ ขอบคุงมาก

Leave a Reply

Your email address will not be published.