क्या एक दृष्टिकोण को अपने स्वयं के विदेशी प्रमुख बाधाओं की आवश्यकता है?


10

डिस्क्लेमर: मैं एक प्रोग्रामर हूं, डीबीए नहीं, इसलिए मेरे साथ सहन करें ...

मेरा एक विचार है कि मैं केवल 2 संस्थाओं को एक साथ मैप करने के लिए उपयोग करता हूं। मुझे इसे प्राप्त करने के लिए कुछ अलग-अलग तालिकाओं के बीच जुड़ना होगा:

CREATE OR REPLACE VIEW V_SCREENING_GROUP_SITES AS (
SELECT SG.SCREENING_GROUP_ID, V.SITE_ID
FROM SCREENING_GROUP SG, VISIT V, VISIT_DATE VD
WHERE VD.VISIT_ID = V.VISIT_ID 
AND V.SCREENING_GROUP_ID = SG.SCREENING_GROUP_ID);

ऊपर सिर्फ संदर्भ के लिए है, उस बारे में बहुत ज्यादा चिंता न करें। मुझे अपने नए V_SCREENING_GROUP_SITES दृश्य (SCREENING_GROUP_ID और SITE_ID) फ़ील्ड को SCREEN_GROUP और SITE तालिकाओं के लिए विदेशी कुंजी के रूप में व्यवहार करने का तरीका जानने की आवश्यकता है। या इससे भी फर्क पड़ता है?

अगर यह एक मेज होती तो मैं करता:

ALTER TABLE V_SCREENING_GROUP_SITES
ADD CONSTRAINT FK_SCREENING_GROUP_ID
FOREIGN KEY (SCREENING_GROUP_ID)
REFERENCES SCREENING_GROUP.SCREENING_GROUP_ID;
...

लेकिन चूंकि यह एक ऐसा दृश्य है जो स्पष्ट रूप से काम नहीं करता है। मुझे एक वैकल्पिक दृश्य सिंटैक्स नहीं मिला जो FKs को सेट करने के लिए काम करता है। मुझे क्या करना चाहिए?

(यह एक MySQL डाटाबेस है)

जवाबों:


12

एक दृश्य एक तार्किक तालिका है जो एक या अधिक भौतिक तालिकाओं पर आधारित है। यदि अंतर्निहित तालिकाओं में विदेशी कुंजी संबंध हैं, तो वे दृश्य में प्रकट होंगे। दृश्य पूरी तरह से उन तालिकाओं पर निर्भर होते हैं जिनसे वे व्युत्पन्न होते हैं, इसलिए उनके लिए विदेशी कुंजी जोड़ने की कोशिश करना संभव नहीं है।


1
महान, इसलिए मुझे कुछ भी करने की आवश्यकता नहीं है (एफके पहले से ही अंतर्निहित तालिकाओं में बाधा है)। जवाब के लिए धन्यवाद।
ट्रॉय

1
मुझे लगता है कि यह बनाने की बात है। जब तक अंतर्निहित तालिकाओं में FKs है, तब तक आपको दृश्य पर FK की आवश्यकता नहीं होनी चाहिए।
डेरेक डाउनी

2
@DTest - चेक, अद्वितीय और विदेशी कुंजी बाधाओं को देखने के लिए (विशेषकर यदि डेटा को एकत्र करता है) सहित बाधाओं को लागू करने में सक्षम होना बहुत उपयोगी हो सकता है। यह सिर्फ ऐसा होता है कि कोई भी वर्तमान आरडीबीएमएस विचारों पर अड़चन नहीं डालता, भले ही वे आपको उन्हें बनाने की अनुमति दें।
जैक का कहना है कि topanswers.xyz

@JackDouglas बिल्कुल सही! वास्तव में मैं यहां यह जानने की कोशिश कर रहा था कि क्या MySQL इस तरह की सुविधा का समर्थन करता है।
स्टिजन डे विट

3

शब्द के सख्त अर्थ में, नहीं, आप विचारों पर विदेशी कुंजी सेट नहीं कर सकते। यहाँ क्यों है:

InnoDB MySQL के लिए एकमात्र अंतर्निहित स्टोरेज इंजन है जिसमें विदेशी कुंजियाँ हैं। किसी भी InnoDB तालिका में पंजीकृत किया जाएगा information_schema.tables इंजन = 'InnoDB' के साथ।

दृश्य, जबकि info_schema.tables में पंजीकृत है, में एक पूर्ण भंडारण इंजन है। MySQL में ऐसी कोई व्यवस्था नहीं है जिसमें किसी भी टेबल पर विदेशी कुंजियाँ हों जिनके पास अपरिभाषित स्टोरेज इंजन हो।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.