RDBMS หลายเซิร์ฟเวอร์ของฉันหรือแอปพลิเคชันของฉันควรจัดการกับ Referential Integrity หรือไม่


16

รายการเช่น Foreign Keys, ข้อ จำกัด , ค่าเริ่มต้นและอื่น ๆ ควรได้รับการจัดการโดยระบบการจัดการฐานข้อมูล (ในกรณีนี้คือ MS SQL 2005) หรือแอปพลิเคชันหรือไม่ ฉันเคยได้ยินความคิดเห็นจากทั้งสองฝ่ายและฉันก็ไม่แน่ใจเหมือนกันว่าจะไปทางไหน

มีโอกาสที่เราจะขยายเซิร์ฟเวอร์หลายตัว / ฐานข้อมูลและฉันไม่คิดว่า Foreign Keys สามารถใช้ข้ามเซิร์ฟเวอร์ที่เชื่อมโยงได้ นอกจากนั้นยังมีการอ้างอิงแบบวงกลมในการออกแบบฐานข้อมูลซึ่งทำให้ฉันไม่สามารถใช้ON UPDATE CASCADEกับทุกสิ่งได้

ฐานข้อมูลคือ MS SQL 2005 (อาจเป็น 2008) และการโต้ตอบทั้งหมดที่มีควรผ่านแอปพลิเคชัน


3
ฉันมีสิ่งที่ต้องเรียนรู้ที่นี่เพราะฉันนึกภาพไม่ออกว่าไม่ได้ใช้ RDBMS
bigtang

คำตอบ:


10

หากมีโอกาสที่ DB จะถูกแก้ไขนอกแอปพลิเคชันของคุณคุณต้องการข้อ จำกัด ในฐานข้อมูล หาก DB เป็นและจะไม่มีอะไรมากไปกว่าส่วนท้ายของแอปพลิเคชันคุณสามารถปล่อยทิ้งไว้ได้แม้ว่าฉันจะบันทึกไว้ในกรณีและอาจเก็บไว้ในกรณีที่ประสิทธิภาพการทำงานไม่แย่เกินไป (ซอฟต์แวร์ Peoplesoft ทำงานในลักษณะนี้ - ข้อ จำกัด อยู่ในซอฟต์แวร์และ (ฉันไม่ได้ทำสิ่งนี้) มันทำงานทุกอย่างเหมือน SYS บน Oracle)

คุณต้องการสิ่งต่าง ๆ ที่ต้องถูกตรวจสอบโดยแอปพลิเคชันดังนั้นจึงสามารถตอบสนองได้อย่างชาญฉลาดและไม่ดีที่สุดที่นกแก้วจะส่งข้อความแสดงข้อผิดพลาดของฐานข้อมูลกลับไปยังผู้ใช้

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


5

เป็นการดีที่ทั้งสอง คุณไม่ควรไม่ได้มีฐานข้อมูลจัดการกับมัน แต่แล้วอีกครั้งถ้า app มากับข้อมูลที่ว่า DB จะปฏิเสธว่าเป็นข้อผิดพลาด runtime ดังนั้นแอปควรมีรหัสอย่างน้อยบางอุทิศตนเพื่อรักษาความสมบูรณ์ของ referential นอกจากนี้การตั้งค่าข้อ จำกัด ที่ถูกต้องใน SQL ในฐานข้อมูลนั้นง่ายกว่าการตั้งรหัสสำหรับฝั่งไคลเอ็นต์ดังนั้นการทำบนฐานข้อมูลจะช่วยลดปริมาณงานที่คุณต้องทำลงอย่างมาก


1

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


1

ฉันจะบอกว่าใส่ในฐานข้อมูล หากคุณใช้เฟรมเวิร์กแบบถาวรมันจะรับคีย์โดยอัตโนมัติ


1

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

คุณควรรักษาฐานข้อมูลไว้ในระดับที่สูงขึ้น EG, บังคับใช้จำนวนเต็มอ้างอิงและอาจไม่เป็นโมฆะ แต่ไม่ต้องกังวลกับความยาวหรือรูปแบบที่ จำกัด เนื่องจากจะแสดงผลได้ดีที่สุดสำหรับแอปพลิเคชันทั้งหมด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.