มีเรื่องตลกที่ฉันได้ยินมาครู่หนึ่ง:
ถาม BASIC coder นับเป็น 10 ได้อย่างไร
A 1,2,3,4,5,6,7,8,9,10
ถาม C coder นับเป็น 10 ได้อย่างไร 0,1,2,3,4,5,6,7,8,9
ถาม DBA นับเป็น 10 ได้อย่างไร 0,1 หลาย
ความจริงที่อยู่เบื้องหลังเรื่องตลกนี้ก็คือเมื่อคุณมีสองสิ่ง (หรือมากกว่า) ในสิ่งเดียวกันในโครงสร้างฐานข้อมูล (คอลัมน์หรือตาราง) คุณจะทำผิด
สคีมาที่ดูเหมือนว่า:
+----------+
| id |
| name |
| phone1 |
| phone2 |
| |
+----------+
เป็นเพราะคุณจะใส่หมายเลขโทรศัพท์ที่สามถ้าใครมี
เช่นเดียวกับตารางตัวเอง นอกจากนี้ยังเป็นสิ่งที่ไม่ดีที่จะแก้ไขสคีมาที่รันไทม์ซึ่งดูเหมือนว่า "ตารางใหม่สำหรับแต่ละรายการ" (ที่เกี่ยวข้อง: MVC4: วิธีสร้างโมเดลในขณะใช้งาน )
และวิธีการแก้ปัญหาคือการสร้างรายการสิ่งที่ต้องทำที่ประกอบด้วยสองตาราง คุณมีสองสิ่ง - รายการและรายการ
ดังนั้นให้สร้างโครงสร้างตารางที่สะท้อนถึงสิ่งนี้:
+----------+ +-------------+
| List | | Task |
+----------+ +-------------+
| id (pk) <---+ | id (pk) |
| name | +---+ listid (fk) |
| | | desc |
| | | |
+----------+ +-------------+
รายการมีรหัส (คีย์หลักสำหรับรายการ) และชื่อ งานมี id (คีย์หลัก) listid (foreign key) และคำอธิบายของงาน foreign key เกี่ยวข้องกับคีย์หลักของตารางอื่น
ฉันจะชี้ให้เห็นว่าสิ่งนี้ไม่ได้เริ่มรวมความเป็นไปได้ทั้งหมดในข้อกำหนดต่าง ๆ สำหรับซอฟต์แวร์และโครงสร้างตารางเพื่อรองรับ เสร็จสมบูรณ์วันที่ครบกำหนดทำซ้ำ ฯลฯ ... นี่คือโครงสร้างเพิ่มเติมทั้งหมดที่อาจต้องพิจารณาเมื่อออกแบบตาราง ที่กล่าวว่าหากโครงสร้างของตารางไม่ใช่โครงสร้างที่ทำให้เป็นมาตรฐานอย่างเหมาะสม (หรือตระหนักถึงการแลกเปลี่ยนที่คุณทำเพราะไม่ได้ทำให้เป็นมาตรฐาน) คุณจะมีอาการปวดหัวจำนวนมากในภายหลัง
ตอนนี้สิ่งที่เกี่ยวข้องกับการเขียนสิ่งนี้เป็นฐานข้อมูลเชิงสัมพันธ์ แต่นั่นไม่ใช่ฐานข้อมูลประเภทเดียวเท่านั้น หากคุณพิจารณาว่ารายการเป็นเอกสารฐานข้อมูลสไตล์ nosql ของเอกสารอาจเสนอวิธีการที่ไม่ผิด
ในขณะที่ฉันจะไม่เจาะลึกเกินไปมีบทเรียนมากมายสำหรับการทำรายการสิ่งที่ต้องทำบนโซฟา หนึ่งดังกล่าวที่มากับการค้นหาคือการประยุกต์ใช้งานรายการที่เรียบง่ายใน CouchDB แสดงให้เห็นอีกในวิกิพีเดีย CouchDB นี้เสนอรายการ Schema สำหรับสิ่งที่ต้องทำ
ในแนวทางที่เหมาะสมสำหรับที่นอนแต่ละรายการจะเป็นเอกสาร JSON ที่เก็บไว้ในฐานข้อมูล คุณเพียงแค่ใส่รายการในวัตถุ JSON และวางไว้ในฐานข้อมูล จากนั้นคุณอ่านจากฐานข้อมูล
JSON อาจมีลักษณะดังนี้:
[
{"task":"get milk","who":"Scott","dueDate":"2013-05-19","done":false},
{"task":"get broccoli","who":"Elisabeth","dueDate":"2013-05-21","done":false},
{"task":"get garlic","who":"Trish","dueDate":"2013-05-30","done":false},
{"task":"get eggs","who":"Josh","dueDate":"2013-05-15","done":true}
]
(จากการสร้างรายการช็อปปิ้งด้วยไฟล์ jsonบน Stack Overflow)
หรือบางสิ่งบางอย่างที่ใกล้เข้ามา มีการบันทึกอื่น ๆ ที่เก็บที่นอนที่เป็นส่วนหนึ่งของเอกสาร
สิ่งนี้ไม่ใช่วิธีการที่ไม่ถูกต้องและรายการสิ่งที่ต้องทำในฐานข้อมูลเอกสารอาจเหมาะอย่างยิ่งกับสิ่งที่คุณพยายามทำโดยใช้แนวคิดค่าใช้จ่ายน้อยลงสำหรับวิธีการทำ