2011-04-08 29 views
6

Tôi muốn có một bảng SQL với hai cột. Một là chìa khóa vào một bảng khác, cái còn lại chứa một chuỗi ký tự. Ý tưởng là số điện thoại có thể được nhập chính xác (trong trường hợp đó ID vào bảng danh bạ được sử dụng) hoặc làm ký tự đại diện (trong đó chuỗi ký tự được sử dụng).MySQL: Ràng buộc một tập hợp các cột sao cho ít nhất một không phải là NULL

Điều này có nghĩa là một cột trong bảng sẽ giữ giá trị và cột kia sẽ giữ giá trị NULL.

Có thể hạn chế bảng theo cách sao cho một cột phải có giá trị và cột kia phải là NULL? Nếu cả hai cột là NULL hoặc cả hai đều có giá trị thì hàng đó không hợp lệ.

Tôi có cảm giác rằng MySQL không thể làm điều này (vì nó dường như không có hộp công cụ toàn diện khi nói đến các ràng buộc), nhưng nó không thể làm tổn thương khi hỏi.

+0

Điều này có thể giúp (không * chính xác * mặc dù vậy): http://stackoverflow.com/questions/4523351/mysql-constraint-two- cột-so-one-of-them-luôn-là-null – WhyNotHugo

Trả lời

4

Tôi không biết cách thực thi ràng buộc như vậy.

Để giải quyết sự cố, bạn có thể xem xét có hai cột khác nhau: Nếu bạn có một cột cho dữ liệu - chứa id danh bạ hoặc chuỗi ký tự, và cột khác cho kiểu dữ liệu - hoặc 'chính xác' hoặc 'ký tự đại diện '-, bạn có thể đặt ràng buộc NOT NULL cho cả hai cột. Một nhược điểm rõ ràng là bạn không thể có một ràng buộc FK đối với bảng danh bạ nữa.

+0

Tôi sẽ chấp nhận điều này, nhưng thiết kế thực tế tôi đã đi là hơi khác nhau. Thay vào đó, tôi đã thêm trường Loại có thể là chính xác hoặc ký tự đại diện và nội dung của trường Khóa sẽ trỏ tới danh bạ hoặc bảng ký tự đại diện mới, tùy thuộc vào giá trị của trường loại. Loại và khóa là khóa duy nhất tổng hợp, do đó, khóa có thể chứa cùng một giá trị hai lần (một lần cho một khóa cho danh bạ điện thoại và một lần cho một khóa cho các ký tự đại diện). – GordonM

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