2012-05-08 28 views
8

Tôi tạo ra bảng t1t2 nối bảng t1t2 như sau:Sự kết hợp của hai cột hạn chế duy nhất

CREATE TABLE t1t2(
id integer primary key, 
t1_id integer, 
t2_id integer, 
foreign key(t1_id) references t1(id), 
foreign key(t2_id) references t2(id)); 

Có thể xác định một hạn chế (hạn chế) cho phép chỉ độc đáo giá trị của tuple (t1_id, t2_id)? Hoặc tôi nên kiểm tra điều này trong ứng dụng?

Trả lời

14
CREATE UNIQUE INDEX idx_twocols ON t1t2(t1_id, t2_id) 

Có thể bạn sẽ cần thêm NOT NULL vào khai báo cho từng cột.

Ngoài ra, bạn có thể chọn để bỏ qua những cột khóa chính (nếu tất cả các bạn đang sử dụng nó cho là độc đáo) và tạo ra các khóa chính trên sự kết hợp của t1_idt2_id:

CREATE TABLE t1t2(
t1_id integer NOT NULL, 
t2_id integer NOT NULL, 
PRIMARY KEY (t1_id, t2_id), 
foreign key(t1_id) references t1(id), 
foreign key(t2_id) references t2(id)); 

khóa chính là một trường hợp đặc biệt của một chỉ số UNIQUE. Sử dụng PRIMARY KEY tổng hợp tiết kiệm cho bạn một cột và một chỉ mục, nhưng yêu cầu ứng dụng của bạn biết cả hai số t1_idt2_id để truy xuất một hàng duy nhất từ ​​bảng.

+0

Nó không chỉ đối với tính độc đáo (Tôi cần cột t1t2.id), nhưng tôi quan tâm trong phương pháp thay thế. Bạn có thể hiển thị bảng? Tôi sẽ chờ một thời gian trước khi chấp nhận để chắc chắn rằng điều này là chính xác, cảm ơn. – xralf

+1

Xem câu trả lời đã chỉnh sửa. –

6

Bạn có thể thêm một ràng buộc duy nhất vào câu lệnh tạo bảng của mình. Đây không phải là khóa chính.

UNIQUE(t1_id, t2_id), 
0

Bạn có thể tạo ra chỉ số chính UNIQUE của bạn với những tùy chọn để giữ khóa chính của bạn và một hạn chế duy nhất SQL Lite New Index option

+0

Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. – mathielo