2013-10-30 22 views
5

Joe Celko (sql guru) nói rằng chúng ta không nên sử dụng các kiểu dữ liệu độc quyền và đặc biệt hạn chế những thứ cấp máy như bit hoặc byte vì SQL-Server sử dụng ngôn ngữ cấp cao. Về cơ bản, nguyên tắc mô hình hóa dữ liệu là trừu tượng hóa dữ liệu. Vì vậy, sành điệu các khuyến nghị trên cho các lĩnh vực như "IsActive" vv, những gì sẽ là sự lựa chọn đúng cho các loại dữ liệu, một trong đó là rất xách tay và một trong đó là giải mã rõ ràng bởi các lớp kết thúc trước? Cảm ơn!Trình bày dữ liệu "Cái gì đó" trong SQL-Server

+2

Có, giả sử chỉ có hai giá trị có thể là "Có" và "Không". –

+0

'Boolean' có vẻ hợp lý với tôi mặc dù việc triển khai của nó khác nhau giữa các phương ngữ SQL. –

+1

@Jarvis. . . Có vẻ như một ý tưởng hay nếu cơ sở dữ liệu của bạn hỗ trợ 'boolean'. Không phải tất cả. Câu hỏi của bạn sẽ tốt hơn nếu nó nói: "Tôi muốn đại diện cho cờ boolean trong một cơ sở dữ liệu cụ thể. Cách tốt nhất là gì?" - sau đó cũng gắn thẻ câu hỏi với cơ sở dữ liệu bạn đang sử dụng. –

Trả lời

4

Trong SQL Server, tôi sẽ dùng loại dữ liệu BIT phù hợp với yêu cầu trừu tượng mà bạn mô tả: nó có thể có 2 giá trị (ánh xạ tới Có và Không theo quy ước được sử dụng rộng rãi của Yes = 1 và No = 0). Nó có thể có giá trị NULL bổ sung nếu muốn.

Nếu có thể, sử dụng các kiểu dữ liệu gốc có tất cả các lợi ích về hiệu suất, sự rõ ràng và dễ hiểu đối với người khác. Chưa kể đến nguyên tắc không quá phức tạp khi bạn có thể giữ chúng đơn giản.

3

Máy chủ SQL không có loại dữ liệu Boolean để Boolean không tham gia vào câu hỏi. BIT là một số số loại chấp nhận các giá trị 0 và 1 cũng như null. Tôi thường thích loại CHAR có ràng buộc CHECK cho phép các giá trị như "Y"/"N" hoặc "T"/"F". CHAR ít nhất cho phép bạn mở rộng tập hợp các giá trị thành nhiều hơn hai giá trị nếu bạn muốn.

BIT có bất lợi tiềm năng là nó không chuẩn, không đặc biệt thân thiện với người dùng và cũng không được người dùng SQL Server hiểu rõ. Các ngữ nghĩa của BIT rất đặc biệt trong SQL Server và thậm chí cả các sản phẩm của Microsoft đối xử với BIT theo những cách không phù hợp.

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