Multi Schema Single Database บน PostgreSQL

Article Index

Multi Schema Single Database

Multi Schema Single Database นั้น เป็นการสร้าง database ขึ้นมาและแบ่ง database ออกเป็นส่วนๆ ที่เรียกว่า Schema แต่ละ schema มีการแบ่งแยกผู้ใช้งานกันชัดเจน เป็นการใช้งานรูปแบบหนึ่งที่มีต้องรู้จักไว้ แต่มักถูกละเลยไปเนื่องจากไม่ค่อยการแสดงวิธีการใช้งานที่เด่นชัด เราลองมาดูวิธีการใช้งานการออกแบบฐานข้อมูลรูปแบบนี้กัน

ตัวอย่างปัญหา/การใช้งาน

สมมุติว่าเราพัฒนา web application ระบบสินค้าคลังขึ้นมา ซึ่ง framework ที่ใช้ ต่อกับฐานข้อมูลเดียวตลอดการใช้งาน

            ในการออกแบบทั่วไป มักสร้างฐานข้อมูลสำหรับจัดเก็บข้อมูลของแต่ละระบบ จากนั้นติดตั้ง application ให้ใช้งานกับฐานข้อมูลนั้น เมื่อ application นั้นถูกนำไปติดตั้งใช้งานสำหรับบริษัทต่างๆ ก็เพียงสร้างฐานข้อมูลขึ้นมาใหม่ เพื่อจัดเก็บข้อมูลสำหรับแต่ละบริษัทนั้น

เราสามารถจัดทำ application เดียวที่ทำงานกับฐานข้อมูลเดียว ให้บริการกับหลายบริษัทพร้อมกัน ได้หรือไม่?

ความต้องการใหม่คือ เราต้องการติดตั้ง web application เดียวแต่ใช้ได้หลายบริษัท โดยไม่ต้องการติดตั้ง web application หลายระบบแยกตามบริษัท ซึ่งสิ้นเปลืองทรัพยากรเกินความจำเป็น

            ทั้งนี้ application เดิมที่เคยออกแบบให้จัดเก็บข้อมูลของบริษัทเดียว สามารถนำมาใช้งานได้โดยไม่ต้องปรับแก้โปรแกรมใหม่ให้จัดเก็บและทำงานกับข้อมูลหลายบริษัทในตารางเดียวกัน

ในการใช้งาน เมื่อมีผู้ใช้งาน login เข้ามา  application จะตรวจสอบว่าผู้ใช้งานนั้นสังกัดบริษัทไหน จากนั้น จะเรียกใช้ข้อมูลของบริษัทนั้น

หลักการ

ใน PostgreSQL เราสามารถที่จะแบ่งกลุ่มของ tables มาอยู่ด้วยกันเสมือนเป็น namespace เดียวกันในการอ้างอิง โดยใช้ schema ซึ่งผู้ดูแลระบบสามารถสร้าง path ในการสืบค้นข้อมูลใน tables ตาม schema ได้ คล้ายคลึงการสร้าง path ในการค้นหา files บน directories ในระบบปฏิบัติการ

            หลักสำคัญของเรื่องนี้มี 2 เรื่อง เรื่องแรก ผู้ใช้งานแต่ละคนต้องมี schema ใช้งานเป็นของตนเอง รู้ว่าจะค้นหา schema นั้นได้อย่างไร เรื่องต่อมา ผู้ใช้งานจะต้องมีสิทธิ์ในการใช้งาน objects ต่างๆ ไม่ว่าจะเป็น tables, view, functions และอื่นๆ ใน schema นั้น ซึ่งผู้ใช้งานนั้นอาจเป็นเจ้าของ objects เหล่านั้น หรือได้รับสิทธิ์การใช้งาน (grant) จากเจ้าของ objects เหล่านั้น


Print