2012-02-03 15 views
11

Tôi chưa bao giờ thiết kế một cơ sở dữ liệu/mô hình dữ liệu/lược đồ từ đầu, đặc biệt là cho một ứng dụng web. Trong một số cuộc phỏng vấn việc làm gần đây, tôi được yêu cầu 'thiết kế' một cơ sở dữ liệu cho một ứng dụng giỏ hàng. Bây giờ tôi đang làm việc trên một ứng dụng mua sắm di động (bán lẻ, sử dụng phonegap) với một phụ trợ cần lưu trữ và xử lý thông tin sản phẩm và đơn đặt hàng. Quy mô của vấn đề này quá lớn, tôi không biết bắt đầu từ đâu. Tôi đã hy vọng một số tư vấn về -thiết kế cơ sở dữ liệu cho ứng dụng giỏ hàng?

  1. Tôi nên tiếp cận vấn đề như vậy (DB ứng dụng giỏ mua hàng) như thế nào? tôi nên bắt đầu từ đâu ?
  2. Có bất kỳ sai sót/cạm bẫy phổ biến nào mà tôi nên tránh không?
  3. Mô hình tối ưu hóa/hiệu quả nào tôi nên lưu ý khi thiết kế một DB như vậy?
  4. Tôi nên làm thế nào để xác định các thực thể trong không gian vấn đề (sản phẩm, đơn đặt hàng, v.v ...)? làm thế nào tôi nên lấy được các mối quan hệ giữa chúng?
  5. Khi một người phỏng vấn hỏi một câu hỏi như vậy, chính xác thì anh ấy đang tìm kiếm điều gì? có điều gì tôi nên/không nên nói?

Tôi cũng nên làm rõ rằng -

  1. Vâng, tôi là một Noob, và động cơ của tôi là để học thiết kế cơ sở dữ liệu và chuẩn bị cho cuộc phỏng vấn công việc sắp tới. Tôi đã đọc các cuốn sách DBMS, nơi chúng mô tả các khái niệm riêng lẻ một cách chi tiết, nhưng tôi không có đầu mối làm thế nào để đặt những thứ đó lại với nhau và bắt đầu thiết kế một cơ sở dữ liệu.
  2. Tôi đã xem các chủ đề khác về thiết kế cơ sở dữ liệu. Các tác giả đã có xu hướng sở hữu một số kiến ​​thức về cách phá vỡ vấn đề. tôi muốn hiểu phương pháp đằng sau việc đó.
  3. Liên kết đến các tài nguyên bên ngoài, nhận xét, đề xuất và mọi thứ sẽ đưa tôi đi đúng hướng được đánh giá cao. Tôi hy vọng chủ đề này đóng vai trò như một kinh nghiệm học tập cho bản thân và những người khác.
+1

Cảm ơn bạn đã trả lời và thông tin của bạn vào bình thường. Là một newbie, tôi phải làm rõ điều này từ quan điểm của tôi - rất khó cho một newbie hiểu được sự phức tạp của thiết kế db trong một miền phức tạp như giỏ hàng hoặc ngân hàng. điều này có ít hơn để làm với sự hiểu biết những điều cơ bản của thiết kế DB, và nhiều hơn nữa để làm với sự hiểu biết tên miền và làm thế nào để phá vỡ nó lên để lấy được một giải pháp tốt. các câu trả lời ở trên đã làm tốt công việc cung cấp các giải pháp ngắn gọn để trả lời cả hai vấn đề - nguyên tắc cơ bản về thiết kế và kiến ​​thức về miền. thông thường chỉ có thể đưa bạn đến nay. –

Trả lời

14

Có thể có năm bảng trong cơ sở dữ liệu:

LOẠI này cửa hàng bảng thông tin về các sản phẩm loại cửa hàng và loại cấp bậc của bạn.
trường mẹ của bảng này lưu trữ ID của danh mục gốc.

SẢN PHẨM tất cả các sản phẩm trong cửa hàng của bạn được lưu trữ trong bảng này. Bảng này có một categoryID khóa ngoài xác định ID của danh mục mà một sản phẩm thuộc về.

ORDER bảng này lưu trữ thông tin về tất cả đơn đặt hàng của khách truy cập cửa hàng của bạn.

ORDERED_SHOPPING_CART bảng được kết nối chặt chẽ với các bảng PRODUCT và ORDER; lưu trữ thông tin về nội dung đơn đặt hàng của khách hàng.

SPECIAL_OFFER bảng chứa một danh sách các sản phẩm, được hiển thị trên trang chủ như khuyến mại đặc biệt

+0

tôi không ủng hộ nó nhưng thấy rằng nó có thể giúp bạn hình dung rõ hơn vấn đề của bạn và bao gồm/bao gồm các yêu cầu tối đa của một ứng dụng giỏ hàng. thậm chí tôi chưa kiến ​​trúc bất kỳ cơ sở dữ liệu mua sắm nào vì vậy đây cũng là một câu hỏi mà tôi quan tâm quá – Devjosh

+1

đây là một điểm tốt để tôi bắt đầu làm việc về kỹ năng thiết kế của mình. +1 internet cho bạn. –

+0

thật tuyệt khi tôi vui vì nó đã giúp bạn. tất cả các thiết kế tốt nhất – Devjosh

11

Câu trả lời ngắn gọn là cách tôi giải quyết vấn đề này. Thứ nhất, có vô số các giỏ hàng mua sắm dựa trên mã nguồn mở hoặc miễn phí. Điều này có nghĩa rằng bạn có thể có được một, thiết lập cơ sở dữ liệu và sau đó có một cái nhìn tốt xung quanh những gì họ đã làm.

Hãy tự hỏi mình các câu hỏi như, tại sao họ đã làm điều đó? Tại sao nó lại tốt? Nhược điểm nào có thể có? Làm thế nào tôi sẽ làm điều đó một cách khác nhau? tại sao?

Tôi sẽ cố gắng mua một công cụ thiết kế cơ sở dữ liệu cho phép bạn hình dung cơ sở dữ liệu. (giống như nhà thiết kế cơ sở dữ liệu trong studio trực quan hoặc tôi có một từ MicroOlap có cơ sở dữ liệu pgsql)

Sau đó, bạn cần suy nghĩ về những gì bạn cần trong cơ sở dữ liệu. Khách hàng sẽ làm gì? Mua sản phẩm! Vì vậy, bạn cần một bảng sản phẩm. Nếu không đi xuống toàn bộ tuyến đường, bạn có thể thấy điểm. Hãy tưởng tượng những gì là cần thiết, sau đó về cơ bản làm cho một bảng cho nó.

Nếu bạn có nhiều tùy chọn cho trường trong bảng, hãy tạo một bảng khác có quan hệ trong đó. Vì vậy, nếu bạn có một bảng sản phẩm và bạn có một trường trạng thái. bạn có thể có nhiều hơn một trạng thái. (ví dụ: hết hàng, số lượng hạn chế, mặt hàng lớn, đắt tiền) thay vì mã hóa cứng các trường này, tạo bảng và cho phép người dùng thêm các mục vào bảng. sau đó trong bảng sản phẩm, thêm trường status_id và liên kết nó với bảng trạng thái

Nhiều - nhiều mối quan hệ là những điều hữu ích cần biết. (tôi đã tự mình rút ngắn điều này.) nói rằng bạn có một bảng thành phần và sản phẩm.Các sản phẩm có thể được tạo thành từ rất nhiều thành phần và các thành phần có thể được phân bổ cho nhiều sản phẩm. Tạo bảng hòa giải. Một cái gì đó như prodcomp (và trong này bạn sẽ có các lĩnh vực như id, prod_id, comp_id, qtyneeded).

Tìm hiểu cách index correctly.

Không tạo cơ sở dữ liệu cho đến khi bạn có ý tưởng vững chắc về cách hoạt động của cơ sở dữ liệu. điều này tiết kiệm thời gian trong việc tái tạo nó sau này.

Có thể có nhiều điều hơn với điều này, tuy nhiên, tôi hy vọng tôi đã cho bạn một khởi đầu tốt.