ระบบสั่งซื้อ NorthWind
MySQL | PHP | TeachAccess | Entity Relationship | Function | Datatype | Terms
NorthWind คือ อะไร

การนำเรื่องของ NorthWind Traders มาเล่า ทำให้รู้สึกเหมือนว่าเดินทางผ่านยุคผ่านสมัย เพราะ MS เค้า dropped support ฐานข้อมูลใน Access 97 ไปแล้ว ทำให้รู้สึกเหมือนกำลังดันทุรัง หยิบยกสิ่งที่เค้า drop ไป มาพูด มาคิด มาทำต่อ สรุปว่า ระบบของเค้าดีจริง เข้าใจง่าย ก็ต้องอ้างอิงของเค้านี่หละ
Northwind Database คือ ฐานข้อมูลตัวอย่าง ที่บริษัท Microsoft เตรียมไว้ให้นักพัฒนา ใช้ทดสอบระบบฐานข้อมูล ฝึกฝน เรียนรู้ และใช้งานโปรแกรม เริ่มต้นใช้งานใน Microsoft Access ซึ่ง Northwind เป็นหนึ่งในบริษัทสมมติ (Fictional companies) ที่ชื่อ Northwind Traders ซึ่งเป็น Demo company for database capabilities in Microsoft Access
แล้วพบว่า Dalers ได้แชร์เรื่อง Northwind ใน Github มีทั้ง ER และ SQL for MySQL ซึ่งเล่าว่า The Northwind database is an excellent tutorial schema (โครงสร้างการรับรู้) for a small-business ERP (Enterprise Resource Planning) , with customers, orders, inventory, purchasing, suppliers, shipping, employees, and single-entry accounting. However, I wanted to experiment with the schema using MySQL.
ความหมาย ERP ใน mangoconsultant.com
SQL for MySQL ใน github.com
SQL in Northwind ใน /teachaccess
มองหา .accdb แทน .mdb
มื่อใช้ MS Access 2016 (รุ่นใหม่) เปิดแฟ้ม .mdb ไม่ได้ จะแจ้งว่า "Cannot open a database created with a previous version of your application" แล้วโปรแกรม mdb viewer plus ก็ convert จาก mdb เป็น accdb ไม่ได้ เพราะ Microsoft dropped support for databases in Access 97 and earlier .mdb format in Access 2013. Access 2016 can still open databases in Access 2000 and Access 2002-2003 .mdb format without needing conversion. และ จากการทดสอบโปรแกรม MDB Forge (MDBForge-0.2_NoSetup.zip) พบว่ามีการทำงานคล้าย MDB Viewer Plus มาก แต่ไม่สามารถ convert จาก mdb เป็น accdb ได้ อีกทางเลือก คือไปค้นหาแฟ้มที่ถูก convert แล้ว และมีการแชร์ไว้ให้ดาวน์โหลด ก็จะพบว่ามีหลายแหล่ง อาทิ ที่ qlik.com - .accdb หรือ ที่ github.com - .accdb / .mdb ซึ่งเปิด NorthWind.accdb ด้วย Access 2016 แล้ว พบว่ามีข้อมูลที่สมบูรณ์ หรือจะดู Relationship ก็จะพบการเชื่อมโยงมากมาย
ระบบฐานข้อมูลตัวอย่าง NorthWind
ในอดีตที่ใช้ MS Office 97 จะพบแฟ้ม northwind.mdb
ใน C:\Program Files\Microsoft Office97\Office\Samples\ northwind.mdb (532 KB)
ปัจจุบันต้องดาวน์โหลด หาได้จาก Microsoft.com - Northwind สำหรับ SQL Server (อ่านเพิ่ม wilsonmar.com)
ชวนมองสิ่งที่ NorthWind สามารถให้ได้ และให้ไม่ได้
สิ่งที่ระบบให้ได้
1. รายงานการสั่งซื้อของลูกค้าแต่ละราย
2. รายงานพนักงานที่ดูแลลูกค้าแต่ละราย
3. รายงานสรุปการสั่งซื้อ
4. รายงานสรุปยอดขายสินค้าแต่ละวัน เดือน ปี
5. รายงานสรุปสถิติการจัดส่งสินค้าตามช่วงวันที่
6. รายงานสินค้าที่อยู่ระหว่างการสั่งซื้อ
7. รายงานสินค้าที่ไม่อยู่ในระหว่างการสั่งซื้อแต่ถึงจุดสั่งซื้อ
8. รายงานข้อมูลลูกค้าที่ไม่ได้ใช้บริการในไม่ต่ำกว่า 3 เดือน
9. รายงานรายละเอียดสินค้าแยกตามกลุ่มสินค้า
10. รายงานแยกข้อมูลยอดขายสินค้าประจำเดือน แยกกลุ่มสินค้า, ผู้ผลิต
11. รายงานข้อมูลการสั่งซื้อเลือกตามวันที่สั่งซื้อ
12. รายงานข้อมูลการสั่งซื้อเลือกตามวันที่ต้องการสินค้า
13. รายงานข้อมูลพนักงานเรียงตามวันที่จ้าง
14. รายงานข้อมูลลูกค้า พิมพ์ซอง เรียงตามพื้นที่ที่อาศัย และนามสกุล
15. รายงานข้อมูลการสั่งซื้อ แยกตามกลุ่มพนักงาน
สิ่งที่ระบบให้ ไม่ได้
1. รายงานการคืนสินค้า
2. รายงานการจัดซื้อสินค้าเข้า stock
3. รายงานการส่งสินค้า
4. รายงานการขึ้นเงินเดือนพนักงาน
5. รายงานประเภทสมาชิก
6. รายงานการรับส่วนลดของสมาชิก แยกตามประเภท
7. รายงานการรับสินค้า
8. รายงานการส่งคืนสินค้า
9. รายงานการทำงานของพนักงาน
10. รายงานการขาด ลา สายของพนักงาน
11. รายงานวันที่ลูกค้าสมัครสมาชิก
12. รายงานลูกหนี้
13. รายงานการชำระหนี้
14. รายงานจดหมายทวงหนี้ ตามระยะค้างส่ง
15. รายงานเจ้าหนี้
บริการ SQL online กับ NorthWind DB
ตัวอย่างที่ 1 รายการสั่งซื้อ เรียงตามพนักงานขาย
SELECT orders.employeeid,employees.firstname,orderdetails.orderid,
orderdetails.productid,products.productname,
products.price,orderdetails.quantity, (products.price * orderdetails.quantity) as sum
FROM orders
INNER JOIN orderdetails ON orders.orderid = orderdetails.orderid
INNER JOIN employees ON orders.employeeid = employees.employeeid
INNER JOIN products ON orderdetails.productid = products.productid
ORDER BY employees.firstname;
ตัวอย่างที่ 2 สรุปยอดขายของพนักงานแต่ละคน
SELECT orders.employeeid,employees.firstname,
sum(products.price * orderdetails.quantity) as total
FROM orders
INNER JOIN orderdetails ON orders.orderid = orderdetails.orderid
INNER JOIN employees ON orders.employeeid = employees.employeeid
INNER JOIN products ON orderdetails.productid = products.productid
GROUP BY orders.employeeid;
ตัวอย่างการใช้ inner join ทั้ง 8 ตาราง
inner join คือ การเชื่อมตารางระหว่างเขตข้อมูลที่สัมพันธ์กันของ 2 ตาราง โดยตัวอย่างนี้แสดงการเชื่อมตาราง 8 ตารางในระบบฐานข้อมูลจำลอง Northwind ที่จำลองให้ ทดลองใช้งาน (Tryit) บน w3schools.com ซึ่งเทียบเคียงได้กับตัวอย่างในโปรแกรม select19 แบบที่ 9 ที่เชื่อม `orrder details` กับ products หรือดูตัวอย่างอีกมากมายที่ SQL_examples บน w3schools.com (สำหรับสัญลักษณ์ ` คือ ascii-96)
select
orders.orderid,
products.productid,
categories.categoryid,
customers.customerid,
employees.employeeid,
shippers.shipperid,
suppliers.supplierid
from (orders
inner join orderdetails on orders.orderid = orderdetails.orderid
inner join products on products.productid = orderdetails.productid
inner join categories on categories.categoryid = products.categoryid
inner join customers on customers.customerid = orders.customerid
inner join employees on employees.employeeid = orders.employeeid
inner join shippers on shippers.shipperid = orders.shipperid
inner join suppliers on suppliers.supplierid = products.supplierid)
ตัวอย่าง subquery ใน SQL
เตรียมความพร้อม
1. จงนำเข้าตารางทั้ง 8 เข้าฐานข้อมูล northwind ผ่านโปรแกรม phpmyadmin
sql : northwindwithsqlfile.zip
2. เลือกใช้แฟ้ม northwindfromphpmyadmin.sql
3. ศึกษาคำสั่ง SQL เพื่อเลือกข้อมูลมาแสดง ตามโปรแกรมต่อไปนี้
php script : northwind.php
ตัวอย่างที่ 1 - in subquery
1. จงแสดงรายการสั่งซื้อละเอียด ที่จำนวนสินค้าในสต๊อก = 0 เรียงตามรหัสสินค้า ตัวอย่างผลลัพธ์จะแสดง 160 รายการ (case 16)
SELECT * FROM `order details` WHERE productid in
(SELECT productid FROM products WHERE unitsinstock = 0) ORDER BY productid

ตัวอย่างที่ 2 - from subquery
2.1 จงแสดงจำนวนรายการสินค้าตามข้อมูลในรายการสั่งซื้อละเอียด ที่ราคาต่อหน่วย มากกว่า 50 ตัวอย่างผลลัพธ์จะแสดงรายการเดียว คือ 7
SELECT COUNT(proid) FROM
(SELECT DISTINCT productid AS proid FROM `order details` WHERE Unitprice > 50) AS listorder

2.2 จงแสดงรหัสสินค้า ราคา ปริมาณสั่งซื้อ และส่วนลด ตามข้อมูลในรายการสั่งซื้อละเอียด ที่ราคาต่อหน่วย มากกว่า 50 เรียงตาม Unitprice จากมากไปน้อย ตัวอย่างผลลัพธ์จะแสดง 163 รายการ พบว่า unitprice เป็นราคาก่อนลด แต่ unitprice แตกต่างกันได้ตามช่วงเวลาที่สั่งซื้อ
SELECT productid as proid , Unitprice, Quantity, Discount FROM `order details` WHERE unitprice > 50 ORDER BY unitprice DESC
ตัวอย่างโจทย์การใช้คำสั่ง SQL บนฐานข้อมูล Northwind ตัวอย่างโจทย์การใช้คำสั่ง SQL บนฐานข้อมูล Northwind เตรียมความพร้อมเริ่มจากนำเข้าตารางทั้ง 8 เข้า ผ่านโปรแกรม phpmyadmin โดยใช้ northwindwithsqlfile.zip เลือกใช้แฟ้ม northwindfromphpmyadmin.sql แล้วเขียนคำสั่ง SQL เลือกข้อมูลมาแสดง มีคำแนะนำในเขียนคำสั่ง ที่ github.com
ทดสอบได้ที่ https://www.w3schools.com/sql/trysql.asp?filename=trysql_asc
ทดสอบได้ที่ https://www.w3schools.com/sql/trymysql.asp?filename=trysql_func_mysql_ascii
1. จงแสดงรายการประเทศของลูกค้า จากแฟ้มลูกค้าแบบไม่ซ้ำ
SELECT DISTINCT Country FROM Customers;
2. จงแสดงรายการประเทศของลูกค้า จากแฟ้มลูกค้าแบบไม่ซ้ำ และจำนวนลูกค้าในแต่ละประเทศ
SELECT Country, COUNT(Country) AS mycount 
  FROM Customers 
  GROUP BY country;
3. จงแสดงจำนวน [ลูกค้า] ที่มาทำรายการ [สั่งซื้อ] ทั้งหมด
ที่ [รหัสลูกค้า] ไม่เท่ากับ Burin และวันที่สั่งประมวลผล SQL
มีตัวอย่างผลลัพธ์จะแสดงรายการเดียว เช่น 100
SELECT COUNT(cid), CURDATE() FROM
  (SELECT DISTINCT Customerid AS cid 
  FROM Orders 
  WHERE Customerid <> "Burin") AS listcust 
  LIMIT 1;
4. จงแสดงผลรวมจำนวน [สินค้า] จากรายการ [สั่งซื้อสินค้าละเอียด]
ที่รายการ [สินค้า] มีราคามากกว่า 1000
และเลือกข้อมูลรายการที่ 6 - 10 มีตัวอย่างผลลัพธ์จะแสดงรายการเดียว เช่น 2000
SELECT SUM(amount) AS mysum 
  FROM `orderdetails` 
  WHERE price > 1000 LIMIT 5,5;
5. จงแสดงรายการ [บริษัทขนส่ง] ที่ [ลูกค้า] เลือกทั้งหมดว่าแต่ละ [บริษัทขนส่ง]
มีรายการส่งตามการ [สั่งซื้อ] กี่รายการ
ตัวอย่างผลลัพธ์จะแสดงข้อมูล ที่แต่ละรายการแสดง [จำนวนการสั่งซื้อ]
เรียงตาม [จำนวนการสั่งซื้อ] จาก [มากไปน้อย] และเลือกข้อมูลรายการเพียง 5 รายการแรก
SELECT shiperid, COUNT(orderid) AS countorder 
  FROM orders GROUP BY shiperid
  ORDER BY countorder DESC 
  LIMIT 5 หรือ LIMIT 0,5;
6. จงแสดงการเชื่อมตาราง [สั่งซื้อ] และ [สั่งซื้อละเอียด]
เพื่อแสดงเลข [ใบสั่งซื้อ] [รหัสลูกค้า] และ [รหัสสินค้า]
ที่สั่งซื้อขายโดย [พนักงาน] คนที่ 2 และเลือกข้อมูลรายการแรกเพียง 1 รายการ
ตัวอย่างผลลัพธ์จะแสดงข้อมูล 1 รายการ
SELECT orders.orderid, orders.customerid, orderdetails.productid 
  FROM (orderdetails INNER JOIN orders ON orderdetails.orderid = orders.orderid)
  WHERE orders.employeeid = 2 
  LIMIT 1;
7. จงแสดงชื่อ [ประเทศ] เฉพาะที่มีจำนวน [ลูกค้า] มากกว่า 5 คน
SELECT Country, COUNT(CustomerID), 
  FROM Customers
  GROUP BY Country
  HAVING COUNT(CustomerID) > 5;
8. จงแสดงรหัสการ [สั่งซื้อ] ของการ [สั่งซื้อ] แต่ละรายการ และยอดรวม (ราคา * จำนวน)
ที่มี [ยอดรวม] มากกว่า 1000 เรียงตามยอดรวมจากมากไปน้อย เลือกมาเพียง 10 ระเบียนแรก
SELECT orderid, SUM(quantity * unitprice) AS mytotal 
  FROM orderdetails
  GROUP BY orderid
  HAVING SUM(quantity * unitprice) > 1000
  ORDER BY mytotal DESC
  LIMIT 10;
โครงสร้างแฟ้ม (ปรับ 16 พ.ย.63)
1. Products
productidรหัสสินค้า
productnameชื่อสินค้า
supplieridรหัสผู้จำหน่าย
categoryidรหัสกลุ่มสินค้า
quantityperunitปริมาณต่อหน่วย
unitpriceราคาต่อหน่วย
unitsinstockปริมาณในคลัง
unitsonorderปริมาณที่กำลังสั่งซื้อ
reorderlevelจุดสั่งซื้อ
discontinuedสถานภาพหยุดขาย
2. Categories
categoryidรหัสกลุ่มสินค้า
categorynameชื่อกลุ่มสินค้า
descriptionคำอธิบายกลุ่ม
pictureภาพสินค้า
3. Employees
employeeidรหัสพนักงาน
lastnameนามสกุลพนักงาน
firstnameชื่อพนักงาน
titleตำแหน่ง
birthdateวันเกิด
hiredateวันจ้าง
addressที่อยู่
cityเมือง
regionภูมิภาค
postalcodeรหัสไปรษณีย์
countryประเทศ
homephoneหมายเลขโทรศัพท์บ้าน
extensionหมายเลขติดต่อภายใน
reportstoรายงานต่อ
4. Customers
customeridรหัสลูกค้า
companynameชื่อบริษัท
contactnameชื่อผู้ติดต่อ
contacttitleตำแหน่งผู้ติดต่อ
addressที่อยู่
cityเมือง
regionภูมิภาค
postalcodeรหัสไปรษณีย์
countryประเทศ
phoneหมายเลขโทรศัพท์
faxหมายเลขแฟกซ์
5. Suppliers
supplieridรหัสผู้จำหน่าย
companynameชื่อบริษัทผู้จำหน่าย
contactnameชื่อผู้ติดต่อ
contacttitleตำแหน่งผู้ติดต่อ
addressที่อยู่
cityเมือง
regionภูมิภาค
postalcodeรหัสไปรษณีย์
countryประเทศ
phoneหมายเลขโทรศัพท์
faxหมายเลขแฟกซ์
6. Orders
orderidรหัสใบสั่งซื้อ
customeridรหัสลูกค้า
employeeidรหัสพนักงาน
orderdateวันที่สั่งซื้อ
requireddateวันที่ต้องการ
shippeddateวันที่ส่ง
shipviaวิธีจัดส่ง (รหัสผู้ขนส่ง)
freightค่าขนส่ง
shipnameชื่อผู้รับของ
shipaddressที่อยู่ผู้รับของ
shipcityเมืองที่รับของ
shipregionภูมิภาคที่รับของ
shippostalcodeรหัสไปรษณีย์
shipcountryประเทศที่รับของ
7. Orderdetails
orderidรหัสใบสั่งซื้อ
productidรหัสสินค้า
unitpriceราคาต่อหน่วย
quantityปริมาณ
discountส่วนลด
8. Shippers
shipperidรหัสผู้ขนส่ง
companynameชื่อบริษัทผู้ขนส่ง
phoneหมายเลขโทรศัพท์
หมายเหตุ
เนื่องจากนักศึกษามากมาย ไม่ทราบว่าต้องออกแบบโครงสร้างแฟ้มอย่างไร แล้วจะได้อะไรจากแฟ้มเหล่านั้น จากการแนะนำโครงสร้างนี้ หวังจะให้เป็นก้าวแรกของนักศึกษา เพื่อให้มีประสบการณ์ในการออกแบบมากขึ้น แต่ก็อยากเตือนว่าในโลกนี้ นักวิเคราะห์ ไม่สามารถออกแบบระบบให้ใครได้ มีเพียงผู้ใช้เท่านั้น ที่จะบอกได้ว่าพวกเขาต้องการอะไร เพื่อให้นักวิเคราะห์สามารถออกแบบระบบ ให้ตรงกับความต้องการของผู้ใช้ อย่างเป็นรูปธรรม
การเชื่อมตารางในระบบ
Learning Microsoft SQL Server


Download : SQL at https://code.google.com
[Yintingchou.com] This page is about the SQL Server commands. All of the contents are based on the code in w3schools - SQL with the sample database, Northwind. To make myself easier to look up the commands I want in the future, I picked out the ones I have been used a lot in my work and add some notes on it. I also borrowed some materials from the course LinkdedIn Learning - Microsoft SQL Server 2016: Query Data. The lecturer of this course, Gerry O’Brien, did a great job on teaching this course and provided me a terrific starting point on learning Microsoft SQL Server. If you are interested in the complete commands taught in the course. Please check out, Exercise Folder of the course. All the example codes can be executed on w3schools - SQL Try it Editor or test the code on the SQL Fiddle by creating new tables by ourselves.
+ https://yintingchou.com/posts/
+ http://www.informit.com/articles/
+ http://dbdesc.com/output_samples/
+ การใช้ Northwind บน VS 2005
+ บริการ Northwind แบบ Online
+ การสร้างตารางแบบ many to many [in title]
Employees : many-to-many
An employee can be assigned to several territories, but these territories are not exclusive to an employee. Each employee can be linked to multiple territories, and each territory can be linked to multiple employees.
+ https://codeontime.com/ (ใน Employees มี Field Territories แบบ Check Box List)
+ https://support.airtable.com/ (ต.ย.เยอะ)
การเรียกซ้ำในตารางเดียวกัน
คือ Recursive relationship (Unary Relationship) พบตาราง Employees ใน Northwind ที่เชื่อมระหว่าง Employeeid กับ ReportsTo
+ https://www.techjunkieblog.com/
NorthWind Using in Online and Portable
การใช้ฐานข้อมูลจำลอง ของ NorthWind Traders มีทั้งแบบใช้ออนไลน์ หรือผ่านโปรแกรมแบบไม่ติดตั้ง (Portable) ถ้าแบบออนไลน์ ใช้งานที่ 1) w3schools.com ถ้าแบบโปรแกรมไม่ติดตั้ง มีแนะนำ 2 โปรแกรม คือ 2) MDB Viewer Plus และ 3) MDBForge (0.2_NoSetup) ถ้าแบบโปรแกรมต้นตำรับ ต้องใช้ 4) MS Access แต่แฟ้มต้องเป็น .accdb สำหรับข้อมูลใน NorthWind Traders ที่เดิมอยู่ใน NorthWind.mdb ได้มีการ export ไปเป็นข้อมูลแบบ SQL สามารถใช้ข้อมูลเพื่อส่งเข้า MySQL Database โดยดาวน์โหลดจาก northwindwithsqlfile.zip หรือ northwind_csvxml_by_mdbviewerplus.zip
ขั้นตอนการทดสอบ และลบระเบียนที่มี Relationship
ด้วยโปรแกรม MDB Viewer Plus
1. เมื่อ open database ชื่อ northwind.mdb แล้วใช้ sql สั่งลบระเบียนนี้จะไม่ได้รับอนุญาต Delete from categories where categoryid = 8
2. Tools, indexs แล้วลบให้หมด ที่ลบไม่ได้คือ key ของ Categories, Custormers, Employees
3. ลบ Primary Key ใน Categories, Custormers, Employees แต่ลบไม่ได้ เมื่อเข้า Table Design ของตารางนั้น เมื่อ Apply แล้วได้รับแจ้งว่า Cannot delete a field that is part of an index or is needed by the system
4. เปลี่ยนจาก ลบเป็น rename ใน Table Design เหมือนเดิม เช่น เติม x ก็จะเป็น CategoryIDx แล้ว apply จะเปลี่ยนชื่อได้
5. Close tab ที่ของตารางที่เคยเปิด แล้วเปิดใหม่ผ่าน Table List
6. Tools, indexs แล้วลบ index ที่เป็น primary key ที่ได้เปลี่ยนชื่อ ได้แล้ว
7. สั่งลบข้อมูลที่เคยทำ relationship ได้แล้ว ด้วย Delete from categories where categoryid = 8
8. สรุปว่าไม่ควรทำ เพียงแต่เล่าถึงการใช้งานโปรแกรม ที่เข้าถึงข้อมูลแบบที่ไม่เหมาะไม่ควร เท่านั้น
MDB Viewer Plus
MDB Viewer Plus คือ โปรแกรมช่วยในการเปิดแฟ้ม .mdb ที่สร้างมาจาก Microsoft Access 2003 สามารถ download รุ่น Portable มาใช้ได้ ใช้โปรแกรมนี้เปิดแฟ้ม NorthWind.mdb โดยคลิ๊ก Menu bar, File, Open แล้วเลือกแฟ้มก็จะเปิดตารางทั้งหมดมาให้เห็น สามารถเลือก Menu bar, Table, Export table เป็นแฟ้มแบบ .csv หรือ .xml เป็นต้น หรือ Menu bar, Table, Generate SQL - Create และทดสอบ Execute คำสั่ง SQL ได้
MDB Viewer Plus is a freeware viewer plus editor for opening Microsoft Access MDB and ACCDB database files. It does not need to be installed to run. It uses Microsoft Data Access Components (MDAC) which is installed as part of Windows.
ดาวน์โหลด : MDBPlus.zip
MDB Viewer Plus version 2.62
Copyright alexnolan.net 2004-2018
Created by Alex Nolan, Hamphire, England, UK
+ alexnolan.net/..Guide.htm
+ teachaccess/mdbviewer
MDBForge แสดงรายการ Store procedure กับ View
ด้ทดสอบ (Test) และทบทวน (Review) การใช้โปรแกรม MDBForge รุ่น Portable เทียบกับ MDB Viewer Plus รุ่น Portable เช่นกัน พบว่า การเข้าจัดการกับ Primary Key หรือ Index หรือเข้าจัดการทั้ง Procedure และ View ก็ไม่ค่อยจะราบรื่นทั้งคู่ เพราะเค้าเน้นการเป็นเพียง Viewer จะมา Execute ที่ผิดปกติในระบบฐานข้อมูล ก็จะมีปัญหาตามมาได้ จุดหนึ่งต่างกันของ 2 โปรแกรม คือ MDBForge แสดงรายการ Store procedure, Table, View แยกกัน มาให้เห็นแต่แรก ต่างกับ MDB Viewer Plus ที่นำ Table กับ View มาแสดงร่วมกันใน Table lists เมื่อสืบค้นข้อมูลจากอินเทอร์เน็ตต่อไป พบว่าใน tamemo.com ให้นิยามของ Store procedure, view, function และ trigger ไว้อย่างน่าสนใจ จึงเลือกเปิดบริการ MySQL ในเครื่องคอมพิวเตอร์แบบ localhost โดยใช้ XAMPP 5.6 ก็ได้บริการของ MariaDB
MDB Forge version 0.2
Microsoft Access MDB and ACCDB database files manager
(c) Calogiuri Enzo Antonio - All Right Reserved
This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License
+ sourceforge.net/projects/mdb-forge/
+ teachaccess/mdbforge
เล่าถึงการทดสอบ SQL บน MariaDB ใน XAMPP 5.6
1. View
MariaDB [northwind]> [create/replace] view products_asc as
    -> select productname from products
    -> order by productname asc;
MariaDB [northwind]> show tables; จะพบ products_asc
MariaDB [northwind]> select * from products_asc;
2. Function
MariaDB [northwind]> delimiter //
MariaDB [northwind]> create function mycal(qty int, price int)
    -> returns int
    -> begin
    -> return (qty * price);
    -> end//
MariaDB [northwind]> delimiter ;
MariaDB [northwind]> select productid, unitprice, unitsinstock, 
    -> mycal(unitprice,unitsinstock) from products;
3. Store Procedure
MariaDB [(none)]> use northwind;
Database changed
MariaDB [northwind]> describe products;
MariaDB [northwind]> delimiter //
MariaDB [northwind]> create procedure getpname (in pid int(11))
    -> begin
    -> select productname from products
    -> where productid = pid;
    -> end//
MariaDB [northwind]> delimiter ;
MariaDB [northwind]> call getpname(1);
productname = Chai
MariaDB [northwind]> delimiter //
MariaDB [northwind]> create procedure cntproducts (out cntpro int(11))
    -> begin
    -> set cntpro  = (select count(productid) as cnt from products);
    -> end//
MariaDB [northwind]> delimiter ;
MariaDB [northwind]> call cntproducts(@mycnt);
MariaDB [northwind]> select @mycnt;
MariaDB [northwind]> show procedure status;
MariaDB [northwind]> drop procedure cntproducts;
4. Trigger
MariaDB [northwind]> create table account(id int,amt int);
MariaDB [northwind]> create trigger ins_sum before insert on account
    -> for each row set @sum = @sum + new.amt;
MariaDB [northwind]> set @sum = 0;
MariaDB [northwind]> insert into account values(1,10),(2,25);
MariaDB [northwind]> select @sum as 'total';
total = 35
MariaDB [northwind]> drop trigger ins_sum;
MariaDB [northwind]> set @sum = NULL;
https://dev.mysql.com/doc/refman/5.5/en/trigger-syntax.html
MDB Viewer 1. MDB Viewer for MAC
MDB Viewer requires OS X 10.6 or later. The free trial is fully functional except for export limitations. 2011-2017 Jakob Egger
+ https://eggerapps.at/mdbviewer/
2. MDB Viewer by Aryson
Version 18.0 (Free version can not export)
+ https://www.arysontechnologies.com/mdb-viewer.html
3. MDB, ACCDB Viewer and Reader
chrome://apps/ (just shortcut to website < 1MB) This MDB, ACCDB Viewer allows you to view, search through a Access Database file without having Access installed on the machine. https://chrome.google.com SQL sample : "SELECT customers.companyname,orders.* FROM 'Customers',orders where orders.customerid = customers.customerid LIMIT 0,30"
+ https://mdbviewer.herokuapp.com/
4. AxBase
AxBase is an Open source MDB / SQL Server Database viewer and editor. You can view & edit the tables (+ field descriptions) and execute SQL queries without Access licence. Export Tables to CSV/ XLS, Compress & Repair MDB. Compile needs Delphi + JVCL. Next releases (available in Code) will be JCL/JVCL independant and D7 (-> 1.0.0.9 version) to XE2 (1.1 -> versions) UNICODE compatible.
+ https://sourceforge.net/projects/axbase/files/latest/download
นิยาม (Term) และ ตัวอย่าง (Sample) ของ View, Function, Procedure และ Trigger
1. View คือ การจำลองตารางขึ้นใหม่ ซึ่งตารางที่พบจะได้มาจากการใช้คำสั่ง SQL แต่ไม่มีพื้นที่เก็บข้อมูลของตนเอง
create view Programmer as
select * from Employee where position = 'programmer'
2. Function คือ การสร้างคำสั่งไว้ใช้งาน
create function plus( @x int, @y int) returns int as
begin return @x + @y end
3. Store Procudure คือ การสร้างกระบวนการทำงาน
create procedure showPosition ( @pos varchar(32) ) as
begin select * from Employee where position = @pos end
4. Trigger คือ การตั้งการทำงานอัตโนมัติ ตามเหตุการณ์อย่างมีเงื่อนไข
create trigger UpdateAvgScore on StudentScore for update as
begin
update StudentScore
set avg = (math + english + programming) / 3 where sid = NEW.sid
end
หรือ create trigger backupPost on Post for delete as
begin
insert into PostBackup
select * from OLD
end
โครงงาน ระบบสั่งซื้อนอร์ธวินด์
โครงงานปลายภาค ปูพื้นฐาน "เดฟสายเว็บ" ปรับปรุง 15 ส.ค.63
1. ระบบ Sign in และ Sign out 
+ ตรวจสอบความเป็นสมาชิกก่อนเข้าใช้งานระบบ จึงต้องมีตาราง members 
+ แบ่งประเภทเป็น admin และ user ซึ่งต้องใช้ Session / Cookie และ Bootstrap 
http://www.thaiall.com/adminlte-3.0.4/pages/examples/burin1.htm
2. ระบบ Members 
+ สามารถ insert, delete, update : members 
+ จัดการข้อมูลได้เฉพาะ admin ส่วน user อนุญาตให้ select ได้
3. ระบบ Northwind (8 ตาราง)
+ สามารถ select, insert, delete, update ได้ทุกตาราง 
http://www.thaiall.com/project/projectdbnwind.htm
4. ระบบ Menu 
+ เป็น Top menu หรือ Left menu 
+ ซึ่ง Menu ของ admin กับ user จะต่างกันไป 
5. เพิ่ม Plug-in (Library)
+ pyramid ทั้ง 36 โปรแกรม 
http://www.thaiall.com/article/teachpro.htm
+ ระบบจัดการข้อมูล s0 - s7 เพื่อจัดการ 8 ตารางของ Northwind 
http://www.thaiall.com/php/training49.htm
+ โดยตรวจสอบสิทธิ์ของผู้ใช้ ซึ่งต้องเป็น admin จึงจะใช้งานได้ 
+ มี Header & Footer อย่างสวยงามทุกหน้า 
6. ระบบสั่งซื้อตัดยอดสินค้า (Order และ Order Details)
+ เป็นฟอร์มที่ทำงานร่วมกันระหว่าง orders กับ order details ได้ 
+ ตัด stock ใน products ได้ (UnitsInStock) 
7. ระบบ Session หรือ Temporary ระหว่างการสั่งซื้อ 
+ มีการกรอกข้อมูลในฟอร์ม เพื่อสั่งซื้อได้ แต่ไม่นำข้อมูลเข้าทันที 
+ อาจใช้ session / cookie หรือ temporary table มารับข้อมูลส่วนนี้ 
หรือใช้ technique อื่นได้ แต่ต้องอธิบายว่าทดแทนกันได้อย่างเข้าใจ 
http://www.thaicreate.com/free-web-script/php-shopping-cart-session-array.html 
http://www.thaiall.com/php/training492.htm 
8. ระบบ Data Verification หรือ Checking (ตรวจสอบข้อมูล)
+ มีระบบนี้ไม่น้อยกว่า 3 ฟอร์ม (ไม่ซ้ำรูปแบบ) 
+ ลบ product ได้ แต่ต้องตรวจว่าไม่มีรายการใน order details 
+ ลบ supplier ได้ แต่ต้องไม่มีรายการใน products 
+ ลบ customer ได้ แต่ต้องไม่มีรายการใน orders 
+ เปลี่ยนรหัส CategoryID ได้ แต่ต้องไปเปลี่ยนใน products ทั้งหมด 
+ เปลี่ยน price ได้ แต่ต้องไม่มีรหัสสินค้าใน order details 
9. ระบบ relation ด้วย union หรือ inner join กัน 2 - 3 ตาราง 
+ มีการเชื่อมกันไม่น้อยกว่า 3 รายงาน (ไม่ซ้ำ) 
+ ตัวอย่าง select 19 แบบ หรือ /php หรือ /mysql 
https://github.com/thaiall/programming-page/blob/master/php/northwind.php
10. มีรายงานที่ใช้ group by และ order by 
+ ไม่น้อยกว่า 3 รายงาน (ไม่ซ้ำ) 
+ ตัวอย่าง select 19 แบบ 
http://www.thaiall.com/perlphpasp/source.pl?9141
11. มีรายงานเลือกตามช่วงข้อมูลได้ 
+ ไม่น้อยกว่า 3 รายงาน (ไม่ซ้ำ) 
+ เช่น ช่วงวันที่ ช่วงเดือน หรือช่วงเลขที่ใบสั่งซื้อ 
+ เช่น if(a > x1 && a <= x2) { } หรือ where ใน sql 
12. Header และ Footer มีในทุกรายงาน 
+ โดยเฉพาะตามข้อ 9 - 11 ที่ include หรือ require เข้าไป
+ เชื่อม social media และผลงานอื่น ๆ  
13. ใช้ Ajax และ Javascript และ Bootstrap
+ ประกอบในการพัฒนาระบบอย่างเหมาะสม
+ เช่น การช่วยตรวจสอบรหัสผ่านที่ซับซ้อน
+ เช่น Responsive Web Design
http://www.thaiall.com/ajax
http://www.thaiall.com/java/
http://www.thaiall.com/java/bootstrap.htm
14. งานทั้งหมดใน github.com 
+ มี Source code, Powerpoint แชร์ใน github.com 
+ ทำงานได้จริงใน Free webhosting 2 - 3 ตัว 
https://www.thaiall.com/blog/burin/8834/
15. จัดทำ MS Powerpoint 
เพื่อนำเสนอหน้าชั้นอย่างมืออาชีพ 
- วัตถุประสงค์การพัฒนา 
- นโยบายตามแนวการเขียน DFD 
- โครงสร้างแฟ้ม หรือ ER 
- ตัวอย่างหน้าจอภาพ อย่างน้อยครบทุกระบบ
- ไซต์ผลงาน
rspsocial
Thaiall.com