एक बिक्री के संबंध में, एक उपयोगकर्ता से दूसरी प्रतिक्रिया के लिए, हमारे पास एक अनूठी बाधा वाली एक तालिका है।मुलायम हटाए गए पंक्तियों के साथ अनन्य बाधा
ALTER TABLE feedback
ADD CONSTRAINT unique_user_subject_and_sale
UNIQUE (user_id, subject_id, sale_id)
यह सुनिश्चित करता है कि हमें गलती से प्रतिक्रिया की डुप्लिकेट पंक्तियां न मिलें।
वर्तमान में हम कभी-कभी त्रुटि में छोड़े गए फ़ीडबैक को कड़ी मेहनत करते हैं और उपयोगकर्ता को इसे फिर से छोड़ देते हैं। हम नरम नष्ट करने के लिए बदलना चाहते हैं:
ALTER TABLE feedback
ADD COLUMN deleted_at timestamptz
deleted_at IS NOT NULL
हैं, पर विचार प्रतिक्रिया नष्ट कर दिया, हालांकि हम अभी भी हमारे डीबी में लेखापरीक्षा निशान है (और शायद यह साइट व्यवस्थापक के लिए बाहर ghosted दिखाई देगा)।
हम इस तरह की सॉफ्ट-डिलीट का उपयोग करते समय अपनी अनूठी बाधा कैसे रख सकते हैं? क्या यह अधिक सामान्य CHECK()
बाधा का उपयोग किए बिना एक समग्र जांच करता है (मैंने कभी इस तरह की जांच बाधा का उपयोग करने की कोशिश नहीं की है) का उपयोग किए बिना संभव है।
ऐसा लगता है कि मुझे बाधा के लिए एक WHERE खंड जोड़ने की आवश्यकता है।
मैंने पूर्ण स्कीमा पोस्ट नहीं किया है, लेकिन फीडबैक में एक पूर्णांक (धारावाहिक) प्राथमिक कुंजी है। इसके अतिरिक्त, user_id, sale_id और topic_id को विदेशी कुंजी के रूप में घोषित किया जाता है (और अनुक्रमणिका होती है)। हमें विशिष्टता को एक अतिरिक्त बाधा के रूप में लागू करने की आवश्यकता है। – d11wtq
और हाँ, अद्वितीय इंडेक्स के लिए यह ठीक है कि पंक्तियों को अनुमति देने के लिए केवल हटाए गए_एट टाइमस्टैम्प में भिन्न है ... यह वह चीज है जिसे मैं प्राप्त करने की कोशिश कर रहा था;) – d11wtq
यदि आपके पास है) एक धारावाहिक प्राथमिक कुंजी, और बी) आंशिक जैसा कि आपने वर्णन किया है और जैसा कि मैंने परीक्षण किया है, आपके पास अभी भी "फीडबैक" संदर्भित अन्य तालिकाओं के साथ एक संभावित समस्या है। मान लें कि ऊपर दिए गए उदाहरण में पोस्ट की गई तीन पंक्तियों में धारावाहिक प्राथमिक कुंजी 1, 2, और 3. है। इनमें से कौन सा रेफरेंसिंग टेबल अपनी विदेशी कुंजी के लिए चुनता है? सभी रेफरेंसिंग टेबल * वही * मान चुनने के लिए कैसे जानेंगे? –