2011-09-13 37 views
7

Tôi đang cố gắng tạo một cơ sở dữ liệu SQLite mới với các hàng dựa trên một tập hợp dữ liệu, nhưng tôi đang gặp sự cố khi tránh các hàng trùng lặp. Tôi có thể thực hiện điều này bằng Python, nhưng chắc chắn phải có một tùy chọn thiết kế trong SQLite để xử lý việc này.Sự kết hợp độc đáo của các trường trong SQLite?

Tôi cần mỗi hàng tồn tại chỉ cho một kết hợp duy nhất của ba trường văn bản. Nếu tôi làm cho mỗi trường văn bản bị ràng buộc với UNIQUE, thì cả ba trường đều phải là duy nhất. Nhưng thay vào đó tôi sẽ thích sự kết hợp độc đáo của ba dây.

Nói cách khác, những hồ sơ này nên tất cả có thể để tồn tại: (a, a, a) (a, a, b) (a, b, b) (b, b, b)

Nếu tôi làm cho cả ba trường UNIQUE và chèn các hàng đó, chỉ (a, a, a) và (b, b, b) được chèn vào. Tôi có thể nối các trường 1-3 trong Python và sử dụng nó như một khóa chính, nhưng nó có vẻ giống như công việc phụ.

Trả lời

19
CREATE TABLE (col1 typ 
       , col2 typ 
       , col3 typ 
       , CONSTRAINT unq UNIQUE (col1, col2, col3)) 

http://www.sqlite.org/lang_createtable.html

+0

Tuyệt vời, cảm ơn bạn! Những biểu đồ dòng chảy đó giết tôi, nhưng bây giờ nó có ý nghĩa hơn. – Thomas

2

Nếu ba cột thực sự là chìa khóa chính thì bạn có thể làm cho một khóa chính tổng hợp:

create table t (
    a text not null, 
    b text not null, 
    c text not null, 
    -- and whatever other columns you have... 
    primary key (a, b, c) 
) 

Nếu bất kỳ của ba cột của bạn có thể được NULL sau đó bạn muốn muốn thay đổi với ràng buộc duy nhất của Cade.

Các vấn đề liên quan