मेरे पास फिल्मों का प्रतिनिधित्व करने वाली एक टेबल है। क्षेत्र हैं:
id (PK), title, genre, runtime, released_in, tags, origin, downloads
।
मेरे डेटाबेस को डुप्लिकेट पंक्तियों द्वारा प्रदूषित नहीं किया जा सकता है, इसलिए मैं विशिष्टता को लागू करना चाहता हूं। समस्या यह है कि अलग-अलग फिल्मों में एक ही शीर्षक हो सकता है, या एक ही क्षेत्र को छोड़कर tags
और downloads
। विशिष्टता कैसे लागू करें?
मैंने दो तरीके से सोचा:
downloads
प्राथमिक कुंजी को छोड़कर सभी फ़ील्ड बनाएं । मैंdownloads
JSON के बाद से बाहर रख रहा हूं और यह संभवतः प्रदर्शन को प्रभावित करेगा।- केवल
id
प्राथमिक कुंजी के रूप में रखें, लेकिन अन्य सभी स्तंभों (छोड़कर, फिर सेdownloads
) के साथ एक अद्वितीय बाधा जोड़ें ।
मैंने यह प्रश्न पढ़ा जो बहुत समान है, लेकिन मुझे यह समझ में नहीं आया कि मुझे क्या करना चाहिए। वर्तमान में यह तालिका किसी अन्य तालिका से संबंधित नहीं है, लेकिन भविष्य में हो सकती है।
फिलहाल मेरे पास 20,000 से कम रिकॉर्ड हैं, लेकिन मुझे उम्मीद है कि संख्या बढ़ेगी। मुझे नहीं पता कि यह मुद्दे के लिए कुछ प्रासंगिक है।
संपादित करें: मैंने स्कीमा को संशोधित किया है और यहां बताया गया है कि मैं तालिका कैसे बनाऊंगा:
CREATE TABLE movies (
id serial PRIMARY KEY,
title text NOT NULL,
runtime smallint NOT NULL CHECK (runtime >= 0),
released_in smallint NOT NULL CHECK (released_in > 0),
genres text[] NOT NULL default ARRAY[]::text[],
tags text[] NOT NULL default ARRAY[]::text[],
origin text[] NOT NULL default ARRAY[]::text[],
downloads json NOT NULL,
inserted_at timestamp NOT NULL default current_timestamp,
CONSTRAINT must_be_unique UNIQUE(title,runtime,released_in,genres,tags,origin)
);
मैंने timestamp
कॉलम भी जोड़ा , लेकिन यह कोई समस्या नहीं है क्योंकि मैं इसे नहीं छूऊंगा। तो यह हमेशा स्वचालित और अद्वितीय होगा।