2011-09-23 27 views
6

Tôi đang bắt đầu một dự án và tôi đã quyết định sử dụng Django.Django: Các phương pháp hay nhất cho thiết kế cơ sở dữ liệu

Câu hỏi của tôi liên quan đến việc tạo cơ sở dữ liệu. Tôi đã đọc hướng dẫn và một số cuốn sách và những cuốn sách đó luôn bắt đầu tạo ra các mô hình, và sau đó đồng bộ hóa DataBase. Tôi đã nói, đó là một chút kỳ lạ đối với tôi. Tôi đã luôn luôn bắt đầu với DB, xác định lược đồ, và sau đó tạo ra các Abstractions DB của tôi (các mô hình, các thực thể, vv).

Tôi đã kiểm tra một số ứng dụng có thể cắm bên ngoài và những ứng dụng sử dụng thực tiễn "mô hình đầu tiên" đó.

tôi có thể thấy một số lợi thế cho "mô hình đầu tiên" cách tiếp cận, giống như tính di động, tái triển khai vv

Nhưng tôi cũng thấy một số nhược điểm: làm thế nào để tạo chỉ mục, các loại chỉ số, gây nên, lượt xem, SP, v.v.

Vì vậy, Làm thế nào để bạn bắt đầu một dự án thực tế đời sống?

+1

tôi có kế hoạch schema db của tôi, sau đó thực hiện nó thông qua một mô hình django. Bạn có thể tạo các chỉ mục trong django hoặc thông qua chương trình phụ trợ db của bạn. – dm03514

+0

+1 Tốt "mixin". – santiagobasulto

Trả lời

11

Trình kích hoạt, lượt xem và quy trình được lưu trữ không thực sự là một phần của thế giới Django. Nó có thể được thực hiện để sử dụng chúng, nhưng nó đau đớn và không cần thiết. Các nhà phát triển của Django nhận định rằng logic nghiệp vụ thuộc về Python, không phải trong cơ sở dữ liệu của bạn.

Đối với chỉ số, bạn có thể tạo cho họ cùng với mô hình của bạn (với những thứ như db_indexunique_together, hoặc bạn có thể thêm chúng sau này thông qua sự di cư của cơ sở dữ liệu sử dụng một cái gì đó như Nam.

+0

+1 câu trả lời hay. Cảm ơn. Bây giờ, tôi hỏi: Bạn không bao giờ sử dụng gây nên, SP hoặc quan điểm? Ứng dụng thế giới thực có tồn tại mà không có những thứ đó không? Xin đừng hiểu lầm tôi, tôi mới ở thế giới Python + Django. Tôi đến từ các ứng dụng Java có kiến ​​trúc lớn và chúng tôi dựa vào những thứ DB đó. – santiagobasulto

+1

+1 để sử dụng miền Nam. Bạn có thể quản lý các chỉ mục của mình và các mục tương tự bằng cách sử dụng di chuyển, giúp cuộc sống trở nên dễ dàng hơn nhiều. –

+0

Các nhà phát triển Oracle nhấn mạnh rằng một nguyên tắc không thể chối cãi của thiết kế cơ sở dữ liệu là các khóa chính nên không thay đổi. Họ không thực sự có một lý do lý thuyết tốt cho yêu sách đó. Nó chỉ xảy ra rằng Oracle không hỗ trợ 'ON UPDATE CASCADE'. Tôi nghĩ rằng ý kiến ​​của bạn sẽ khác nếu Django đã hỗ trợ các trình kích hoạt, khung nhìn, các thủ tục lưu sẵn, các ràng buộc kiểm tra và các ràng buộc trì hoãn ngay từ đầu. –

7

Hầu hết chúng ta không viết SQL (ví dụ: tạo chỉ mục, tạo bảng, v.v ...) cho các mô hình của chúng tôi, và thay vào đó dựa vào Django để tạo ra nó cho chúng tôi

Bạn hoàn toàn có thể bắt đầu thiết kế ứng dụng của mình từ lớp mô hình. trên Django để tạo sql cơ sở dữ liệu chính xác cần thiết cho bạn.

Cách bao giờ hết, Django không cung cấp chức năng khác nhau để bạn có thể sao chép các chức năng cơ sở dữ liệu:

  • gây nên: Django code or MySQL triggers
  • chỉ số: có thể được chỉ định với db_index=True
  • ràng buộc duy nhất: unique = True hoặc unique_togther = (('field1', field2'),) cho hạn chế duy nhất composite.

Lợi thế khi sử dụng Django thay vì viết sql là bạn tự trừu tượng ra khỏi cơ sở dữ liệu cụ thể bạn đang sử dụng. Nói cách khác, bạn có thể ở trên SQLite một ngày và chuyển sang PostgresQL hoặc MySQL lần tiếp theo và thay đổi sẽ tương đối không đau.

Ví dụ:

Khi bạn chạy này:

python manage.py syncdb 

Django tự động tạo ra các bảng, các chỉ số, gây nên, vv, nó cần phải hỗ trợ các mô hình bạn đã tạo.Nếu bạn không thoải mái với django tạo cơ sở dữ liệu cho bạn, bạn luôn có thể sử dụng:

python manage.py sqlall 

này sẽ in ra các câu lệnh SQL mà Django sẽ cần phải có để cho các mô hình của nó hoạt động đúng. Có sql lệnh khác để bạn có thể sử dụng:

see: https://docs.djangoproject.com/en/1.3/ref/django-admin/#sql-appname-appname

+0

Tôi nghĩ điều này đúng. Nhưng, tôi luôn nói rằng nó không phổ biến để chuyển đổi cơ sở dữ liệu. Ý tôi là, mọi người coi đây là một lợi thế lớn, nhưng hiếm khi xảy ra. Trả lời tốt BTW +1 – santiagobasulto

+0

Đối với những gì nó có giá trị (và kể từ khi chủ đề này là 2+ tuổi, không nhiều) Tôi chỉ vừa mới chuyển hai dự án tôi đã bắt đầu như SQLite (vì vậy tôi chỉ có thể nhận được chúng và chạy trên một hệ thống tối thiểu) để sử dụng Postgres vì ​​lý do hiệu suất/đa xử lý. – Foon

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