2009-09-18 32 views
8

lĩnh vực boolean của một bảng có thể được đặt tên bằng cách sử dụng tích cực vs các tiêu cực ...tên trường boolean tích cực hay tiêu cực

ví dụ, gọi một lĩnh vực:

"ACTIVE" , 1=on/0=off 
or 
"INACTIVE" , 0=on/1=off 

Câu hỏi: Có cách nào thích hợp để đưa ra quyết định thiết kế bảng này hay không hoặc tùy ý?


Ví dụ cụ thể của tôi là bảng thông báo có trường bool (riêng tư/công khai). Trường này sẽ được đặt bằng hộp kiểm biểu mẫu khi người dùng nhập thư mới. Có lợi ích trong việc đặt tên trường "công khai" so với "riêng tư" không?

cảm ơn.

+0

Bạn nên tạo một bảng khác và triển khai mối quan hệ khóa ngoại - xem câu trả lời của tôi để biết chi tiết. –

Trả lời

19

Tôi luôn thích tên tích cực hơn, để tránh âm kép trong mã. "Không phải là không hoạt động" thường gây ra cho một đôi khi đọc. "Không hoạt động" luôn có thể được viết là "if (! Active)" trong khi tận dụng các ngữ nghĩa ngôn ngữ được tích hợp sẵn.

15

sở thích cá nhân của tôi:

  • Sử dụng tiền tố như "Có", "Có", vv cho các lĩnh vực Boolean để làm cho mục đích của họ rõ ràng.
  • Luôn đặt tên biến trong số khẳng định. Đối với Active/Inactive, tôi sẽ đặt tên là IsActive.
  • Không tạo một trường bit rỗng, trừ khi bạn thực sự có mục đích cụ thể khi làm như vậy.

Trong trường hợp sử dụng cụ thể của bạn, trường phải được đặt tên là IsPublic hoặc IsPrivate - bất kỳ tên nào sẽ dẫn đến câu trả lời đúng khi người dùng đánh dấu vào hộp kiểm.

+0

+1 cho "hộp kiểm đúng" bằng "cơ sở dữ liệu đúng" –

+0

... và điều gì về âm bản tích hợp của thiết kế như "Đường khóa"? Thiết bị không hoạt động nếu đường khóa bị khóa cao. isLockedOut có nghĩa là khá nhiều isDeviceInactive. Nhưng khi tôi kiểm tra dòng khóa, tôi quan tâm đến isLockoutActive ... hoặc, isWorkingCorrectly hoặc isInFaultMode? –

+0

SF, tôi không chắc chắn tôi đang theo logic của bạn ở đây, nhưng tôi nghĩ rằng bạn có thể đã vượt quá mục đích của một giá trị Boolean và có thể cần một trường Trạng thái, với danh sách tra cứu các giá trị trạng thái có thể. Câu trả lời từ OMG Ponies là câu trả lời đúng trong trường hợp đó. – richardtallent

1

Luôn sử dụng tên tích cực.

Nếu sử dụng tên phủ định, bạn rất nhanh chóng bị loại bỏ gấp đôi. Không phải là sự phủ nhận kép là phẫu thuật tên lửa, nhưng đó là một chu kỳ não và những thứ đó có giá trị :)

1

Luôn sử dụng tích cực.

Nó đơn giản hơn.

Sử dụng từ khóa đến cực đoan hợp lý: nếu InActive tốt hơn Active, thì tại sao không InInActive hoặc InInInActive?

Bởi vì nó sẽ ít đơn giản hơn.

1

Cách thích hợp để xử lý các tình huống này là tạo bảng để chứa các giá trị được liên kết với cột và tạo mối quan hệ khóa ngoài giữa hai bảng.IE:

WIDGETS bảng:

  • WIDGET_ID
  • WIDGET_STATUS (fk)

WIDGET_STATUS_CODES bảng:

  • WIDGET_STATUS_CODE (pk)
  • DESCRIPTION

Nếu có thể, WIDGET_STATUS_CODE sẽ là khóa tự nhiên (IE: ACT cho "Hoạt động", INA cho "Không hoạt động"). Điều này sẽ làm cho hồ sơ có thể đọc được nhiều người hơn, nhưng không phải lúc nào cũng có thể để bạn sử dụng khóa nhân tạo/thay thế (như số tự động/chuỗi/v.v.).

Bạn muốn làm điều này vì:

  • Đó là có thể đọc được những gì trạng thái chỉ (đó là câu hỏi ban đầu)
  • bằng chứng trong tương lai trong sự cần thiết phải xác định/sử dụng nhiều trạng thái
  • Cung cấp toàn vẹn referencial nên ai đó không thể đặt giá trị thành 2, 3, 4, v.v.
  • Không gian rẻ; có gì hiệu quả về việc cho phép dữ liệu xấu
+0

Đây là FAR kém hiệu quả hơn một trường bit đơn giản. Lý do để làm điều này so với một trường bit đơn giản cho một câu trả lời Boolean đơn giản là gì? – richardtallent

+1

(a) Khả năng đọc của con người đối với các bảng trống không phải là IMHO, một mục tiêu của thiết kế cơ sở dữ liệu tốt. Nếu không, chúng tôi sẽ không bao giờ sử dụng khóa thay thế, và cơ sở dữ liệu của chúng tôi sẽ dành toàn bộ cuộc sống của họ làm so sánh chuỗi. – richardtallent

+0

(b) Tôi đồng ý về nguyên tắc w/r/t trong tương lai-proofing cho nhiều giá trị hơn, nhưng CHỈ nếu có một tình trạng có thể là NEITHER của các lựa chọn hiện có. Đặt tên trường giống như "Trạng thái" khi nó thực sự phải * chỉ * với chế độ Hoạt động/Không hoạt động mời gọi lạm dụng trong tương lai bằng các thuộc tính trực giao shoehorning. Cuối cùng, điều này buộc thiết kế hướng tới một mối quan hệ m: n giống như một đám mây thẻ được đánh dấu lỏng lẻo. Tôi không chống lại các đám mây thẻ nói chung, nhưng chúng phá vỡ bình thường hóa, và có những hậu quả cho việc thiết kế. – richardtallent

2

tôi sẽ không đồng ý với một số các câu trả lời khác nhưng chắc chắn tránh được những câu trả lời không chính xác mà không phải là để đưa vào âm đôi luôn

-1

Cố gắng tránh các lĩnh vực boolean trong cơ sở dữ liệu alltogether.

Một, RM có cách tốt hơn để biểu diễn thông tin có giá trị thực hơn là thông qua các trường boolean: thông qua sự hiện diện của một bộ tuple trong bảng.

Hai trường boolean là các phân biệt đối xử rất xấu khi truy vấn. Nó gần như hoàn toàn điên rồ để lập chỉ mục cho họ, vì vậy khi truy vấn, sự hiện diện của các trường boolean không mang lại lợi ích gì cả.

+1

Các giá trị logic có thể là các phân biệt đối xử kém, nhưng điều đó phụ thuộc * hoàn toàn * vào việc phân phối các giá trị 0 và 1. Giống như bất kỳ chỉ mục nào, lập chỉ mục trường bit thêm phần tử của bảng tra cứu nếu nó không phải là cột thứ tự đầu tiên trong chỉ mục nhóm (mà tôi không đề xuất), nhưng lập chỉ mục * không * tránh quét bảng, có * là * một lợi ích hiệu suất. Trong khi đó, việc sử dụng FK sang bảng khác với một giá trị duy nhất có giới hạn hiệu suất chính xác như trường bit được lập chỉ mục, và vì lý do tương tự, nhưng tham gia thêm chi phí bổ sung đáng kể so với tra cứu chỉ mục bit. – richardtallent

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