มันเป็นความคิดที่ดีหรือไม่ที่จะสร้าง foreign key บนตารางใน schema ที่แตกต่างกันในฐานข้อมูลเดียวกันสำหรับแอปพลิเคชันขนาดใหญ่?


13

ฉันกำลังทำงานกับการถ่ายโอนแอปพลิเคชันบนเว็บขนาดใหญ่ / sql ไปยังเซิร์ฟเวอร์เฉพาะ แอปพลิเคชันนี้อยู่ในสคีมาเดียวกับ 70 แพ็คเกจของโค้ดโปรแกรม แอปพลิเคชั่นนี้สร้างขึ้นประมาณ 15 คนในเวลาที่ต่างกัน และมันก็เป็นเรื่องปกติที่เราจะต้องสร้างกุญแจต่างประเทศในตารางอ้างอิงในแบบแผนต่าง ๆ เพราะมันมีความมั่นใจและรักษาฐานข้อมูลได้ดีมากเพราะเราไม่จำเป็นต้องเก็บตารางการอ้างอิงเดียวกันไว้ในแบบแผนต่าง ๆ

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

เป็นความคิดที่ดีหรือไม่ที่ทำเช่นนั้นกับแอพพลิเคชั่นขนาดใหญ่?


13
DBA ของคุณควรถูกไล่ออก
Colin 't Hart

1
พวกเราทุกคนจะกรีดร้องว่า DBA ของคุณเป็นคนปัญญาอ่อนถ้านั่นคือทั้งหมดที่พวกเขาพูด แต่คุณแน่ใจหรือว่าไม่มีบริบทอื่นที่จะโต้แย้ง DBA ของคุณ
มิต

1
บางที DBA กำลังทำสิ่งที่ดีที่สุดที่เขาสามารถทำได้เพื่อสนับสนุนงานที่ไร้สาระที่ devs ทำในการสร้างสิ่งนี้
swasheck

2
@swasheck ในทางกลับกันคุณต้องการให้งานของเขาหลังจากฐานข้อมูลได้สะสมความไม่สอดคล้องกันหลายปีภายใต้ DBA นี้หรือไม่?
Twinkles

@ ริ้วรอยไม่ได้เลย
swasheck

คำตอบ:


6

Bearwith me - ฉันมาจาก SQL Server และเกลียด Oracle แต่ฉันคิดว่าการโต้แย้งยังคงอยู่

สคีมาเป็นสิ่งที่ดีในการแยกตารางออกจากระบบย่อยแบบลอจิคัล คีย์ต่างประเทศรับประกันความถูกต้องของข้อมูล นี่เป็นแนวคิดมุมฉาก - เนื่องจากความสมบูรณ์ของข้อมูลระหว่างระบบย่อยก็เป็นสิ่งที่ต้องมีเช่นกัน การบัญชีและการจัดส่งและข้อมูลกลางของลูกค้าอาจไม่ได้อยู่ในไซโลที่ลูกค้าสามารถลบได้ในขณะที่ใช้ในการบัญชี

ดังนั้นฉันคิดว่าข้อกำหนดของ DBA เป็นสัญญาณของการไร้ความสามารถ ได้โปรดทุกคนสามารถเข้ามาและตอบโต้การโต้เถียงได้ฉันมีความสุข แต่นี่คือวิธีที่ฉันทำบน SQL Server (ถึงแม้ว่านิยามของ schema ของเราคือ IIRC a LITTLE แตกต่างจากนิยาม oracle)


4

ในขณะที่เรียกร้องให้ทำลายข้อ จำกัด กุญแจต่างประเทศโดยไม่มีเหตุผลอย่างละเอียดก็เป็นเรื่องโง่เขลา จะเกิดอะไรขึ้นถ้าสกีมาที่คุณอ้างอิงมีชื่อแตกต่างกันไปในเซิร์ฟเวอร์ใหม่ของคุณ?

ใน Oracle คุณแก้ไขปัญหานี้ได้โดยการสร้าง SYNONYMS สำหรับวัตถุที่อยู่นอกสคีมาปัจจุบัน


1
คุณสามารถใช้คำพ้องความหมายมากเกินไปและทำให้เกิดคำถามว่า "สิ่งนี้หมายถึงอะไร" ดูที่นี่สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับความปลอดภัยประสิทธิภาพและแนวปฏิบัติที่ดีที่สุดstackoverflow.com/a/10042117/851930
kevinsky

3
ไม่สามารถใช้คำพ้องเป็นเป้าหมายของข้อ จำกัด คีย์ต่างประเทศ
Colin 't Hart

คะแนนที่ถูกต้อง และหลักฐานเพิ่มเติมว่าการสร้างข้อความโดยไม่ให้โอกาสผู้อื่นในการโต้แย้งข้อดีและอันตรายนั้นไม่ดี
Twinkles

2

หากคุณมีความต้องการ (พื้นที่ / ความปลอดภัย / อะไรก็ตาม) เพื่อย้ายสคีมาใด ๆ ไปยังฐานข้อมูลอื่นคุณจะไม่สามารถจัดการการอ้างอิงได้อีกต่อไป นั่นอาจเป็นเหตุผลหลักในการขอฆ่าการอ้างอิง


0

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

นอกจากนั้นฉันไม่เห็นประเด็นของ DBA ของคุณ


0

แค่คิดถึงสิ่งนี้: สคีมาของเจ้าของตารางลูกเริ่มสร้างเรกคอร์ดในตารางของมันและป้องกันผู้ใช้สคีมาของตารางพาเรนต์จากการลบเรคคอร์ดจากตารางพาเรนต์โดยไม่รู้ตัว มันเป็นสิ่งที่คาดหวังและชื่นชม?

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