2009-05-02 16 views
8

Tôi muốn thêm một số ràng buộc vào tên người dùng varchar trong bảng SQL sao cho nếu tên người dùng tồn tại, không thể tạo tên người dùng trùng lặp trong một trường hợp khác. Tôi có thể làm cái này như thế nào? Cảm ơnLưu trữ một varchar không phân biệt dạng chữ trong PostgreSQL

Chỉnh sửa:
Tôi đang sử dụng PostgreSQL, trợ giúp cú pháp nhỏ sẽ được đánh giá cao.

Trả lời

3

Nếu bảng chưa được điền, bạn có thể xem xét đơn giản chuyển đổi sang chữ hoa hoặc chữ thường chuẩn trước khi thực hiện bất kỳ chèn nào và đặt trường thành khóa chính (hoặc chỉ có ràng buộc duy nhất). Nếu người dùng muốn xem userid của anh ta trong trường hợp anh ta chỉ định điều này có thể là một cột khác trong cơ sở dữ liệu.

Cập nhật: Dựa trên các thẻ được cập nhật, tôi vẫn đề xuất giải pháp mà tôi đã đề xuất là ít phụ thuộc vào một DBMS cụ thể.

+1

+1 Ý tưởng hay. để đảm bảo rằng tên người dùng nằm trong một trường hợp duy nhất. –

+0

-1 xin lỗi. Chỉ có badness có thể phát sinh từ việc lưu trữ một tên người dùng theo hai cách khác nhau khi một trong số chúng có thể được tính toán từ bên kia. Không cần phải phá vỡ bình thường ở đây như là câu trả lời của Endlessdeath. –

22

Từ docs

CREATE UNIQUE INDEX lower_title_idx ON films ((lower(title))); 
3

Do lưu ý rằng PostgreSQL 8.4 (hiện tại phiên bản beta) sẽ có một case-insensitive text type.

+0

Phải chạy câu lệnh 'CREATE EXTENSION citext;' một lần trên mỗi cơ sở dữ liệu mới – deFreitas

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