Notion จากศูนย์ถึงโปร ตอนที่ 5 — Relations และ Rollups เชื่อมข้อมูลไม่ให้ซ้ำ

ซีรีส์ "Notion จากศูนย์ถึงโปร" ลงวันละตอนรวม 8 ตอน — ตามอ่านทั้งชุดได้ที่หมวดคู่มือเครื่องมือ

ฐานข้อมูลงานตอนนี้มี property "หมวด" เป็น multi-select ใช้แยกงานคร่าว ๆ ได้ แต่พอมีโปรเจกต์จริงจังหลายโปรเจกต์ปัญหาจะเริ่มโผล่ งานแต่ละชิ้นอยากรู้ว่ามันอยู่โปรเจกต์ไหน อยากรู้ว่าโปรเจกต์นั้นเสร็จไปกี่เปอร์เซ็นต์แล้ว ถ้ายังใช้ text หรือ select ธรรมดา ทางเดียวที่ทำได้คือพิมพ์ชื่อโปรเจกต์ซ้ำในทุกแถวงาน แล้ววันหนึ่งเปลี่ยนชื่อโปรเจกต์ ก็ต้องไล่แก้ทีละแถวเอง

ปัญหาที่ relation แก้

Relation แก้ปัญหานี้ตรงจุด แทนที่จะพิมพ์ชื่อซ้ำ ให้สร้างฐานข้อมูล "โปรเจกต์" แยกออกมาต่างหาก แล้ว เชื่อม แถวงานแต่ละแถวเข้ากับแถวโปรเจกต์ที่มันสังกัดอยู่ ข้อมูลชื่อโปรเจกต์อยู่ที่เดียวคือในฐานข้อมูลโปรเจกต์ ส่วนฐานข้อมูลงานแค่อ้างถึงมัน เปลี่ยนชื่อโปรเจกต์ที่เดียว ทุกงานที่เชื่อมอยู่เห็นชื่อใหม่ทันทีโดยไม่ต้องแก้อะไรเพิ่ม

นี่คือแนวคิดใหญ่ของทั้งบทนี้: ข้อมูลอยู่ที่เดียว อ้างถึงได้ทุกที่ เป็นหลักเดียวกับที่ฐานข้อมูลทุกระบบใหญ่ ๆ ในโลกใช้ ไม่ใช่แค่ Notion

สร้าง relation

  1. สร้างฐานข้อมูล full page ใหม่ชื่อ "โปรเจกต์" ใส่ property พื้นฐานเช่นชื่อโปรเจกต์กับสถานะ แล้วเพิ่มแถวโปรเจกต์จริงสักสองสามอัน
  2. กลับไปที่ฐานข้อมูลงาน เพิ่ม property ใหม่ชนิด Relation ตั้งชื่อว่า "โปรเจกต์" แล้วเลือกให้ชี้ไปที่ฐานข้อมูลโปรเจกต์ที่เพิ่งสร้าง
  3. ในแต่ละแถวงาน คลิกช่อง relation แล้วเลือกโปรเจกต์ที่งานนั้นสังกัด เลือกได้จากรายชื่อจริงในฐานข้อมูลโปรเจกต์ ไม่ต้องพิมพ์เอง พิมพ์ผิดไม่ได้เพราะเลือกจากลิสต์
  4. สังเกตว่าพอเชื่อมเสร็จ ฝั่งฐานข้อมูลโปรเจกต์จะมีคอลัมน์ใหม่โผล่ขึ้นมาเองชื่อ "งาน" แสดงรายชื่องานทั้งหมดที่เชื่อมกลับมา relation ทำงานสองทางเสมอ

Rollup: ดึงตัวเลขสรุปข้ามฐานข้อมูล

พอเชื่อมสองฐานข้อมูลด้วย relation แล้ว จะเริ่มดึงข้อมูลจากฝั่งงานมาสรุปที่ฝั่งโปรเจกต์ได้ นี่คือหน้าที่ของ Rollup

ตัวอย่างที่ใช้บ่อยที่สุด: อยากรู้ว่าโปรเจกต์หนึ่งมีงานทั้งหมดกี่ชิ้น เสร็จไปแล้วกี่ชิ้น วิธีทำ

  1. ในฐานข้อมูลโปรเจกต์ เพิ่ม property ชนิด Rollup ตั้งชื่อ "งานทั้งหมด"
  2. เลือก relation ที่จะดึงข้อมูลมา (คือ "งาน" ที่โผล่มาเองจากขั้นตอนก่อนหน้า)
  3. เลือก property ที่จะนับจากฝั่งนั้น เลือกชื่อรายการ แล้วเลือกวิธีคำนวณเป็น Count all จะได้จำนวนงานทั้งหมดในโปรเจกต์นั้น
  4. เพิ่ม rollup อีกตัวชื่อ "งานเสร็จแล้ว" ทำแบบเดียวกันแต่เลือกวิธีคำนวณเป็น Count values พร้อมกรองเฉพาะแถวที่สถานะเป็น "เสร็จแล้ว"

ตอนนี้ฐานข้อมูลโปรเจกต์จะมีตัวเลขสองคอลัมน์ที่อัปเดตเองทุกครั้งที่งานในฐานข้อมูลงานเปลี่ยนสถานะ ไม่ต้องนับมือ ไม่ต้องจำว่าอัปเดตหรือยัง

ระวังอย่าสร้างฐานข้อมูลแยกเมื่อควรเป็น view ของอันเดิม

ข้อผิดพลาดที่พบบ่อยพอ ๆ กับการไม่ใช้ relation เลย คือใช้มันเกิน สร้างฐานข้อมูลใหม่ทุกครั้งที่อยากมองข้อมูลอีกมุม ทั้งที่จริงแล้วสิ่งที่ต้องการคือ view ใหม่ของฐานข้อมูลเดิม ไม่ใช่ฐานข้อมูลใหม่

วิธีแยกให้ออก: ถ้าสองชุดข้อมูลมี "ตัวตน" ต่างกันจริง เช่นงานกับโปรเจกต์เป็นคนละสิ่งกันชัดเจน แบบนี้ควรแยกฐานข้อมูลแล้วเชื่อมด้วย relation แต่ถ้าแค่อยากดูงานชุดเดียวกันคนละมุม เช่นงานของเดือนนี้กับงานของเดือนที่แล้ว นั่นคือ view ที่ต่าง filter กัน ไม่ใช่ฐานข้อมูลคนละอัน สร้างฐานข้อมูลแยกเกินจำเป็นจะกลับไปเจอปัญหาเดิมคือข้อมูลซ้ำที่ relation ควรมาแก้ตั้งแต่แรก

ทดสอบง่าย ๆ ก่อนสร้างฐานข้อมูลใหม่ทุกครั้ง: ถามว่าสิ่งนี้ "เป็น" งานหรือแค่ "มอง" งานคนละมุม ถ้าเป็นอย่างหลัง กลับไปสร้าง view แทน

พรุ่งนี้ ตอนที่ 6: เมื่อ property ต้องคำนวณเองได้ ไม่ต้องรอมานั่งกรอกมือทุกครั้ง — เข้าเรื่อง formulas พร้อมตัวอย่างสูตรที่ใช้ได้จริงสามแบบ