영화를 나타내는 테이블이 있습니다. 필드는 다음과 같습니다
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
열 을 추가 했지만 열지 않아도 문제가되지 않습니다. 따라서 항상 자동적이고 독창적입니다.