2010-10-26 33 views
13

Tôi hiểu rằng ở Django, ORM không hỗ trợ loại ENUM trong MySQL hoặc PostgreSQL, vì đây là một phần mở rộng MySQL ban đầu, và không di động trên các loại DB khác. Vì vậy, hai tùy chọn là sử dụng đối số "lựa chọn" cho mô hình của bạn hoặc sử dụng tham chiếu khóa ngoài.Mô hình Django - lựa chọn so với khóa ngoại?

Ưu và nhược điểm của các phương pháp này là gì?

Đối với một cái gì đó như giới tính, tôi giả sử bạn sẽ sử dụng "sự lựa chọn", ví dụ:

GENDER_CHOICES = (
    ('M', 'Male'), 
    ('F', 'Female'), 
) 
... 
gender = models.CharField(max_length=1, choices=GENDER_CHOICES) 

Tuy nhiên, đối với một cái gì đó giống như tên nhà nước, lý do và chống lại sử dụng một bảng riêng biệt là gì, và các phím nước ngoài để bàn đó?

state = models.ForeignKey(AustralianState) 

Trong trường hợp nào bạn sẽ sử dụng cái này với người khác?

Chúc mừng, Victor

Trả lời

3

Bạn cũng nên cân nhắc khóa ngoại khi số lượng lựa chọn tiềm năng lớn. Đó là một trong những lý do để xem xét sử dụng FK cho các quốc gia hoặc tiểu bang. Nếu không, bạn đang mã hóa rất nhiều dữ liệu trong mã nguồn của bạn một cách hiệu quả.

+0

Đây có phải là lý do hiệu suất không? Hmm, vì vậy đối với một số lượng lớn các bang, tôi cho rằng một bảng tra cứu FK là con đường để đi? Và sau đó bạn chỉ cần liệt kê các tiểu bang trong một đồ đạc Django? – victorhooi

+0

Nó không phải là quá nhiều lý do hiệu suất - hiệu suất có lẽ là tốt hơn với tuples, trừ khi bạn đang tìm kiếm nhiều hơn một vài nghìn lựa chọn - đó chủ yếu là một vấn đề bảo trì. Trên thực tế Django có rất nhiều lĩnh vực quốc gia/nhà nước được xây dựng trong miền địa phương, tôi tin tưởng. Và tôi cho rằng bạn có thể tạo một StateField mà bạn đã nhập vào các tệp khác. Tiết lộ đầy đủ: Tôi khá chắc chắn rằng các trường quốc gia và tiểu bang mà tôi sử dụng trong các phần của ứng dụng của tôi thực sự sử dụng lựa chọn thay thế. Nhưng FK cũng sẽ là một lựa chọn tốt. –

+0

Tôi muốn thêm rằng trong trường hợp này sử dụng chữ viết tắt của quốc gia và tiểu bang làm khóa ngoại, thay vì số nguyên tăng dần, có ý nghĩa hơn rất nhiều. –

14

Tôi sẽ sử dụng lựa chọn nơi lựa chọn sẽ không thay đổi theo thời gian. Nếu họ muốn, một FK với một mô hình mới sẽ tốt hơn.

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