ฉันค่อนข้างใหม่นอกมหาวิทยาลัยดังนั้นความคุ้นเคยกับฐานข้อมูลเชิงสัมพันธ์ส่วนใหญ่มาจากหลักสูตรฐานข้อมูลของฉันซึ่งไม่มีอะไรใน BCNF หรือ 3NF เป็นการเลียนแบบ แน่นอนว่าปลายด้านหนึ่งของสุดขั้ว แต่ทีมของฉันในที่ทำงานดูเหมือนจะนำไปสู่จุดจบที่ตรงกันข้ามอย่างสมบูรณ์
ใน microservice db schemas ของเราเอนทิตีมักจะมีมากกว่าหนึ่งตาราง สิ่งใดก็ตามที่คุณต้องการทำให้เป็นปกติในตารางอื่นจะถูกเก็บไว้ในคอลัมน์ json หากภายหลังพบว่าคุณสมบัติอย่างใดอย่างหนึ่งใน json นี้ต้องถูกสอบถามคอลัมน์ใหม่จะถูกเพิ่มและข้อมูลจะถูกเก็บไว้ในทั้งสองแห่ง (ใช่ในคอลัมน์ที่ต่างกันสองแห่งในตารางเดียวกัน)
ในหลายกรณีคอลัมน์ json เหล่านี้มีข้อได้เปรียบอย่างแน่นอน หากคุณไม่จำเป็นต้องสืบค้นข้อมูลนั้นและหากคุณไม่จำเป็นต้องทำการเปลี่ยนแปลงข้อมูลข้างเดียว (ซึ่งเป็นสิ่งที่คุณไม่สามารถคาดการณ์ได้อย่างชัดเจน) นั่นไม่ใช่ความคิดที่ไม่ดี บวกกับบริการหลายอย่างของเราที่ไม่เห็นเซิร์ฟเวอร์หรือโฮสต์อยู่บนเครื่องที่มีเนื้อที่ดิสก์ลามกอนาจารสำหรับสิ่งที่พวกเขาต้องการดังนั้นการทำสำเนาข้อมูลจึงไม่ใช่ปัญหาใหญ่ (ถึงแม้ว่าสิ่งที่ฉันมักจะต้องการหลีกเลี่ยงปรัชญา)
ขณะนี้เรากำลังสร้างบริการที่ตรงกับกฎตามชุดเงื่อนไขที่พวกเขาเป็นเจ้าของแล้วดำเนินการชุดของการกระทำที่เกี่ยวข้องกับกฎเหล่านั้นเมื่อกฎเป็นจริง (เช่นเงื่อนไขทั้งหมดเป็นจริง) ทีมงานย่อยของฉันที่สร้างบริการนี้ในทันทีส่วนใหญ่เชื่อว่ามีประโยชน์อย่างมากในการทำให้การดำเนินการและเงื่อนไขเป็นปกติอยู่ห่างจากกฎในสคีมา เห็นได้ชัดว่าตารางเหล่านี้รักษาความสัมพันธ์กับต่างประเทศที่สำคัญกับรหัสกฎ จากมุมมองของเราเราสามารถหลีกเลี่ยงการทำซ้ำข้อมูลในเงื่อนไขที่ทำให้เรามั่นใจได้ว่าพวกเขาจะได้รับการประเมินเพียงครั้งเดียวและเป็นเรื่องง่ายที่จะหาเงื่อนไขและกฎที่เราต้องการเมื่อต้องการโดยไม่ต้องดึงกฎออกทุกครั้ง
การพูดกับหนึ่งในวิศวกรหลักของเราในวันนี้เขาพยายามผลักฉันให้ห่างจากสคีมานี้ การพยายามโต้แย้งในทุก ๆ ด้านที่เราไม่ต้องการจริง ๆ มันจะทำให้เกิดปัญหาด้านประสิทธิภาพในอนาคตโดยอ้างอิงจากหินก้อนเดียวที่เราเป็นเจ้าของนั่นคือการเลียนแบบการออกแบบ เขาอ้างถึงสิ่งที่เราทำในฐานะ "วิธีเก่า" และโต๊ะแบนที่มี json เป็น "วิธีใหม่" เขาแย้งว่าในสถานที่ที่ฉันต้องการอะตอมมิกเราไม่ต้องการมันและแทนที่จะเป็นแบบสอบถามเราควรทำหลายอย่างในความทรงจำ นี่คือหลักการออกแบบที่บริการหลายอย่างของเราปฏิบัติตามในขณะนี้ เราไม่คาดหวังว่าปริมาณข้อมูลของเราจะเติบโตอย่างมีนัยสำคัญซึ่งจะทำให้การสืบค้นของเรารวดเร็ว สิ่งที่เราคาดหวังคือเวลาที่ใช้ในการประเมินกฎและการดำเนินการ
ฉันเข้าใจว่าฐานข้อมูลเชิงสัมพันธ์ที่ไม่ได้เป็นที่นิยมมากขึ้นในช่วงไม่กี่ปีที่ผ่านมา แต่แม้ในขณะที่ค้นหาข้อมูลเกี่ยวกับผลการปฏิบัติงานของความสัมพันธ์กับต่างประเทศที่สำคัญฉันไม่เห็นข้อมูลจำนวนมากที่ทำให้คดีของเขา ฉันคิดว่าพวกเขามีแนวโน้มที่จะแนะนำการทำธุรกรรมขนาดใหญ่ซึ่งอาจทำให้เกิดปัญหา แต่ดูเหมือนว่าปัญหาจะขึ้นอยู่กับกุญแจต่างประเทศ
นี่คือความไร้เดียงสาของฉันหรือไม่ หรือว่ามีบางอย่างที่ฉันและทีมย่อยหายไปจริง ฉันไม่ได้ให้ข้อมูลโดยละเอียดเกี่ยวกับปัญหาของเราอย่างชัดเจนเพราะฉันไม่จำเป็นต้องมองหาวิธีแก้ปัญหา เนื่องจากนี่เป็นแนวโน้มที่พบบ่อยในทีมที่ใหญ่กว่าของเราฉันอยากรู้จริงๆว่าพวกเขาจะทำอะไรกับสิ่งนี้