2011-02-09 42 views
5

Tôi đang cố gắng thiết kế cơ sở dữ liệu "hộp công thức" và tôi gặp sự cố khi tải đúng. Tôi không biết mình có đi đúng hướng hay không, nhưng đây là những gì tôi có.Mô hình Cơ sở dữ liệu Công thức Thực phẩm

công thức nấu ăn (recipeID, vv)
thành phần (ingredientID, vv)
recipeIngredient (recipeID, ingredientID, số tiền)
loại (CategoryID, tên)
recipeCategory (recipeID, CategoryID, tên, vv)

Vì vậy, tôi có một vài câu hỏi.

  • Tôi làm như thế nào? Thiết kế này có được chấp nhận từ những gì bạn biết không?
  • Làm cách nào để triển khai các bước chuẩn bị? Tôi có nên tạo thêm nhiều triển khai bổ sung (một cái gì đó như chuẩn bị (prepID, vv) và recipePrep (recipeID, prepID)) hay chỉ thêm các chỉ đường trong bảng công thức nấu ăn? Tôi muốn đây là danh sách có thứ tự trong giao diện người dùng (trang web).

Cảm ơn sự giúp đỡ của bạn.

Trả lời

1

một vài suy nghĩ:

Bạn có thể muốn sử dụng cùng một bảng cho Recipe và thành phần, với một cột loại chỉ số. Lý do là Công thức nấu ăn có thể chứa công thức nấu ăn phụ. Hãy gọi bảng kết hợp "Item". Sau đó, bảng RecipeIngredient của bạn sẽ trông giống như

RecipeIngredient (RecipeId, ItemId, Amount). 

Tôi hy vọng rằng bảng cũng sẽ có một cột sắp xếp.

Nếu bạn muốn thực hiện bất kỳ phép tính nào với các công thức này (ví dụ: chia tỷ lệ, phân tích dinh dưỡng, lập kế hoạch sản xuất) thì số lượng của bạn sẽ cần phải xác định đơn vị đo lường. Bạn có thể làm điều đó một cách rõ ràng (bằng cách có một cột riêng cho uofm) hoặc bạn có thể sử dụng trường văn bản cho số lượng và mong muốn người dùng nhập các giá trị như "1 cup" hoặc "2 tbs". Nếu bạn sử dụng cách tiếp cận đó, bạn sẽ cần phải đảm bảo rằng những gì họ nhập là dễ nhận biết và phân tích cú pháp mỗi khi bạn cần sử dụng nó. Điều này có thể trở nên phức tạp đáng ngạc nhiên, đặc biệt nếu bạn muốn đại diện cho năng suất công thức một cách chính thức.

Giả sử bạn muốn 1: M từ công thức thành danh mục, tôi vẫn không chắc tại sao bảng RecipeCategory của bạn sẽ có cột Tên. Tôi nghĩ rằng cái tên đó xuất phát từ định nghĩa Category.

Tôi đồng ý với Dave rằng bạn không thể sử dụng lại các bước chuẩn bị từ công thức đến công thức và vì vậy bảng RecipePreparationSteps (hoặc thứ gì đó tương tự) sẽ phù hợp hơn.

Tuy nhiên, công thức nấu ăn thường được trình bày với các thành phần và hướng dẫn được trộn lẫn. ví dụ.

Nội dung giới thiệu một số thành phần. hướng dẫn chuẩn bị một số nguyên liệu khác hướng dẫn nướng.

Để thỏa mãn điều đó, bạn cần phải khéo léo đặt giá trị chuỗi trong các bảng bước RecipeIngredient và RecipePreparation để bạn có thể kết hợp dữ liệu từ cả hai theo thứ tự phù hợp để trình bày. Một cách tiếp cận khác sẽ là, thay vì hai bảng này, hãy sử dụng bảng "RecipeLine" sao cho mỗi hàng có thể đại diện cho một lệnh HOẶC một thành phần. Tôi nghĩ rằng đó có thể là những gì bạn đang đề xuất. Những người theo chủ nghĩa thuần túy sẽ cau mày với kiểu quá tải bảng này, nhưng tôi không phải là người thuần túy.

Đây là chủ đề tôi tình cờ biết nhiều về, vì vậy hãy hỏi bất cứ điều gì.

+0

Xin chào Elroy, Cảm ơn bạn đã có một phản hồi tuyệt vời và đáng yêu như tôi thực sự đánh giá cao nó. Tôi đã có một chút bối rối bởi tuyên bố này bạn đã thực hiện "..explicitly (bằng cách có một cột riêng biệt cho uofm) .." và cũng là bên cạnh đoạn cuối cùng là một cái gì đó tôi thực sự muốn làm. Bạn có thể xin giúp đỡ với một ví dụ? Nếu bạn không nhớ tôi có thể có một địa chỉ email để tôi có thể gửi cho bạn một phiên bản pdf của thiết kế hiện tại của tôi không? Cảm ơn bạn. –

+0

Xin chào, tôi rất sẵn lòng chấp nhận email của bạn nhưng tôi không muốn đăng địa chỉ của mình ở đây. Tôi mới đến SO. Không thấy cách gửi email cho bạn qua tiểu sử của bạn. Nếu bạn có thể giải thích một cách khác để gửi email cho bạn, vui lòng thực hiện hoặc chỉ cần đăng địa chỉ email của bạn tại đây. –

+0

Cảm ơn bạn. Địa chỉ email của tôi là [email protected] Tôi kiểm tra email đó mọi lúc. Bạn có thể gửi email cho tôi và sau đó tôi sẽ trả lời bạn. –

1

Bạn đã xem bất kỳ lược đồ hiện có nào, chẳng hạn như this one tại DatabaseAnswers?

+0

Xin chào Mitch, tôi đã xem lược đồ đó và tôi đã cố gắng hiểu nó trong một vài ngày nay. –

0

Có vẻ như là một khởi đầu tốt. Một vài suy nghĩ:

  1. Không thấy cần phải có bảng recpieCategory. Một-nhiều giữa công thức và danh mục nên làm tốt.
  2. Bảng PrepareSteps phải chứa các bước 1-n cho mỗi công thức. Tôi sẽ không cố gắng sử dụng lại các bước giữa các công thức nấu ăn.
+0

Tôi nghĩ rằng công thức nấu ăn có thể được phân loại theo các khía cạnh khác nhau, như 'khóa học đầu tiên', 'khóa học thứ hai', hoặc như 'súp', xà lách ', hoặc bằng nguyên liệu, hoặc bằng ẩm thực ... cho các danh mục khác nhau. Nhưng có lẽ nó có thể được thực hiện tốt hơn bằng cách sử dụng thẻ chứ không phải là danh mục. –

+0

Hi @ Andriy-m, tôi đã suy nghĩ "thẻ" khi tôi đang suy nghĩ loại, nhưng có lẽ họ nên là hai điều khác nhau. Tôi quay lại và thứ tư với điều đó một lúc. Cảm ơn vì đầu vào của bạn. –

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