Ich habe eine Tabelle mit Filmen. Die Felder sind :
id (PK), title, genre, runtime, released_in, tags, origin, downloads
.
Meine Datenbank kann nicht durch doppelte Zeilen verschmutzt werden, daher möchte ich die Eindeutigkeit erzwingen. Das Problem ist, dass verschiedene Filme den gleichen Titel oder sogar die gleichen Felder außer tags
und haben können downloads
. Wie kann man die Einzigartigkeit erzwingen?
Ich dachte an zwei Möglichkeiten:
- Machen Sie alle Felder außer dem
downloads
Primärschlüssel. Ich halte mich zurück,downloads
da es JSON ist und es wahrscheinlich die Leistung beeinflussen wird. - Nur
id
als Primärschlüssel behalten , aber mit allen anderen Spalten eine eindeutige Einschränkung hinzufügen (außer wiederdownloads
).
Ich habe diese Frage gelesen , die sehr ähnlich ist, aber ich habe nicht ganz verstanden, was ich tun soll. Derzeit ist diese Tabelle nicht mit anderen Tabellen verwandt, könnte aber in Zukunft sein.
Im Moment habe ich etwas weniger als 20.000 Datensätze, aber ich erwarte, dass die Zahl wächst. Ich weiß nicht, ob dies für das Thema relevant ist.
BEARBEITEN: Ich habe das Schema geändert und hier ist, wie ich die Tabelle erstellen würde:
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)
);
Ich habe auch die timestamp
Spalte hinzugefügt , aber das ist kein Problem, da ich sie nicht berühren werde. So wird es immer automatisch und einzigartig sein.