2012-06-09 3 views
5

Tôi chỉ đang thiết kế kiến ​​trúc cơ sở dữ liệu lớn hơn. Nó sẽ chứa một tập hợp các bảng, một số khung nhìn và một số thủ tục được lưu trữ. Vì nó là một cơ sở dữ liệu của loại lớn hơn và trong giai đoạn phát triển rất sớm (thực ra nó vẫn chỉ trong giai đoạn thiết kế ban đầu), tôi cảm thấy cần một bộ kiểm thử để xác minh tính toàn vẹn trong quá trình tái cấu trúc.MySQL: Làm cách nào để kiểm tra cấu trúc cơ sở dữ liệu của tôi (tính nhất quán khóa ngoại, thủ tục được lưu trữ, v.v.)

Tôi khá quen thuộc với các khái niệm thử nghiệm về logic ứng dụng, cả ở phía máy chủ (chủ yếu là PHPUnit) và phía máy khách (Selenium và cơ sở hạ tầng kiểm tra Android).

Nhưng làm cách nào để kiểm tra kiến ​​trúc cơ sở dữ liệu của tôi?

  • Có một số loại chiến lược thử nghiệm tương tự và các công cụ cho cơ sở dữ liệu nói chung và MySQL nói riêng?

  • Làm cách nào để xác minh rằng chế độ xem, thủ tục được lưu trữ, trình kích hoạt của tôi và những gì mà God-know-vẫn còn hợp lệ sau khi tôi thay đổi bảng cơ bản?

  • Tôi có phải gói cơ sở dữ liệu bằng một lớp PHP để cho phép thử nghiệm logic cơ sở dữ liệu (các thủ tục được lưu trữ, trình kích hoạt, v.v ...) không?

Trả lời

2

Để kiểm tra một cơ sở dữ liệu, một số trong những điều bạn cần là:

  1. Một cơ sở dữ liệu thử nghiệm có chứa tất cả các trường hợp của bạn kiểm tra dữ liệu, dữ liệu ban đầu, và vân vân. Điều này sẽ cho phép bạn kiểm tra từ vị trí bắt đầu đã biết mỗi lần.
  2. Một tập hợp các giao dịch (INSERT, DELETE, UPDATE) di chuyển cơ sở dữ liệu của bạn thông qua các trạng thái bạn muốn kiểm tra. Đây có thể được lưu trữ trong cơ sở dữ liệu thử nghiệm.
  3. Bộ kiểm tra của bạn - được biểu thị dưới dạng truy vấn trên cơ sở dữ liệu, thực hiện kiểm tra thực tế kết quả của các hành động của bạn. Các kết quả này sẽ được kiểm tra bởi bộ thử nghiệm của bạn.
  4. Trường hợp ngoại lệ có thể được ném bởi một cơ sở dữ liệu, nhưng nếu bạn nhận được ngoại lệ, bạn có thể có nhiều mối quan tâm nghiêm trọng hơn trong cơ sở dữ liệu và dữ liệu của bạn. Bạn có thể kiểm tra hành động của cơ sở dữ liệu theo cách tương tự, nhưng ngoại trừ "trường hợp góc" này ít cần thiết hơn vì động cơ cơ sở dữ liệu hiện đại khá mạnh mẽ trong nhiệm vụ phục vụ dữ liệu của họ.

Bạn không cần phải bọc cơ sở dữ liệu bằng lớp PHP - nếu bạn làm theo cấu trúc trên, bạn có thể có bộ kiểm tra hoàn chỉnh trong DML và DDL của cơ sở dữ liệu thực tế. .

+0

Câu trả lời hay! Đơn giản ("đơn giản là đẹp") và dễ dàng để bắt đầu nhanh chóng và không cần thiết lập thêm một bộ công cụ. – dbm

4

Có hai mặt của kiểm tra cơ sở dữ liệu.

  • Một đang hướng tới cơ sở dữ liệu thử nghiệm từ logic kinh doanh quan điểm và không nên lo ngại vẫn kiên trì dữ liệu. Ở cấp độ đó có một kỹ thuật nổi tiếng - ORM.Thuật toán trong trường hợp này rất đơn giản: mô tả một mô hình và tạo ra một tập hợp các trường hợp độc đáo hoặc tiêu chí để kiểm tra xem tất cả các thác hành động thực hiện khi chúng tôi nên (có nghĩa là, nếu chúng ta tạo Product và liên kết nó với Category, sau khi lưu một phiên, chúng tôi nhận được tất cả các thực thể được viết bằng DB với tất cả các mối quan hệ bắt buộc giữa). Nhiều điều cần nói: một số ORM đã cung cấp mô-đun thử nghiệm đơn vị (ví dụ: NHibernate) và một số công cụ thậm chí thú vị hơn: cách dễ nhất và nhanh nhất để tạo lược đồ cơ sở dữ liệu, mô hình, trường hợp thử nghiệm: ví dụ: Fluent NHibernate.

  • Thứ hai được định hướng để thử nghiệm lược đồ cơ sở dữ liệu. Vì mục đích đó, bạn có thể xem một thư viện tốt DbUnit. Trích từ trang web chính thức:

DbUnit là một phần mở rộng JUnit (cũng có thể sử dụng với Ant) nhắm vào các dự án cơ sở dữ liệu-driven rằng, trong số những thứ khác, đặt cơ sở dữ liệu của bạn vào trạng thái biết giữa các thử nghiệm chạy. DbUnit có khả năng xuất và nhập dữ liệu cơ sở dữ liệu của bạn đến và từ các bộ dữ liệu XML. Kể từ phiên bản 2.0, DbUnit cũng có thể làm việc với các bộ dữ liệu rất lớn khi được sử dụng trong chế độ phát trực tuyến. DbUnit cũng có thể giúp bạn xác minh rằng dữ liệu cơ sở dữ liệu của bạn phù hợp với một tập hợp các giá trị mong đợi.

Cuối cùng, tôi khuyên bạn nên đọc bài viết "Evolutionary Database Design" từ Martin Fowler's site. Đó là một chút lỗi thời (2003), nhưng vẫn đáng để đọc thực sự.

+0

+1 Câu trả lời hay! Tôi không nhất thiết phải quan tâm đến việc kiểm tra dữ liệu chứa trong cơ sở dữ liệu (chưa). Mẹo 'DbUnit', tôi chắc chắn sẽ xem xét kỹ hơn, mặc dù (có lẽ tôi có thể tích hợp điều này trong máy chủ Jenkins của tôi?). Cảm ơn! – dbm