Tôi đang ở ngã tư quyết định xem thẻ có nên là tài nguyên của riêng họ hay thuộc tính lồng nhau của ghi chú hay không. Câu hỏi này chạm một chút vào thiết kế RESTful và lưu trữ cơ sở dữ liệu.Thẻ có nên là tài nguyên của chính nó hay thuộc tính lồng nhau không?
Bối cảnh: Tôi có tài nguyên ghi chú. Người dùng có thể có nhiều ghi chú. Mỗi ghi chú có thể có nhiều thẻ.
Mục tiêu chức năng: tôi cần phải tạo ra các tuyến đường để làm như sau:
1) Fetch tất cả các thẻ sử dụng. Một cái gì đó như: GET /users/:id/tags
2) Xóa (các) thẻ được liên kết với ghi chú.
3) Thêm thẻ vào một ghi chú cụ thể.
Mục tiêu dữ liệu/hiệu suất
1) Tìm nạp thẻ người dùng phải nhanh. Điều này là dành cho mục đích "tự động đề xuất"/"tự động hoàn tất".
2) Ngăn chặn các bản sao (càng nhiều càng tốt). Tôi muốn thẻ được sử dụng lại càng nhiều càng tốt cho mục đích có thể truy vấn dữ liệu theo thẻ. Ví dụ: tôi muốn giảm thiểu các tình huống mà người dùng nhập một thẻ như "siêu anh hùng" khi thẻ "siêu anh hùng" đã tồn tại.
Điều đó đang được nói, cách tôi nhìn thấy nó, có hai phương pháp lưu trữ thẻ trên một tài nguyên lưu ý:
1) thẻ là tài sản lồng nhau. Ví dụ:
type: 'notes',
attributes: {
id: '123456789',
body: '...',
tags: ['batman', 'superhero']
}
2) thẻ làm tài nguyên của riêng chúng. Ví dụ:
type: 'notes',
data: {
id: '123456789',
body: '...',
tags: [1,2,3] // <= Tag IDs instead of strings
}
Một trong hai cách tiếp cận trên có thể hoạt động nhưng tôi đang tìm giải pháp cho phép khả năng mở rộng và nhất quán dữ liệu (tưởng tượng triệu ghi chú và mười triệu thẻ). Tại thời điểm này, tôi đang nghiêng về tùy chọn # 1 vì nó dễ dàng hơn để đối phó với mã khôn ngoan nhưng có thể không nhất thiết phải là tùy chọn đúng.
Tôi rất thích nghe một số suy nghĩ về các cách tiếp cận khác nhau đặc biệt là vì tôi không thể tìm thấy một câu hỏi tương tự về SO về chủ đề này.
Cập nhật Cảm ơn câu trả lời. Một trong những điều quan trọng nhất đối với tôi là xác định lý do tại sao việc sử dụng cái kia là lợi thế. Tôi muốn câu trả lời bao gồm một phần của một danh sách pro/con.
Bạn đang nói về điều này khi lưu trữ trong DB hoặc khi đầu ra được trả về từ phần còn lại? –
Thẻ có bất kỳ thông tin nào khác ngoài tên và có thể là ID không? –
Thẻ chỉ chứa giá trị chuỗi. Câu hỏi này chạm vào cả thiết kế RESTful và lưu trữ DB - tôi đã cập nhật câu hỏi của mình để phản ánh. –