2009-04-02 26 views
8

Tôi đang xây dựng cửa hàng trực tuyến để bán các sản phẩm như "Xanh cực lớn, áo phông". Tức là, cùng một chiếc áo có thể có nhiều kích cỡ/màu sắc, sự kết hợp khác nhau có thể được bán hết, sự kết hợp khác nhau có thể có giá khác nhau, v.v.Cách tạo mô hình "sản phẩm" trong ứng dụng cửa hàng trực tuyến

Câu hỏi của tôi là làm thế nào để mô hình hóa các sản phẩm này trong ứng dụng Rails của tôi làm điều đó trong bất kỳ ứng dụng nào).

suy nghĩ hiện tại của tôi là:

Class Product 
    has_many :variants, :through => :characteristics 
    has_many :characteristics 
end 

Class Characteristic 
    belongs_to :product 
    belongs_to :variants 
end 

Class Variant 
    has_many :products, :through => :characteristics 
    belongs_to :characteristic 
end 

Vì vậy, mỗi sản phẩm sẽ có một hoặc nhiều đặc điểm (ví dụ, "Color", "Kích thước", vv), và mỗi đặc trưng sau đó sẽ có một hoặc nhiều biến thể (ví dụ: "Đỏ", "Xanh dương", v.v.).

Vấn đề với phương pháp này là nơi tôi lưu trữ giá và khoảng không quảng cáo? I.e., giá và khoảng không quảng cáo của một sản phẩm nhất định được xác định bởi các biến thể mà các đặc điểm của nó mang lại. (Màu xanh lá cây có thể đắt hơn màu đỏ, lớn có thể hết hàng, vv).

Một ý nghĩ tôi có là cung cấp cho sản phẩm "base_price" và để biến thể sửa đổi, nhưng điều này có vẻ quá phức tạp (và có thể không hoạt động).

Trả lời

13

Tôi đã thấy hai giải pháp cho loại tình thế tiến thoái lưỡng nan này. Đầu tiên là cố gắng sử dụng các đặc tính để xác định sản phẩm cấp dưới cho sản phẩm "chính". Thách thức ở đây là ngoài những suy nghĩ của bạn cho đến nay, trong hầu hết các trường hợp, sản phẩm sẽ phát triển với các nhà sản xuất mới mang lại những khía cạnh mới cho bảng. Ví dụ: một nhà sản xuất có thể sản xuất sản phẩm rẻ hơn nhưng có phương pháp ứng dụng khác cho biểu trưng hoặc khâu có thể đủ quan trọng để theo dõi.

Tôi nghĩ rằng mang theo một số sản phẩm không đáng kể cho mỗi sản phẩm và sau đó gắn các đặc tính như các thuộc tính hoạt động tốt nhất. Nó dễ dàng tìm kiếm và mở rộng. Nếu một nhóm sản phẩm có liên quan chặt chẽ, một Nhóm sản phẩm mà các sản phẩm riêng lẻ gắn vào hoạt động tốt.

Trong bảng:

  ProductGroup 
      -------------------- 
      ProductGroupID 
      ProductGroupName 
      ProductGroupDescription 

      Product 
      -------------------- 
      ProductID 
      ProductGroupID 
      QtyOnHand 
      BasePrice 
      ProductColorID 
      ProductSizeID 

      ProductColor 
      ------------ 
      ProductColorID 
      ProductColorName 

      ProductSize 
      -------------- 
      ProductSizeID 
      ProductSizeName 

      ...more attributes... 

Những lợi thế ở đây là bạn có thể dễ dàng truy vấn cho các thuộc tính cụ thể, thuộc tính này là "linh hoạt" trong đó hơn có thể được thêm vào (và cái cũ điều chỉnh: nếu bạn bắt đầu với "Red "nhưng sau đó thêm một chữ" Đỏ "khác vào nhóm màu, bạn có thể đổi chúng thành" Maroon "và" Đỏ tươi ".

Bạn có thể kiểm soát giá và khoảng không quảng cáo ở mức sản phẩm chi tiết (mặc dù có thể cần thêm bảng để tính phí tìm nguồn cung ứng chi phí)

Tất cả điều này giả định rằng các đặc tính của bạn được chia sẻ chung. Nếu không, phương pháp tiếp cận phụ đặc trưng của bạn có thể hoạt động bằng cách tạo bảng nối giữa các đặc điểm và bảng chi tiết sản phẩm và điền vào khi cần. Điều này sẽ yêu cầu nhiều logic kinh doanh hơn. Để đảm bảo mỗi danh mục sản phẩm nhận được tất cả các đặc điểm cần thiết. Trong trường hợp thứ hai này, tôi sẽ sử dụng các sản phẩm "nguyên mẫu" trong bảng sản phẩm cơ sở (với số lượng và chi phí là 0) mà tôi sẽ sao chép các đặc tính từ và sau đó điều chỉnh khi mỗi sản phẩm mới được nhập vào. Khi bạn di chuyển về phía trước, khi một biến thể mới xuất hiện, có chức năng "nhân bản sản phẩm này" cho phép bạn chỉ cần điều chỉnh các khác biệt từ sản phẩm cơ bản sẽ có giá trị.

Cuối cùng, khi quản lý khoảng không quảng cáo và giá cả, điều này sẽ xảy ra ở lớp Giao diện người dùng. Có thể tạo truy vấn cho các sản phẩm liên quan (nhóm sản phẩm) và quản lý tất cả giá cho các sản phẩm có liên quan sẽ đi một chặng đường dài để làm cho điều này trở nên dễ sống.

+0

Đây là lời khuyên hữu ích. Tại công ty tôi làm việc cho chúng tôi chỉ có hai bảng - Sản phẩm và ProductItem - và màu sắc và kích thước không được chuẩn hóa đúng cách. Nó làm cho việc quản lý/kết hợp các hình ảnh màu cụ thể là một cơn ác mộng tuyệt đối. Đây là cách tôi sẽ làm điều đó; màu sắc và kích thước là khái niệm hạng nhất .... –

+0

... và chúng tôi đã chạy vào các tình huống mà "vàng được tạo ở Thái Lan nhưng người da trắng đến từ Trung Quốc", nhưng vì chúng tôi lưu trữ ở cấp Sản phẩm, chúng tôi có thể 't mô hình đó và kết thúc nhân đôi SKU, gây ra các vấn đề khác. Linh hoạt nhưng cung cấp giao diện người dùng cho các trường hợp phổ biến là lời khuyên +1. –

+1

Cảm ơn Nicholas. Lời khuyên này xuất phát từ việc bị đốt cháy quá thường xuyên bằng cách giả định rằng các đặc điểm "dễ" có thể chỉ được nhồi trong bảng chính. Tôi có thể dễ dàng thấy rằng bảng "Color" cuối cùng có được nhiều thuộc tính hơn do tìm nguồn khác biệt. Đánh lừa tôi một lần... – Godeke

2

Chỉ cần ghi chú nhanh. Bạn luôn có thể thử và xem mã nguồn của một số sản phẩm thương mại điện tử khác như SpreeSubstruct họ có thể đã trả lời câu hỏi đó cho bạn.

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