Tôi có một bảng đại diện cho phim. Các lĩnh vực là :
id (PK), title, genre, runtime, released_in, tags, origin, downloads
.
Cơ sở dữ liệu của tôi không thể bị ô nhiễm bởi các hàng trùng lặp, vì vậy tôi muốn thực thi tính duy nhất. Vấn đề là các bộ phim khác nhau có thể có cùng tiêu đề hoặc thậm chí cùng một lĩnh vực ngoại trừ tags
và downloads
. Làm thế nào để thực thi tính độc đáo?
Tôi nghĩ về hai cách:
- làm cho tất cả các trường trừ
downloads
khóa chính. Tôi đangdownloads
tránh xa vì nó là JSON và nó có thể sẽ ảnh hưởng đến hiệu suất. - chỉ giữ
id
làm khóa chính, nhưng thêm một ràng buộc duy nhất với tất cả các cột khác (ngoại trừ, một lần nữa,downloads
).
Tôi đọc câu hỏi này rất giống nhau, nhưng tôi không hiểu tôi nên làm gì. Hiện tại bảng này không liên quan đến bất kỳ bảng nào khác, nhưng trong tương lai có thể.
Hiện tại tôi có ít hơn 20.000 hồ sơ, nhưng tôi hy vọng con số sẽ tăng lên. Tôi không biết điều này có liên quan đến vấn đề này không.
EDIT: Tôi đã sửa đổi lược đồ và đây là cách tôi sẽ tạo bảng:
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)
);
Tôi cũng đã thêm timestamp
cột, nhưng đó không phải là vấn đề vì tôi sẽ không chạm vào nó. Vì vậy, nó sẽ luôn luôn tự động và duy nhất.