Filmleri temsil eden bir masam var. Alanlar:
id (PK), title, genre, runtime, released_in, tags, origin, downloads.
Veritabanım yinelenen satırlar tarafından kirletilemez, bu yüzden benzersizliği zorlamak istiyorum. Sorun farklı film aynı başlığa sahip olabilir, hatta aynı alanlar hariç olmasıdır tagsve downloads. Benzersizliği nasıl zorlayabilirim?
İki şekilde düşündüm:
downloadsbirincil anahtar hariç tüm alanları oluşturur . Ben tutuyorumdownloads's JSON bu yana ve muhtemelen performansını etkileyecektir.- yalnızca
idbirincil anahtar olarak saklayın , ancak diğer tüm sütunlara (yine hariçdownloads) benzersiz bir kısıtlama ekleyin .
Çok benzer olan bu soruyu okudum , ama ne yapmam gerektiğini tam olarak anlamadım. Şu anda bu tablo diğer tablolarla ilgili değildir, ancak gelecekte olabilir.
Şu anda 20.000'den az kayıtım var, ancak sayının artmasını bekliyorum. Bunun konuyla biraz alakalı olup olmadığını bilmiyorum.
DÜZENLEME: Şemayı değiştirdim ve işte tabloyu nasıl oluşturacağım:
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)
);
timestampSütunu da ekledim , ancak dokunmayacağım için bu bir sorun değil. Bu yüzden her zaman otomatik ve benzersiz olacaktır.