เห็นได้ชัดว่าคุณกำลังแนะนำว่าCONSTRAINT
ในฐานข้อมูลควรมีการบังคับใช้โดยแอปพลิเคชันที่เข้าถึงฐานข้อมูลนั้นหรือไม่
มีสาเหตุหลายประการที่ทำให้สิ่งนี้เป็นแนวคิดที่ไม่ดี (ไม่ดีไม่ดี ... )
1) หากคุณกำลังสร้างเอ็นจิ้น "ข้อ จำกัด " ของตัวเอง "(เช่นภายในรหัสแอปพลิเคชันของคุณ) จากนั้นคุณจะจำลองสิ่งที่ Oracle / SQL Server / MySQL / PostgreSQL / <ใครก็ตาม ... > ได้ใช้ไปปีเขียน รหัส CONSTRAINT ของพวกเขาได้รับการทดสอบในช่วงหลายปีที่ผ่านมาโดยผู้ใช้งานหลายล้านคน
2) ด้วยความเคารพอย่างสูงต่อคุณและทีมของคุณคุณจะไม่ถูกต้องแม้แต่ในเวลาไม่กี่ปี - จากที่นี่รหัส MySQL เพียงอย่างเดียวมีค่าใช้จ่าย 40 ล้านดอลลาร์ และ MySQL นั้นเป็นเซิร์ฟเวอร์ที่ถูกที่สุดในบรรดา 3 เซิร์ฟเวอร์ด้านบนและพวกเขาไม่ได้ใช้การตรวจสอบข้อ จำกัด เห็นได้ชัดว่าการได้รับ RI (Referential Integrity) อย่างถูกต้องนั้นเป็นเรื่องยาก
ฉันเคยฟอรัม Oracle บ่อยครั้งและฉันไม่สามารถบอกคุณได้ว่าผู้จัดการ / โปรแกรมเมอร์ที่ยากจนบางคนมีโครงการผลักดันเขาซึ่งอัจฉริยะที่เคยทำงานของเขามาก่อนมีแนวคิด "สดใส" ในการทำสิ่งที่คุณแนะนำ .
Jonathan Lewis (เขาเขียนหนังสือหน้า 550 บนพื้นฐานของเครื่องมือเพิ่มประสิทธิภาพ Oracle ) ให้เป็นไม่ 2 จากภัยพิบัติการออกแบบของเขาในหนังสือเล่มอื่น (" Tales of the Oak Table " - The Oak Table เป็นกลุ่มของผู้เชี่ยวชาญ Oracle)
- เราจะตรวจสอบความถูกต้องของข้อมูลในระดับแอปพลิเคชันแทนที่จะใช้ประโยชน์จากความสามารถในการตรวจสอบข้อ จำกัด ของ Oracle
3) แม้ว่าจะมีปาฏิหาริย์บางอย่างที่คุณสามารถนำ RI ไปใช้ได้อย่างถูกต้องคุณจะต้องปรับใช้อย่างสมบูรณ์ครั้งแล้วครั้งเล่าสำหรับทุกแอปพลิเคชันที่แตะที่ฐานข้อมูลนั้น - และหากข้อมูลของคุณมีความสำคัญ การเลือกสิ่งนี้เป็นกระบวนทัศน์จะนำคุณและโปรแกรมเมอร์ของคุณ (ไม่พูดถึงพนักงานให้ความช่วยเหลือและการขาย) มาใช้ชีวิตในการต่อสู้กับไฟและความทุกข์ยากอย่างต่อเนื่อง
คุณสามารถอ่านเพิ่มเติมเกี่ยวกับสาเหตุที่การดำเนินการ จำกัด ข้อมูลในระดับแอพลิเคชันคืออะไรสั้น ๆ ของความบ้านี่ , ที่นี่และที่นี่
หากต้องการตอบคำถามของคุณโดยเฉพาะ:
ทำไมพวกเขาถึงได้ประกาศเลย? ดูเหมือนว่ามีประโยชน์มาก แต่จริง ๆ แล้วจำเป็นต้องมีฐานข้อมูลที่ใช้งานได้
เหตุผลว่าKEY
s (อย่างใดอย่างหนึ่งPRIMARY
, FOREIGN
, UNIQUE
หรือเพียงแค่สามัญINDEX
e) มีการประกาศก็คือว่าในขณะที่มันไม่เคร่งครัดจำเป็นสำหรับฐานข้อมูลที่มีพวกเขามันทำงานมันเป็นอย่างที่จำเป็นสำหรับพวกเขาที่จะได้รับการประกาศให้มันฟังก์ชั่นเดียว