Có một trò đùa tôi nghe được một lúc:
Q Làm thế nào để một lập trình viên BASIC đếm đến 10?
Một 1,2,3,4,5,6,7,8,9,10
Q Làm thế nào để một lập trình viên C đếm đến 10?
A 0,1,2,3,4,5,6,7,8,9
Q Làm thế nào để một DBA đếm đến 10?
A 0,1, nhiều
Sự thật đằng sau trò đùa này là một khi bạn có hai (hoặc nhiều hơn) cùng một thứ trong cấu trúc cơ sở dữ liệu (cột hoặc bảng), bạn đã làm sai.
Một lược đồ trông giống như:
+----------+
| id |
| name |
| phone1 |
| phone2 |
| |
+----------+
Có sai không vì bạn sẽ đặt số điện thoại thứ ba ở đâu nếu ai đó có nó?
Điều tương tự cũng áp dụng cho các bảng. Đây cũng là một điều xấu khi sửa đổi lược đồ trong thời gian chạy, mà "bảng mới cho mỗi danh sách" dường như ngụ ý. (Liên quan: MVC4: Làm thế nào để tạo mô hình trong thời gian chạy? )
Và do đó, giải pháp là tạo một danh sách việc cần làm bao gồm hai bảng. Có hai thứ bạn có - danh sách và vật phẩm.
Vì vậy, hãy tạo một cấu trúc bảng phản ánh điều này:
+----------+ +-------------+
| List | | Task |
+----------+ +-------------+
| id (pk) <---+ | id (pk) |
| name | +---+ listid (fk) |
| | | desc |
| | | |
+----------+ +-------------+
Danh sách này có id (khóa chính cho danh sách) và tên. Tác vụ có id (khóa chính) listid (khóa ngoại) và mô tả nhiệm vụ. Khóa ngoại liên quan đến khóa chính của bảng khác.
Tôi sẽ chỉ ra rằng điều này không bắt đầu bao gồm tất cả các khả năng trong các yêu cầu khác nhau đối với phần mềm và cấu trúc bảng để hỗ trợ nó. Đã hoàn thành, ngày đáo hạn, lặp lại, v.v ... đây là tất cả các cấu trúc bổ sung có thể sẽ cần được xem xét khi thiết kế bảng. Điều đó nói rằng, nếu cấu trúc bảng không phải là cấu trúc được chuẩn hóa một cách thích hợp (hoặc nhận ra sự đánh đổi mà bạn đã thực hiện vì nó không được chuẩn hóa), bạn sẽ gặp nhiều vấn đề đau đầu sau đó.
Bây giờ, tất cả những gì liên quan đến việc viết này như là một cơ sở dữ liệu quan hệ. Nhưng đó không phải là loại cơ sở dữ liệu duy nhất ngoài kia. Nếu bạn coi một danh sách là một tài liệu, cơ sở dữ liệu nosql theo kiểu tài liệu cũng có thể đưa ra một cách tiếp cận không sai.
Trong khi tôi sẽ không đi sâu vào nó quá xa, có rất nhiều hướng dẫn ngoài kia cho các danh sách việc cần làm trong đi văng. Một ứng dụng được tìm thấy là một ứng dụng Danh sách tác vụ đơn giản trong CouchDB . Một cái khác xuất hiện trong wiki couchdb: Lược đồ đề xuất cho danh sách việc cần làm .
Theo cách tiếp cận phù hợp cho một chiếc ghế dài, mỗi danh sách là một tài liệu JSON được lưu trữ trong cơ sở dữ liệu. Bạn chỉ cần đặt danh sách trong một đối tượng JSON và đặt nó vào cơ sở dữ liệu. Và sau đó bạn đọc từ cơ sở dữ liệu.
JSON có thể trông giống như:
[
{"task":"get milk","who":"Scott","dueDate":"2013-05-19","done":false},
{"task":"get broccoli","who":"Elisabeth","dueDate":"2013-05-21","done":false},
{"task":"get garlic","who":"Trish","dueDate":"2013-05-30","done":false},
{"task":"get eggs","who":"Josh","dueDate":"2013-05-15","done":true}
]
(từ việc tạo danh sách mua sắm với tệp json trên Stack Overflow).
Hoặc một cái gì đó tiếp cận điều đó. Có một số lưu giữ hồ sơ khác mà chiếc ghế dài là một phần của tài liệu.
Vấn đề là, đây không phải là cách tiếp cận sai và danh sách việc cần làm trong cơ sở dữ liệu tài liệu có thể hoàn toàn phù hợp với những gì bạn đang cố gắng thực hiện với ít chi phí khái niệm về cách thực hiện.