PlusMagi's Blog By Pitt Phunsanit Backend,Database ให้ฟุตเตอร์อยู่ด้านล่างพอดีหน้าจอ (ตาราง)

ให้ฟุตเตอร์อยู่ด้านล่างพอดีหน้าจอ (ตาราง)

ในฐานะ System Specialist และ Senior Database Architect เราเข้าใจดีว่าการจัดวางองค์ประกอบหน้าจอ (Layout) เป็นเรื่องที่ต้องอาศัย Front-end Architecture ที่แม่นยำ อย่างไรก็ตาม เมื่อเราต้องออกแบบระบบที่ต้องมีการบังคับให้ส่วน Footer ติดอยู่ด้านล่างสุดของหน้าจอ (Sticky Footer) ในเชิงสถาปัตยกรรมข้อมูล (Data Architecture) เราสามารถจำลองแนวคิดนี้ได้ แม้ว่า PostgreSQL จะเป็นระบบจัดการฐานข้อมูล ไม่ใช่เครื่องมือในการจัดวางหน้าจอโดยตรง แต่เราสามารถใช้พลังของ Common Table Expressions (CTE) และการรวมข้อมูล (UNION) เพื่อสร้างโครงสร้างข้อมูลที่ *บังคับ* ให้มีส่วนประกอบหลัก (Header, Content, Footer) ที่สมบูรณ์และมีลำดับความสำคัญที่ชัดเจน

หลักการทางสถาปัตยกรรม: การจำลองโครงสร้าง Full-Height

แนวคิดหลักของการทำ Sticky Footer คือการกำหนดให้องค์ประกอบทั้งหมด (Header, Body, Footer) ต้องมีความสูงรวมกันเท่ากับ 100% ของพื้นที่ที่กำหนด (Viewport Height) ในทางสถาปัตยกรรมข้อมูล เราจะจำลองสิ่งนี้โดยการสร้างชุดข้อมูลที่ประกอบด้วยสามบล็อกที่ *ต้อง* ถูกเรียกใช้เสมอ โดยแต่ละบล็อกจะถูกกำหนดให้เป็นส่วนที่ขาดไม่ได้ของการแสดงผล

เราจะใช้ PostgreSQL เพื่อกำหนดโครงสร้างข้อมูล (Schema) ที่มีส่วนประกอบหลัก 3 ส่วน คือ ส่วนหัว (Header Block), เนื้อหาหลัก (Content Block), และส่วนท้าย (Footer Block) โดยใช้ CTE เพื่อให้มั่นใจว่าการเรียกข้อมูลจะครอบคลุมทั้งสามส่วนอย่างสมบูรณ์และเป็นลำดับ

การจำลอง Sticky Footer ด้วย PostgreSQL CTE

เราจะสร้างตารางเสมือน (Virtual Table) ที่จำลองการเรียงลำดับขององค์ประกอบหน้าจอ โดยกำหนดให้แต่ละบล็อกมีประเภท (Block Type) และเนื้อหาเฉพาะของตนเอง การใช้ `UNION ALL` จะช่วยให้เราสามารถรวมข้อมูลจากหลายแหล่ง (หรือหลายส่วนของ Layout) ให้กลายเป็นชุดผลลัพธ์เดียวที่สมบูรณ์

SQL

WITH header_block AS ( -- ส่วนที่ 1: Header (ส่วนหัว) SELECT 'Header' AS block_type, 'ข้อมูลส่วนหัวของเว็บไซต์' AS content_data, 1 AS block_order UNION ALL SELECT 'Header', 'โลโก้และเมนูหลัก', 1 ), content_block AS ( -- ส่วนที่ 2: Content (เนื้อหาหลัก) SELECT 'Content' AS block_type, 'ข้อมูลเนื้อหาหลักที่แปรผัน' AS content_data, 2 AS block_order UNION ALL SELECT 'Content', 'บทความและรายละเอียดสินค้า', 2 ), footer_block AS ( -- ส่วนที่ 3: Footer (ส่วนท้าย) SELECT 'Footer' AS block_type, 'ข้อมูลลิขสิทธิ์และติดต่อ' AS content_data, 3 AS block_order) SELECT * FROM header_block UNION ALL SELECT * FROM content_block UNION ALL SELECT * FROM footer_block ORDER BY block_order;

คำอธิบายโค้ด:

  • `WITH header_block AS (…)`: สร้าง CTE แรกสำหรับส่วนหัว กำหนดให้มี `block_type` และ `block_order`
  • `UNION ALL`: ใช้รวมข้อมูลจาก CTEs ทั้งสามเข้าด้วยกันอย่างสมบูรณ์
  • `ORDER BY block_order`: รับประกันว่าผลลัพธ์ที่ได้จะถูกเรียงลำดับอย่างถูกต้องตามลำดับการแสดงผล (Header -> Content -> Footer)

บทสรุปทางสถาปัตยกรรม

แม้ว่าในทางปฏิบัติของการพัฒนาเว็บ (Web Development) การใช้ CSS Flexbox หรือ Grid จะเป็นเครื่องมือที่เหมาะสมที่สุดในการจัดวาง Layout ให้ Sticky Footer ได้อย่างแท้จริง แต่ในมุมมองของ System Architect การใช้ PostgreSQL เพื่อสร้างโครงสร้างข้อมูลที่บังคับให้มีส่วนประกอบครบถ้วน (Header, Content, Footer) และจัดเรียงตามลำดับที่กำหนด ถือเป็นการจำลองความสมบูรณ์ของสถาปัตยกรรมหน้าจอในระดับข้อมูล (Data Layer Integrity) ได้อย่างยอดเยี่ยม การเข้าใจความแตกต่างนี้ช่วยให้เราสามารถออกแบบระบบที่แข็งแกร่งได้ทั้งในระดับ Front-end และ Back-end อย่างสมบูรณ์