2009-03-23 38 views
14

Tôi có một đơn đặt hàng có trạng thái (trong mã là Enum). Câu hỏi đặt ra là làm thế nào để duy trì điều này. Tôi có thể:Enums có sẵn trong bảng cơ sở dữ liệu

  1. Cố định chuỗi trong trường và sau đó ánh xạ trở lại enum về truy xuất dữ liệu.
  2. Kéo dài đây làm số nguyên và sau đó ánh xạ trở lại enum về truy xuất dữ liệu.
  3. Tạo bảng riêng cho giá trị enum và tham gia vào việc truy xuất dữ liệu.

Suy nghĩ?

+0

Một tính năng thú vị của # 1 là, nếu DB không đồng bộ hóa với ứng dụng, ít nhất bạn biết giá trị bạn muốn lưu trữ và sẽ dễ dàng sửa DB nếu giá trị chuỗi của enum đã được thay đổi trong .NET. – mbeckish

Trả lời

8

Nếu đây là danh sách cố định (có vẻ như đó là, nếu không bạn không nên lưu trữ danh sách này dưới dạng enum), tôi sẽ không sử dụng # 1.

Lý do chính để sử dụng # 3 trên # 2 là dễ sử dụng với các tiện ích truy vấn tự phục vụ. Tuy nhiên, tôi thực sự đi với một biến thể của # 2: Lưu trữ các giá trị như là một số nguyên và bản đồ để một enum về thu hồi dữ liệu. Tuy nhiên, cũng tạo một bảng biểu diễn kiểu enum, với giá trị là PK và tên là cột khác. Bằng cách đó, nó đơn giản, nhanh chóng và hiệu quả để sử dụng với mã của bạn, nhưng cũng dễ dàng có được giá trị logic với truy vấn tự phục vụ và các ứng dụng khác không sử dụng mã truy cập dữ liệu của bạn.

+1

+1, tôi cũng thiết lập một FK để đảm bảo rằng số nguyên là một giá trị enum hợp lệ. – LukeH

+0

Có, cộng thêm, có nó như là một FK giúp với khả năng phát hiện cho các công cụ truy vấn tự phục vụ. –

0

hibernate sử dụng số nguyên theo mặc định. nếu enum của bạn sẽ không thay đổi thường xuyên, đây không phải là một ý tưởng tồi, tôi nghĩ vậy.

0

Tôi muốn sử dụng số nguyên được ánh xạ tới giá trị trong một bảng khác với các giá trị. Bạn cũng có thể ánh xạ enum vào cùng một giá trị, nhưng sau đó bạn phải cập nhật ở cả hai vị trí.

0

Tôi cho rằng tùy thuộc vào nơi dữ liệu sẽ được truy lục. Với # 3, bạn có thể truy xuất dữ liệu mà không cần dựa vào giao diện người dùng .NET của mình. Nhưng nó cũng có thể cho bảng cơ sở dữ liệu của bạn để có được ra khỏi đồng bộ với mã enum.

Tùy chọn # 2 chắc chắn là cách hiệu quả nhất để thực hiện việc lưu trữ ... nhưng bộ nhớ lại rẻ.

3

# 3 là "phù hợp nhất" từ cơ sở dữ liệu/quan điểm chuẩn hóa. Thực tế, trạng thái của bạn là một thực thể tên miền được liên kết với thực thể đơn hàng.

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