2009-10-23 35 views
16

Tôi có một số enums trong đơn đăng ký được sử dụng làm loại thuộc tính trong một số lớp.Cách tốt nhất để lưu trữ các giá trị enum trong cơ sở dữ liệu - String hoặc Int

Cách tốt nhất để lưu trữ các giá trị này trong cơ sở dữ liệu là String hoặc Int là gì?

FYI, tôi cũng sẽ ánh xạ các loại thuộc tính này bằng cách sử dụng chế độ Nhibernate thông thạo.

Mẫu mã:

public enum ReportOutputFormat 
{ 
    DOCX, 
    PDF, 
    HTML 
} 

public enum ReportOutputMethod 
{ 
    Save, 
    Email, 
    SaveAndEmail 
} 

public class ReportRequest 
{ 
    public Int32 TemplateId 
    { 
     get { return templateId; } 
     set { templateId = value; } 
    } 
    public ReportOutputFormat OutputFormat 
    { 
     get { return outputFormat; } 
     set { outputFormat = value; } 
    } 

    public ReportOutputMethod OutputMethod 
    { 
     get { return outputMethod; } 
     set { outputMethod = value; } 
    } 
} 

Trả lời

13

Cả hai đều có lợi thế. Nếu bạn lưu trữ chúng bằng giá trị Integer của chúng, thì bạn phải cẩn thận chỉnh sửa điều tra của bạn sau này trong dự án của bạn. Nếu bằng cách nào đó các giá trị số nguyên cho các phần tử đếm được định nghĩa lại, tất cả dữ liệu của bạn sẽ bị hỏng. Nhưng nó sẽ là kiểu dữ liệu nhanh nhất/nhỏ nhất để sử dụng.

Nếu bạn sử dụng biểu diễn chuỗi, bạn sẽ không gặp vấn đề giá trị được xác định lại miễn là bạn không thay đổi tên của các phần tử trong liệt kê. Tuy nhiên, chuỗi chiếm nhiều không gian hơn trong cơ sở dữ liệu của bạn và có thể tốn kém hơn một chút khi sử dụng.

Cuối cùng, không có người chiến thắng dứt khoát tôi đoán.

Sửa

Sử dụng giá trị Integer có thể là cách tốt nhất. Bạn có thể khắc phục vấn đề 'giá trị được xác định lại' cho các phần tử liệt kê, bằng cách tự đặt giá trị cho từng phần tử. Thực sự là một gợi ý tốt từ Kevin.

+2

Tôi không thể tin rằng bạn thậm chí còn xem xét một nửa giới thiệu phương pháp tiếp cận có thể dễ dàng dẫn đến hỏng dữ liệu! Chỉ cần ra khỏi một mối quan tâm tưởng tượng cho compactness? Nếu mối quan tâm nhỏ gọn là mạnh mẽ, thêm một trường int vào enum! KHÔNG BAO GIỜ dựa vào thứ tự. Đọc Java hiệu quả. –

+13

Tôi thực sự không thấy nơi tôi đề xuất bất cứ điều gì phải trung thực. Tôi chỉ nêu rõ những ưu điểm và nhược điểm. Mặc dù bạn có một điểm, không muốn dựa vào giá trị thứ tự, bạn có thể muốn biến 'lửa' đó trong nhận xét của bạn xuống một bậc;) – pyrocumulus

+0

@KevinBourrillion "Thêm một trường int vào enum" nghĩa là gì? – John

16

Việc thực hiện rất dễ dàng trong cả hai trường hợp, và sự khác biệt hiệu suất nên là nhỏ.

Do đó, hãy thực hiện ý nghĩa: Các chuỗi có ý nghĩa hơn số, vì vậy hãy sử dụng Chuỗi.

+5

+1 Tôi đã làm việc với hàng triệu bản ghi. Chỉ sau đó tôi nhận ra ý nghĩa là quan trọng hơn rất nhiều so với "compactness". – Sarmaad

+0

Đôi khi hiệu suất là quan trọng hơn, vì sợ rằng ý nghĩa bị mất. Vì vậy, chọn chất độc của bạn và xác định có giá trị hơn. – Suncat2000

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