2016-12-09 7 views
6

मैं अपने ऐप के लिए डीबी बनाने का प्रयास कर रहा हूं और एक चीज जिसे मैं करने का सबसे अच्छा तरीका ढूंढना चाहता हूं, मेरे Users के बीच एक से अधिक संबंध बनाना है और Items टेबल।तत्वों की PostgreSQL सरणी जो प्रत्येक एक विदेशी कुंजी हैं

मैं जानता हूँ कि मैं एक तिहाई की मेज, ReviewedItems कर सकते हैं, और स्तंभों एक User आईडी और एक Item आईडी होना है, लेकिन मैं अगर यह Users में एक स्तंभ बनाने के लिए संभव है जानना चाहते हैं, मान लीजिए कि reviewedItems, चलो जो Items पर विदेशी कुंजी वाली एक पूर्णांक सरणी है जो User की समीक्षा की गई है।

यदि PostgreSQL ऐसा कर सकता है, तो कृपया मुझे बताएं! यदि नहीं, तो मैं बस अपना तीसरा टेबल मार्ग नीचे जाऊंगा।

+0

यह एक खराब डिजाइन है, संबंधपरक मॉडलिंग के बारे में पढ़ें। यह भी एक faq है, कृपया अपने शीर्षक गूगल। – philipxy

+1

इस सुविधा को पोस्टग्रेज़ में जोड़ने के लिए पैच रहे हैं, https://blog.2ndquadrant.com/postgresql-9-3-development-array-element-foreign-keys/ (2012) और https: //www.postgresql देखें .org/message-id/CAJvoCuuEgQ% 2Bpjv02rjvQN4o9s4_H3HJMdZdQwss2b0c0-xagEw% 40mail.gmail.com (2017)। उन्हें अभी तक स्वीकार नहीं किया गया है, लेकिन उम्मीद है कि एक दिन। –

उत्तर

7

नहीं, यह संभव नहीं है।

पोस्टग्रेएसक्यूएल संबंध डीबीएमएस है, जो उचित रूप से सामान्यीकृत डेटा मॉडल पर सबसे अधिक कुशलता से परिचालन करता है। Arrays परिभाषा के अनुसार हैं, वे आदेशों का आदेश दिया जाता है - डेटा संरचनाओं से संबंधित नहीं है और इसलिए SQL मानक सरणी तत्वों पर विदेशी कुंजी को परिभाषित करने का समर्थन नहीं करता है, और न ही PostgreSQL करता है।

हालांकि, आप अन्य तालिकाओं में प्राथमिक कुंजी से जोड़ने वाले सरणी तत्वों के साथ एक पूरी तरह से ठीक डेटाबेस बना सकते हैं। हालांकि, उन सरणी तत्वों को विदेशी कुंजी घोषित नहीं किया जा सकता है और इसलिए डीबीएमएस रेफरेंसियल अखंडता को बनाए रखेगा।

+1

आप _can_ एक बाधा ट्रिगर परिभाषित करते हैं जो इसकी जांच करेगा। लेकिन मुझे यकीन नहीं है कि यह सभी मामलों में भरोसेमंद काम करता है। –

+0

@a_horse_with_no_name: क्या आप 'सभी मामलों में भरोसेमंद' के बारे में एक उदाहरण दे सकते हैं? आपका मतलब है कि कभी-कभी ट्रिगर विफल हो सकता है? धन्यवाद। –

+1

@LuanHuynh: मुझे (तकनीकी) विवरण याद नहीं है, लेकिन आखिरी बार मेलिंग सूची पर इस पर चर्चा की गई थी कि किसी ने बताया कि एक संबंधित बाधा ट्रिगर सभी मामलों को पकड़ नहीं सकता है - लेकिन यह अब सच नहीं हो सकता है –

संबंधित मुद्दे