AppMaster นำเสนอความสามารถที่หลากหลายสำหรับการทำงานกับฐานข้อมูล ตัวอย่างเช่น เมื่อใช้บล็อกการค้นหา คุณสามารถค้นหาข้อมูลที่จำเป็น แนบตารางที่เกี่ยวข้อง จัดเรียงตามลำดับที่ถูกต้อง เป็นต้น อย่างไรก็ตาม ในบางสถานการณ์ นี่อาจไม่เพียงพอ จากนั้นบล็อก SQL Exec ก็มาถึง การช่วยเหลือ. ช่วยให้คุณสามารถเรียกใช้การสืบค้นฐานข้อมูลโดยใช้ SQL เต็มรูปแบบ
ลองพิจารณาการทำงานของบล็อกโดยใช้ตัวอย่างของฐานข้อมูลที่มีแคตตาล็อกหนังสือ
มาเตรียมงานกันหน่อย จำเป็นต้องสร้างกระบวนการทางธุรกิจที่จะอนุญาตให้ส่งคำขอรวมทั้งรับผลลัพธ์ในรูปแบบที่ง่ายที่สุดได้
คุณจะต้องสร้างจุดสิ้นสุดที่จะช่วยให้คุณสามารถเข้าถึงกระบวนการทางธุรกิจนี้ได้
ในระยะแรกนี้ควรจะเพียงพอแล้ว คุณสามารถเผยแพร่แอปพลิเคชันของคุณและดำเนินการทดสอบต่อไปได้ ด้วยเหตุนี้การใช้ Swagger จะสะดวกมากซึ่งจะสร้างขึ้นโดยอัตโนมัติเมื่อเผยแพร่
เราใช้แบบสอบถามง่ายๆ ที่ควรขอหนังสือทั้งหมดจากฐานข้อมูล
SELECT * จาก public.book
โปรดทราบว่าตัวตารางเอง (เช่นเดียวกับตารางอื่นๆ ทั้งหมดที่สร้างในตัวแก้ไขฐานข้อมูล) มีส่วนนำหน้าที่ระบุสคีมา - สาธารณะ
คุณสามารถตรวจสอบได้ว่าคำขอเสร็จสมบูรณ์และได้รับผลลัพธ์แล้ว
แต่ปัญหาคือการรับรู้คำตอบในรูปแบบนี้ยากมาก วิธีแก้ไขที่เป็นไปได้คือแก้ไขคำขอเล็กน้อยและเหลือเฉพาะฟิลด์ที่จำเป็น เช่น ชื่อหนังสือและจำนวนหน้า นอกจากนี้ ก็สมเหตุสมผลที่จะกำหนดขีดจำกัด โดยไม่ได้ขอหนังสือทุกเล่มจากฐานข้อมูล แต่จำกัดตัวคุณเองไว้ที่สิบเล่ม
เลือกชื่อ หน้าจาก public.book จำกัด 10
ดีขึ้นมากแต่ยังไม่เหมาะกับการใช้งานจริง ท้ายที่สุดแล้ว ในกระบวนการทางธุรกิจ คุณไม่เพียงต้องได้รับคำขอเท่านั้น แต่ยังต้องดำเนินการบางอย่างเพื่อให้ได้รับผลลัพธ์อีกด้วย ด้วยเหตุนี้การได้ผลลัพธ์ในรูปแบบข้อความยังไม่เพียงพอ คุณต้องแปลงให้เป็นรุ่นที่เหมาะกับการใช้งานต่อไป
เมื่อต้องการทำเช่นนี้ กลับไปที่กระบวนการทางธุรกิจและปรับแต่งเล็กน้อย ในบล็อกสุดท้าย เราจะเพิ่มตัวแปรใหม่ - อาร์เรย์ของโมเดลหนังสือ
คุณจะต้องมีบล็อกที่จะแปลง JSON ที่ได้รับอันเป็นผลมาจากคำขอให้เป็นโมเดล ดีซีเรียลไลซ์ JSON ให้เป็นโมเดล
ทำซ้ำคำขอก่อนหน้าและตรวจสอบให้แน่ใจว่าผลลัพธ์มีความเหมาะสมมากขึ้นทั้งสำหรับการรับรู้ทางสายตาและเพื่อใช้ใน BP ต่อไป
ตอนนี้เราไปยังตรรกะที่ซับซ้อนมากขึ้นได้แล้ว มาสร้างกระบวนการทางธุรกิจที่:
- รับชื่อหนังสือเป็นอินพุต
- กำหนดหมวดหมู่ (ประเภท) ที่เป็นของ
- ส่งคืนหนังสือแบบสุ่ม 3 เล่มจากหมวดหมู่เดียวกันตามผลลัพธ์ (ในกรณีนี้ หนังสือจากคำขอไม่ควรอยู่ในนั้น)
เมื่อต้องการทำเช่นนี้ เราจะสร้างกระบวนการทางธุรกิจใหม่ที่รวมการค้นหาโดยใช้บล็อกมาตรฐานและการใช้แบบสอบถาม SQL
บล็อกแรกคือการค้นหาหนังสือตามชื่อหนังสือและพิจารณาว่าหนังสือนั้นอยู่ในหมวดหมู่ใด ในการดำเนินการนี้ เราใช้บล็อกการค้นหาพร้อมพารามิเตอร์ต่อไปนี้:
- _ด้วย = หมวดหมู่ - นอกเหนือจากตัวหนังสือแล้ว ผลลัพธ์การค้นหายังต้องการข้อมูลจากตารางหมวดหมู่ที่เกี่ยวข้อง
- _Limit = 1 - ต้องพบหนังสือเล่มเดียวเท่านั้น
- _Ilike = False - ชื่อจะต้องตรงกับชื่อที่ร้องขอทุกประการ
- ชื่อ - ดัชนีชื่อหนังสือที่ส่งผ่านจากบล็อกเริ่มต้น
การใช้บล็อกองค์ประกอบ Array ที่มีดัชนี 0 เราจะนำหนังสือเล่มแรก (และเท่านั้น) จากผลลัพธ์
หนังสือสามารถอยู่ในหมวดหมู่ต่างๆ ได้หลายประเภทในเวลาเดียวกัน และในกรณีนี้ หนังสือเหล่านั้นจะเหมาะกับเรา สามารถเลือกได้แบบสุ่มโดยใช้บล็อกองค์ประกอบสุ่ม
หลังจากนี้ เรามีข้อมูลที่จำเป็นทั้งหมด และสิ่งที่เหลืออยู่คือการสร้างคำขอเอง ซึ่งอาจมีลักษณะดังนี้:
SELECT * จาก public.book WHERE id IN (SELECT rel1_id จาก public.book_categorys_category_books_pivot WHERE book_categorys_category_books_pivot.rel2_id = X) และ id <> Y เรียงลำดับโดยการสุ่ม() จำกัด 3
โดยที่ X คือรหัสของหมวดหมู่หนังสือ และ Y คือรหัสของหนังสือ
โปรดทราบว่าแบบสอบถามนี้มีแบบสอบถามย่อยด้วย อันดับแรก จากตาราง book_categorys_category_books_pivot (ใช้เพื่อเก็บข้อมูลเกี่ยวกับความสัมพันธ์ระหว่างสองตาราง) จะพบตัวระบุหนังสือทั้งหมดที่สอดคล้องกับหมวดหมู่ที่เลือก หลังจากนั้น แบบสอบถามจะถูกดำเนินการโดยค้นหาหนังสือแบบสุ่ม 3 เล่มที่ตรงกับช่วงที่ระบุ ไม่รวมรหัสหนังสือซึ่งมีการส่งชื่อไปยังกระบวนการทางธุรกิจแต่เดิม
หากต้องการศึกษาโครงสร้างฐานข้อมูลโปรเจ็กต์อย่างละเอียดยิ่งขึ้น คุณสามารถใช้ปุ่ม Open DB ในการตั้งค่า Deploy Plans
จะช่วยให้คุณสามารถเปิดฐานข้อมูลในตัวแก้ไขและเข้าถึงการดูและแก้ไขข้อมูลได้โดยตรง อย่างไรก็ตาม คุณควรใช้ความระมัดระวังและคำนึงถึงความจริงที่ว่าการเปลี่ยนแปลงโครงสร้างข้อมูลในตัวแก้ไขจะทำให้ไม่สามารถเผยแพร่โครงการต่อไปได้
กลับไปที่การสร้างกระบวนการทางธุรกิจ จำเป็นต้องรวบรวมคำขอให้เสร็จสิ้น และแปลงหนังสือและรหัสหมวดหมู่จากจำนวนเต็มเป็นสตริง และรวบรวมคำขอสุดท้ายโดยใช้บล็อก Concat Strings (หลายรายการ)
ขั้นตอนสุดท้ายคือดำเนินการแบบสอบถาม แปลงผลลัพธ์เป็นรูปแบบ และส่งไปยังบล็อกสิ้นสุดเป็นผลลัพธ์แบบสอบถาม
คุณสามารถบันทึกการเปลี่ยนแปลง สร้างตำแหน่งข้อมูล เผยแพร่โครงการของคุณ และตรวจสอบว่าคำขอทำงานได้อย่างถูกต้อง ในกรณีนี้ บล็อก SQL Exec หนึ่งบล็อกที่มีการสืบค้นแบบผสมที่ซับซ้อนถูกนำมาใช้เพื่อแทนที่บล็อกอื่นๆ จำนวนมาก และทำให้โครงสร้างของกระบวนการทางธุรกิจง่ายขึ้น
การใช้บล็อก SQL Exec ไม่ได้จำกัดอยู่เพียงการดึงข้อมูลและสามารถใช้ได้ในสถานการณ์ที่หลากหลาย ลองมาดูตัวเลือกเพิ่มเติมอีกสองสามอย่างให้ละเอียดยิ่งขึ้น
- การนับจำนวนความคิดเห็นของหนังสือด้วย id=X
เลือก COUNT(id) จาก public.comment โดยที่ book_id = X - การคำนวณคะแนนเฉลี่ยของหนังสือโดยคำนึงถึงคะแนนทั้งหมดที่ระบุในความคิดเห็น:
เลือก AVG (อัตรา) จาก public.comment โดยที่ book_id = X - การลบความคิดเห็นทั้งหมดที่เขียนก่อนปี 2023 (สามารถใช้เพื่อล้างบันทึกได้อย่างรวดเร็ว)
ลบ * จาก public.comment โดยที่ create_at < '2023-01-01'
โดยสรุปเป็นที่น่าสังเกตว่าเพื่อปรับปรุงความปลอดภัยจึงมีการเพิ่มตัวกรองลงในบล็อก SQL Exec สำหรับการดำเนินการที่เป็นอันตรายซึ่งอาจนำไปสู่การเปลี่ยนแปลงสคีมา
CREATE/ALTER/DROP/TRUNCATE for TABLE|COLUMN|INDEX|CONSTRAINT|SEQUENCE|SCHEMA|DATABASE ถูกปิดใช้งานโดยตัวกรองหากแอปพลิเคชันโฮสต์บนเซิร์ฟเวอร์ AppMaster เมื่อโฮสต์ภายในองค์กร - ตามค่าเริ่มต้น คำขอใดๆ จะสามารถใช้ได้โดยไม่มีข้อจำกัด