Trong hầu hết các trường hợp, tôi thích sử dụng mã chữ số ngắn và sau đó có bảng tra cứu có văn bản mở rộng. Khi cần thiết, tôi xây dựng bảng enum trong chương trình động từ bảng cơ sở dữ liệu.
Ví dụ: giả sử chúng tôi có trường có nghĩa vụ chứa, loại giao dịch và các giá trị có thể là Bán, Trả lại, Dịch vụ và Layaway. Tôi muốn tạo một bảng kiểu giao dịch với mã và mô tả, làm cho các mã có thể là "SA", "RE", "SV" và "LY" và sử dụng trường mã làm khóa chính. Sau đó, trong mỗi bản ghi giao dịch, tôi sẽ đăng mã đó. Điều này có ít không gian hơn một phím nguyên trong bản ghi và trong chỉ mục. Chính xác cách nó được xử lý phụ thuộc vào công cụ cơ sở dữ liệu nhưng nó không phải là đáng kể ít hiệu quả hơn một phím số nguyên. Và bởi vì nó rất dễ sử dụng. Bạn có thể đổ một bản ghi và dễ dàng nhìn thấy những gì các giá trị và có khả năng nhớ đó là những gì. Bạn có thể hiển thị các mã mà không cần dịch trong đầu ra của người dùng và người dùng có thể hiểu được chúng. Thật vậy, điều này có thể mang lại cho bạn hiệu suất cao hơn các phím số nguyên: Trong nhiều trường hợp, chữ viết tắt là tốt cho người dùng - họ thường muốn viết tắt để hiển thị nhỏ gọn và tránh cuộn - vì vậy bạn không cần phải tham gia vào bảng giao dịch để có được bản dịch.
Tôi chắc chắn KHÔNG lưu trữ giá trị văn bản dài trong mọi bản ghi. Giống như trong ví dụ này, tôi sẽ không muốn phân chia với bảng giao dịch và lưu trữ "Layaway". Không chỉ là điều này không hiệu quả, nhưng nó là khá có thể là một ngày nào đó người dùng sẽ nói rằng họ muốn nó thay đổi để "bán hàng Layaway", hoặc thậm chí một số sự khác biệt tinh tế như "Lay-away". Sau đó, bạn không chỉ phải cập nhật mọi bản ghi trong cơ sở dữ liệu, nhưng bạn phải tìm kiếm thông qua chương trình cho mọi nơi mà văn bản này xuất hiện và thay đổi nó.Ngoài ra, văn bản càng dài, càng có nhiều khả năng một nơi nào đó nằm dọc theo đường kẻ lập trình sẽ đánh vần nó và tạo ra các lỗi không rõ ràng.
Ngoài ra, việc có bảng loại giao dịch cung cấp một nơi thuận tiện để lưu trữ thông tin bổ sung về loại giao dịch. Không bao giờ từng viết mã có nội dung "if whatevercode = 'A' hoặc whatevercode = 'C' hoặc whatevercode = 'X' thì ..." Dù đó là gì làm cho ba mã đó khác với các mã khác, hãy đặt một trường cho nó trong bảng giao dịch và kiểm tra trường đó. Nếu bạn nói, "Vâng, đó là tất cả các mã liên quan đến thuế" hoặc bất cứ điều gì, sau đó tốt, tạo ra một lĩnh vực được gọi là "tax_related" và đặt nó thành true hoặc false cho mỗi giá trị mã khi thích hợp. Nếu không, khi ai đó tạo ra một loại giao dịch mới, họ phải xem xét tất cả các loại đó nếu/hoặc liệt kê và tìm ra loại giao dịch nào sẽ được thêm vào và loại nào không nên. Tôi đã đọc rất nhiều chương trình khó hiểu mà tôi phải tìm ra lý do tại sao một số logic áp dụng cho ba giá trị mã này chứ không phải những giá trị mã khác và khi bạn nghĩ rằng giá trị thứ tư phải được đưa vào danh sách, rất khó để biết liệu nó có mất tích vì nó thực sự khác biệt theo một cách nào đó, hoặc nếu lập trình viên mắc lỗi.
Loại duy nhất tôi không tạo bảng dịch là khi danh sách rất ngắn, không có thêm dữ liệu để giữ, và rõ ràng là bản chất của vũ trụ mà nó không bao giờ thay đổi để các giá trị có thể được mã hóa một cách an toàn. Giống như true/false hoặc positive/negative/zero hoặc male/female. (Và này, ngay cả điều cuối cùng, rõ ràng là có vẻ như, có những người khăng khăng rằng chúng ta hiện nay bao gồm "chuyển giới" và những thứ tương tự.)
Một số người đều nhấn mạnh rằng mỗi bảng đều có một phím số nguyên được tạo tự động. Các khóa như vậy là một lựa chọn tuyệt vời trong nhiều trường hợp, nhưng đối với các danh sách mã, tôi thích khóa alpha ngắn hơn vì những lý do đã nêu ở trên.
Sao chép chính xác: http://stackoverflow.com/questions/229856/ways-to-save-enums-in-database – ChssPly76