PlusMagi's Blog By Pitt Phunsanit Database สูตรคณิตศาสตร์‏

สูตรคณิตศาสตร์‏

ในฐานะสถาปนิกฐานข้อมูลระดับอาวุโส การจัดการกับ ‘สูตรคณิตศาสตร์’ ในระบบหลังบ้าน (Backend) ถือเป็นความท้าทายที่น่าสนใจ เพราะโดยธรรมชาติแล้ว สูตรเหล่านี้มักจะเป็นเชิงตรรกะหรือการคำนวณแบบต่อเนื่อง ซึ่งแตกต่างจากการจัดเก็บข้อมูลในรูปแบบแถวและคอลัมน์มาตรฐานของฐานข้อมูลเชิงสัมพันธ์

เมื่อเราต้องออกแบบระบบที่เกี่ยวข้องกับการเรียนรู้ทางวิทยาศาสตร์ การเงิน หรือวิศวกรรม ที่จำเป็นต้องมีการจัดการกับลำดับ (Sequences) อนุกรม (Series) หรือการคำนวณแบบวนซ้ำ (Iteration) เราไม่สามารถใช้เพียงแค่คอลัมน์ตัวเลขธรรมดาได้ แต่เราต้องอาศัยคุณสมบัติขั้นสูงของ PostgreSQL เพื่อจำลองโครงสร้างทางคณิตศาสตร์เหล่านั้น

การจัดการสูตรและลำดับด้วยฟังก์ชันเชิงอนุกรม (Sequences and Series)

สำหรับกรณีที่ต้องการคำนวณค่าตามช่วงเวลาหรือจำนวนครั้งที่กำหนด เช่น การหาผลรวมของกำลังสอง ($n^2$) หรือการสร้างชุดข้อมูลตัวเลขต่อเนื่อง PostgreSQL มีเครื่องมือทรงพลังอย่าง generate_series() ซึ่งเป็นหัวใจสำคัญในการจำลองอนุกรมทางคณิตศาสตร์

ฟังก์ชันนี้ช่วยให้เราสามารถสร้างตารางเสมือน (Virtual Table) ที่มีค่าตั้งแต่จุดเริ่มต้นถึงจุดสิ้นสุดตามที่เรากำหนด ทำให้การคำนวณที่ต้องทำซ้ำๆ เป็นเรื่องง่ายและมีประสิทธิภาพสูง:

SQL

SQL

SELECT generate_series(1, 10) AS n;

หากต้องการจำลองสูตร $y = x^2 + 3x$ สำหรับค่า $x$ ตั้งแต่ 1 ถึง 5 เราสามารถรวมฟังก์ชันนี้เข้ากับการคำนวณได้ทันที:

SQL

SQL

SELECT generate_series(1, 5) AS x, (x * x + 3 * x) AS y;

การจำลองความสัมพันธ์แบบวนซ้ำด้วย Recursive CTE

สูตรคณิตศาสตร์ที่ซับซ้อนที่สุดอย่างเช่นลำดับฟีโบนัชชี (Fibonacci Sequence) ซึ่งค่าถัดไปขึ้นอยู่กับสองค่าก่อนหน้า จำเป็นต้องใช้เทคนิคที่เรียกว่า Common Table Expression แบบเรียกซ้ำ (Recursive CTE) ใน PostgreSQL

CTE ช่วยให้เราสามารถกำหนดตรรกะการคำนวณที่วนรอบตัวเองได้ ทำให้ฐานข้อมูลทำหน้าที่เหมือนเครื่องมือทางคณิตศาสตร์ในการสร้างลำดับ:

SQL

SQL

WITH RECURSIVE fibonacci (n, value) AS (

SQL

SQL

SELECT 1, 0 UNION ALL SELECT 2, 1

SQL

SQL

)

SQL

SQL

SELECT * FROM (

SQL

SQL

SELECT n, value FROM fibonacci WHERE n <= 10 ORDER BY n;

การจัดเก็บสูตรเชิงสัญลักษณ์ด้วย JSONB

ในบางกรณี สูตรคณิตศาสตร์ไม่ได้ต้องการแค่ค่าตัวเลข แต่ต้องการโครงสร้างของสมการ เช่น การเก็บรูปแบบ LaTeX หรือ MathML เพื่อให้แอปพลิเคชันส่วนหน้า (Frontend) นำไปแสดงผลอย่างถูกต้อง ในฐานะสถาปนิก เราควรใช้ประเภทข้อมูล JSONB ของ PostgreSQL

เราสามารถจัดเก็บพารามิเตอร์ของสูตรหรือโครงสร้างสมการไว้ในรูปแบบ JSONB ได้ ทำให้ง่ายต่อการค้นหาและอัปเดตองค์ประกอบต่างๆ โดยไม่กระทบกับความสัมพันธ์หลัก:

SQL

SQL

INSERT INTO formulas (formula_name, formula_params) VALUES ('Area of Circle', '{"symbol": "A", "equation": "\pi r^2", "required_fields": ["radius"]}'::jsonb);

บทสรุป

การจัดการสูตรคณิตศาสตร์ใน PostgreSQL ไม่ได้หมายถึงการให้ฐานข้อมูลคำนวณทุกอย่าง แต่คือการใช้คุณสมบัติเชิงโครงสร้างขั้นสูง เช่น generate_series(), Recursive CTEs และ jsonb เพื่อจำลองและจัดเก็บ ‘ตรรกะ’ ของสูตรเหล่านั้นได้อย่างมีประสิทธิภาพสูงสุด การทำความเข้าใจเครื่องมือเหล่านี้จะช่วยให้เราสามารถออกแบบระบบที่รองรับการคำนวณทางคณิตศาสตร์ที่ซับซ้อนได้ด้วยฐานข้อมูลเชิงสัมพันธ์เพียงอย่างเดียว