PlusMagi's Blog By Pitt Phunsanit Database,Technology ตรรกศาสตร์: ทุกสิ่งมีพระเจ้าสร้าง แล้วใครสร้างพระเจ้า

ตรรกศาสตร์: ทุกสิ่งมีพระเจ้าสร้าง แล้วใครสร้างพระเจ้า

ในทางปรัชญา คำถามที่ว่า “ทุกสิ่งมีผู้สร้าง แล้วใครสร้างผู้สร้าง?” คือการตั้งคำถามถึงจุดเริ่มต้นของห่วงโซ่เหตุผล (Causal Chain) หรือที่เรียกว่าปัญหาการถดถอยไม่สิ้นสุด (Infinite Regress) แนวคิดนี้ท้าทายตรรกะพื้นฐานว่าทุกสิ่งต้องมีต้นกำเนิดเสมอ

เมื่อเรานำตรรกะนี้มาประยุกต์ใช้กับระบบฐานข้อมูลอย่าง PostgreSQL เราจะพบว่ามันคือการค้นหา “รากฐาน” (Root) หรือ “ต้นกำเนิดของข้อมูล” (Origin Record) ซึ่งเป็นจุดที่การอ้างอิง (Reference) ไม่สามารถย้อนกลับไปได้อีก การออกแบบฐานข้อมูลที่ถูกต้องจึงต้องมีกลไกในการระบุจุดเริ่มต้นนี้อย่างชัดเจน

ตรรกะการสร้างใน PostgreSQL: การใช้ Recursive CTE

ใน PostgreSQL เราสามารถจำลองห่วงโซ่การสร้างหรือความสัมพันธ์ทางตรรกะที่ซับซ้อนได้โดยใช้เทคนิคที่เรียกว่า WITH RECURSIVE หรือ Common Table Expression (CTE) ซึ่งเป็นเครื่องมือที่ทรงพลังในการติดตามการอ้างอิงจากระดับหนึ่งไปยังอีกระดับหนึ่ง เหมือนกับการย้อนรอยผู้สร้างไปเรื่อยๆ จนกว่าจะถึงจุดที่ไม่มีผู้สร้าง (Parent ID เป็น NULL)

สมมติว่าเรามีตาราง creation_chain ที่เก็บลำดับการสร้างข้อมูล โดยแต่ละรายการจะมีการระบุ parent_id ซึ่งเป็น ID ของผู้สร้างก่อนหน้า การหาว่าใครคือผู้สร้างคนแรกสุด (The First Cause) คือการรัน Query แบบ Recursive เพื่อติดตามการอ้างอิงย้อนกลับไปจนถึงราก

SQL

-- สร้างตารางจำลองห่วงโซ่การสร้างข้อมูล (Creation Chain) </code><pre>CREATE TABLE creation_chain (<code>id</code> INT PRIMARY KEY, <code>name</code> VARCHAR(100), <code>parent_id</code> INT REFERENCES creation_chain(<code>id</code>));

SQL

INSERT INTO creation_chain (<code>id</code>, <code>name</code>, <code>parent_id</code>) VALUES

SQL

('1', 'The Origin', NULL), -- จุดเริ่มต้น (ไม่มีผู้สร้าง)

SQL

('2', 'Creator A', 1),

SQL

('3', 'Creator B', 2),

SQL

('4', 'Creator C', 3);

การค้นหาผู้สร้างคนแรกสุด (Root Record) จะใช้ Recursive CTE ดังนี้:

SQL

WITH RECURSIVE lineage AS (</code><pre>SELECT <code>id</code>, <code>name</code>, <code>parent_id</code>, 1 AS level </code>FROM creation_chain WHERE <code>parent_id</code> IS NULL -- เริ่มต้นที่ราก

SQL

UNION ALL

SQL

SELECT cc.<code>id</code>, cc.<code>name</code>, cc.<code>parent_id</code>, l.level + 1 </code>FROM creation_chain cc JOIN lineage l ON cc.<code>parent_id</code> = l.<code>id

ผลลัพธ์ที่ได้จากการ Query นี้จะแสดงลำดับการอ้างอิงทั้งหมด ทำให้เราเห็นว่าข้อมูลใดที่ไม่มี parent_id หรือมี parent_id เป็น NULL ซึ่งนั่นคือคำตอบเชิงเทคนิคของคำถาม “แล้วใครสร้างผู้สร้าง?” นั่นคือ Record ที่เป็นจุดเริ่มต้นของตรรกะทั้งหมด

บทสรุป

ไม่ว่าจะเป็นในเชิงปรัชญาหรือเชิงเทคนิค ฐานข้อมูล PostgreSQL สอนเราว่าการทำความเข้าใจจุดเริ่มต้น (Boundary Condition) เป็นสิ่งสำคัญที่สุดในการสร้างตรรกะที่สมบูรณ์ การใช้ Recursive CTE ช่วยให้เราสามารถจำลองการย้อนรอยเหตุผลได้อย่างแม่นยำ ทำให้เราสามารถระบุ “ผู้สร้างคนแรก” (The First Cause) ของชุดข้อมูลได้อย่างชัดเจนและเชื่อถือได้

Exit mobile version