สารบัญ7 หัวข้อหลัก
จากข้อมูลสู่ DBMS และสถาปัตยกรรมที่แยกความซับซ้อน
Database: ชุดข้อมูลที่สัมพันธ์กัน จัดโครงและเก็บเพื่อใช้งานตามวัตถุประสงค์ โดย ตาราง เอกสาร กราฟ Index/metadata ตามโมเดล. DBMS: ซอฟต์แวร์นิยาม สร้าง ค้น เปลี่ยน ควบคุม Transaction, security, recovery และ administration โดย Query processor, storage, transaction/recovery/security manager. Database system: Database + DBMS + application + hardware/network + people + procedures โดย ระบบทั้งหมด ไม่ใช่ไฟล์ฐานข้อมูลอย่างเดียว. Schema: คำอธิบายโครงสร้าง Constraint และความสัมพันธ์ โดย Logical/physical objects. Instance/state: ข้อมูลจริง ณ เวลาใดเวลาหนึ่ง โดย แถว/เอกสารปัจจุบัน. Catalog/data dictionary: Metadata ของ Object, type, constraint, privilege, statistics โดย System catalog. Query: คำขออ่าน/คำนวณข้อมูล โดย Declarative SQL/ภาษาเฉพาะ. ใน SQL Table เป็นแบบ Multiset ได้ถ้าไม่ใช้ DISTINCT และ NULL เพิ่ม Three-valued logic จึงไม่ตรง Relational model เชิงทฤษฎีทุกจุด ต้องแยกแนวคิดทฤษฎีกับพฤติกรรม SQL.
Redundancy: ไฟล์แยกทำข้อมูลซ้ำง่าย โดย Schema/normalization/constraint ลดซ้ำเชิงตรรกะ แต่ยังอาจมี Replica/denormalizationโดยออกแบบ. Consistency: แก้หลายไฟล์ยาก โดย Transaction/constraint ช่วยรักษา. Data sharing: รูปไฟล์/โปรแกรมผูกกัน โดย Query/interface และ concurrency รองรับหลายผู้ใช้. Program–data dependence: เปลี่ยนโครงกระทบโปรแกรมมาก โดย Data abstraction/independence ลดผลบางระดับ. Ad hoc query: ต้องเขียนโปรแกรมเฉพาะ โดย ภาษา Query declarative. Integrity: Business rule กระจายตามโปรแกรม โดย Constraint/transaction รวมที่ DB ได้บางส่วน. Concurrency: Lock file หยาบ/ชนกันง่าย โดย Isolation, locking/MVCC. Security: สิทธิระดับไฟล์ โดย Object/row/column/role/audit ตามระบบ. Recovery: สำเนาไฟล์และขั้นตอนเอง โดย Log, backup, checkpoint, recovery.
Data owner: กำหนดความรับผิด/อนุมัติการใช้ตามธุรกิจและความเสี่ยง. Data steward: ดูนิยาม คุณภาพ Metadata และประสานแก้ปัญหา. Database designer/data architect: Conceptual/logical/physical model และมาตรฐาน. DBA: ติดตั้ง/กำหนดค่า Object, user, performance, capacity, HA, backup/recovery, patch. Application developer: ออกแบบ Query/transaction/interface และใช้ parameterized access. Data engineer: Pipeline/integration/warehouse/lake และคุณภาพ. Analyst/BI user: Query สรุป/รายงานตามสิทธิและ Semantic definition. Data scientist: สร้าง Feature/model โดยควบคุม Snapshot/Leakage/Privacy. End user: ใช้ Application/Query ระดับงาน. Security/auditor: กำหนด/ตรวจ Control, log, segregation และ compliance. Operator/SRE: เฝ้าระบบ Incident, availability, deployment/automation. Managed cloud DB: ผู้ให้บริการจัดบาง Operation โดย Shared responsibility, lock-in, cost, region, restore capability. Embedded DB: DB อยู่ใน Application/device โดย งาน Local/offline แต่ concurrency/central governance จำกัด. Federation/virtualization: Query หลาย แหล่งข้อมูล โดยไม่ย้ายทั้งหมด โดย latency/pushdown/semantic/availability ของ แหล่งข้อมูล.
External/View: มุมมองผู้ใช้/โปรแกรมแต่ละกลุ่ม โดย View/รายงานที่เห็นเฉพาะคอลัมน์/รูปแบบ. Conceptual/Logical: Schema รวมขององค์กร: Entity, relation, constraint โดยไม่ผูกการเก็บ โดย ตาราง/ความสัมพันธ์เชิงตรรกะ. Internal/Physical: วิธีเก็บจริง File/page/record/index/partition/compression โดย B-tree, heap, tablespace. External–conceptual mapping: เชื่อม View กับ Schema กลาง โดย เปลี่ยน Logical แล้วรักษา View ได้บางกรณี. Conceptual–internal mapping: เชื่อม Schema กับ Storage โดย เปลี่ยน Index/partition โดย Logical เดิม. Physical data independence: เปลี่ยน Internal โดยไม่ต้องเปลี่ยน Conceptual/Application โดย เพิ่ม Index/เปลี่ยน File organization. Logical data independence: เปลี่ยน Conceptual โดยกระทบ External/Application ให้น้อย โดย เพิ่ม Attribute/แยก Relation แล้วใช้ View compatibility. เปรียบเทียบ: Logical มักยากกว่า Physical เพราะโปรแกรมพึ่งโครง/ความหมาย โดย ไม่ใช่รับประกันว่าเปลี่ยน Schema ใด ๆ แล้วโปรแกรมไม่กระทบ. Abstraction: ซ่อนรายละเอียดชั้นล่างเพื่อจัดการความซับซ้อน โดย ทุก Mapping/DBMS มีข้อจำกัด.
Centralized: DB อยู่ศูนย์หลัก โดย ง่าย Consistency แต่ต้อง HA/latency. Client–server 2-tier: Client ติดต่อ DB โดยตรงบางรูป โดย เรียบง่ายแต่ Connection/security/business logic กระจาย. 3-tier/N-tier: Client→application/API→database โดย รวม Logic/security/pooling และ Scale แยก. Distributed database: ข้อมูล/การประมวลหลาย Site แต่เห็นเป็นระบบ โดย consistency, partition, failure, transaction ซับซ้อน. Parallel database: ใช้หลาย CPU/node เร่ง Query ในระบบประสาน โดย partition/skew/shuffle. Shared-nothing: Node มี compute/storage ของตนและแบ่งข้อมูล โดย Scale แต่กระจาย/Join/rebalance. Shared-disk: Node แชร์ Storage โดย failover/coordination/lock manager. Superclass/subtype: Inheritance ของ Attribute/relationship ใน EER. Disjoint/overlap: สมาชิกอยู่ได้หนึ่ง Subtypeหรือหลาย. Total/partial specialization: สมาชิก Supertype ต้องอยู่ Subtype อย่างน้อยหนึ่งหรือไม่.
Entity type: ชนิดสิ่งที่ต้องเก็บ เช่นลูกค้า/สินค้า. Entity instance: สมาชิกจริงหนึ่งรายการ. Strong entity: ระบุเอกลักษณ์ด้วย Key ของตน. Weak entity: พึ่ง Owner + partial key/identifying relationship. Simple attribute: แยกย่อยตามความหมายไม่จำเป็น. Composite attribute: ประกอบส่วนย่อย เช่นที่อยู่ตามแบบ. Multivalued attribute: Entity หนึ่งมีหลายค่า เช่นเบอร์หลายหมายเลข. Derived attribute: คำนวณจากค่าอื่น เช่นอายุจากวันเกิด. Relationship type: ความสัมพันธ์ระหว่าง Entity types. Relationship degree: จำนวน Entity types ที่ร่วม: unary/binary/ternary. Recursive relationship: Entity type สัมพันธ์กับตนเองคนละ Role. Relationship attribute: คุณลักษณะของความสัมพันธ์ เช่นจำนวนในรายการสั่งซื้อ. Associative entity: ยกระดับ many-to-many ให้มี Identity/attributes. Superclass/subtype: Inheritance ของ Attribute/relationship ใน EER. Disjoint/overlap: สมาชิกอยู่ได้หนึ่ง Subtypeหรือหลาย. Total/partial specialization: สมาชิก Supertype ต้องอยู่ Subtype อย่างน้อยหนึ่งหรือไม่.
แบบจำลอง คีย์ ข้อจำกัด และ Normalization
1:1: แต่ละฝั่งสัมพันธ์อย่างมากหนึ่ง โดย บุคคล–ข้อมูลชีวมิติชุดหลักตามกฎ. 1:N: หนึ่ง A มีหลาย B; แต่ละ B อยู่ A หนึ่งตามกฎ โดย แผนก–พนักงาน. M:N: แต่ละฝั่งมีหลาย โดย นักศึกษา–รายวิชา ต้อง Relation กลาง. Minimum cardinality 0: Participation เป็น Optional โดย ลูกค้าอาจยังไม่มีคำสั่งซื้อ. Minimum cardinality 1: Participation บังคับ โดย รายการสั่งซื้อต้องอยู่คำสั่งซื้อหนึ่ง. Maximum 1/N: จำนวนสูงสุดที่สัมพันธ์ โดย —. Total participation: ทุก Entity instance ต้องร่วม Relationship โดย —. Partial participation: บาง Entity ไม่ร่วมได้ โดย —. Role name: ความหมายฝั่งความสัมพันธ์ โดยเฉพาะ Recursive โดย —. Temporal cardinality: กฎอาจต่างตามเวลา เช่นหัวหน้าในช่วงหนึ่ง โดย —. Business rule: ต้องอธิบายด้วยประโยคและยืนยันผู้รู้โดเมน ไม่เดาจากข้อมูล Sample โดย —. Cardinality จากข้อมูลปัจจุบันไม่จำเป็นเท่ากฎ เช่นวันนี้ลูกค้าทุกคนมีคำสั่งซื้อ ไม่พิสูจน์ว่ากฎบังคับขั้นต่ำ 1 ต้องอ้าง Requirement/Process.
Superkey: ชุด Attribute ที่ระบุ Tuple ไม่ซ้ำ อาจมี Attribute เกิน โดย —. Candidate key: Superkey ขั้นต่ำ ตัด Attribute ใดแล้วไม่ Unique โดย —. Primary key: Candidate key ที่เลือกเป็นตัวระบุหลัก โดย —. Alternate key: Candidate keys ที่ไม่ได้เลือก Primary โดย —. Composite key: Key มีหลาย Attribute โดย —. Foreign key: Attribute(s) อ้าง Candidate/unique key ของ Relation เป้าหมายตาม DBMS โดย —. Natural key: มีความหมายธุรกิจ เช่นรหัสทางการ โดย —. Surrogate key: ID สร้างภายใน ไม่มีความหมายธุรกิจ โดย —. Partial key: ระบุ Weak entity ภายใน Owner โดย —. Business key: ตัวระบุที่ธุรกิจยอมรับ อาจเปลี่ยน/หลายระบบ โดย —. Unique constraint: บังคับไม่ซ้ำ; การจัด NULL ต่างตาม DBMS โดย —. Stable key: ไม่ควรเปลี่ยนตาม Attribute ที่แก้บ่อย โดย —. Foreign-key index: Constraint ไม่รับประกันมี Index อัตโนมัติในทุก DBMS โดย —. Surrogate trap: Primary surrogate ไม่ห้าม Business duplicate ต้องมี Unique rule เพิ่ม โดย —.
Domain: ค่าตาม Type/range/format/meaning โดย quantity≥0, status ในชุด. Key: ระบุ Tuple ไม่ซ้ำ โดย candidate/primary/unique. Entity integrity: Primary key ไม่เป็น NULL โดย ทุกแถวต้องระบุตัว. Referential integrity: Foreign key เป็น NULL เมื่ออนุญาตหรือมีค่าตรง Parent โดย ป้องกัน orphan. NOT NULL: บังคับมีค่า โดย ไม่พิสูจน์ว่าค่าถูก. CHECK: Predicate ระดับแถว/คอลัมน์ตาม DBMS โดย end_date≥start_date. DEFAULT: ค่าที่ใช้เมื่อไม่ระบุ โดย ไม่ใช้เมื่อส่ง NULL ชัดในหลายระบบ. ASSERTION/business rule: กฎข้ามแถว/ตารางเชิงทฤษฎี/ระบบ โดย Support ต่าง ต้องใช้ design อื่น. Trigger: ทำงานเมื่อ Event เพื่อกฎ/บันทึกบางชนิด โดย ซ่อน Side effect/recursive/performance ต้องระวัง. Application rule: กฎที่ DB บังคับยาก/ต้อง Context โดย เสี่ยงหลาย Application ไม่สอดคล้อง. Functional dependency มาจากความหมาย/กฎ ไม่ใช่เพียงข้อมูล Sample ที่ยังไม่พบค่าซ้ำ การ Normalize จากข้อมูลอย่างเดียวอาจได้ Schema ผิดเมื่ออนาคตมีกรณีใหม่.
X→Y: ถ้า Tuple สองแถวมี X เท่ากัน ต้องมี Y เท่ากันตามกฎโดเมน. Determinant: ฝั่งซ้าย X. Trivial FD: Y เป็น Subset ของ X. Full functional dependency: Y พึ่ง X ทั้งชุด ตัด Attribute ใดจาก X ไม่ได้. Partial dependency: Non-prime attribute พึ่งส่วนแท้ของ Composite candidate key. Transitive dependency: Key→X และ X→Y โดย Y พึ่งผ่าน X ตามเงื่อนไข. Prime attribute: อยู่ใน Candidate key อย่างน้อยหนึ่งชุด. Closure X⁺: Attribute ทั้งหมดที่อนุมานจาก X ด้วย FDs. Minimal cover: ชุด FD เทียบเท่าที่ลดฝั่งขวา/ฝั่งซ้าย/FD เกินตามขั้น. Insertion anomaly: เพิ่ม Fact หนึ่งไม่ได้ถ้าอีก Fact ยังไม่มี. Update anomaly: Fact ซ้ำหลายแถว แก้ไม่ครบเกิดขัดกัน. Deletion anomaly: ลบ Fact หนึ่งทำให้ Fact อื่นหายโดยไม่ตั้งใจ. ON DELETE/UPDATE action: RESTRICT/NO ACTION, CASCADE, SET NULL/DEFAULT ตามระบบ โดย Cascade ต้องไม่ลบวงกว้างโดยไม่ตั้งใจ. Deferred constraint: ตรวจปลาย Transaction ในระบบที่รองรับ โดย ช่วยโหลด/สลับ Key แต่ต้องรู้พฤติกรรม.
1NF: ค่าของ Attribute เป็น Atomic ตาม Domain และไม่มี Repeating group ใน Relation โดย แยกรายการหลายค่า/กลุ่มซ้ำ. 2NF: เป็น 1NF และ Non-prime ทุกตัวพึ่ง Candidate key แบบเต็ม ไม่พึ่งบางส่วน โดย Partial dependency; มีผลเด่นเมื่อ Composite key. 3NF แบบเข้าใจ: เป็น 2NF และไม่มี Non-prime พึ่ง Key แบบ Transitive ผ่าน Non-key โดย แยก Fact ที่ขึ้นกับ Non-key. 3NF แบบเป็นทางการ: สำหรับ FD X→A ที่ไม่ trivial: X เป็น Superkey หรือ A เป็น Prime attribute โดย อนุญาตบางกรณีที่ BCNF ไม่อนุญาต. BCNF: สำหรับ FD X→Y ที่ไม่ trivial ทุก Determinant X ต้องเป็น Superkey โดย เข้มกว่า 3NF และลด anomaly จาก determinant ไม่ใช่ Key. Subtype: class tables: Supertype + subtype tables key=FK. Concrete tables: Table ต่อ Subtype รวม field ซ้ำ. Ordered relationship: เก็บ sequence/rank และ Unique rule.
ข้อควรระวัง: Relation อาจมีหลาย Candidate keys/overlap ต้องใช้ Formal rule โดย จำคำว่า “Key, whole key, nothing but key” ช่วยแต่ไม่แทนการวิเคราะห์ FD. Lossless join: Join Relation ย่อยกลับแล้วได้ Relation เดิม ไม่สร้าง Spurious tuples. Dependency preservation: ตรวจ FDs เดิมได้โดยไม่ Join Relation ย่อย. 3NF synthesis: มักรักษา Dependency และ Lossless ตาม Algorithm. BCNF decomposition: Lossless ได้ตาม Algorithm แต่บาง Dependency อาจไม่ Preserve. Trade-off: ต้องเลือก Integrity/performance/complexity ตาม Workload และกฎ. Denormalization: ตั้งใจรวม/ซ้ำเพื่อ Read performance โดยมีวิธี Sync/validate ไม่ใช่ปล่อย anomaly.
- 1เก็บความต้องการ กฎธุรกิจ เหตุการณ์ และคำศัพท์ของผู้ใช้ก่อนออกแบบโครงสร้าง
- 2สร้าง ER/EER เพื่อระบุเอนทิตี แอตทริบิวต์ ความสัมพันธ์ คาร์ดินัลลิตี และการมีส่วนร่วม
- 3แปลงเป็น Relational schema พร้อม Primary key, Foreign key, Candidate key และข้อจำกัดความคงสภาพ
- 4วิเคราะห์ Functional dependency และความผิดปกติจากการเพิ่ม แก้ หรือลบข้อมูล
- 5ทำ Normalization ถึงระดับที่เหมาะกับกฎและภาระงาน แล้วทดสอบ Lossless join กับการรักษาข้อกำหนด
เนื้อหาสรุปนี้จัดทำขึ้นเพื่อการศึกษาส่วนบุคคล ห้ามคัดลอก ทำซ้ำ หรือนำไปใช้เพื่อวัตถุประสงค์ทางการค้าโดยไม่ได้รับอนุญาต