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 tags
ve downloads
. Benzersizliği nasıl zorlayabilirim?
İki şekilde düşündüm:
downloads
birincil anahtar hariç tüm alanları oluşturur . Ben tutuyorumdownloads
's JSON bu yana ve muhtemelen performansını etkileyecektir.- yalnızca
id
birincil 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)
);
timestamp
Sütunu da ekledim , ancak dokunmayacağım için bu bir sorun değil. Bu yüzden her zaman otomatik ve benzersiz olacaktır.