2011-10-05 39 views
6

Tôi không chắc chắn làm thế nào để từ này hoàn hảo, nhưng hãy để tôi cho nó một thử. Tôi đang làm việc để xây dựng một ứng dụng kiểm soát hàng tồn kho được sử dụng với nhiều khách hàng khác nhau để làm mọi thứ từ kiểm tra kho hàng của riêng họ, nhận giá, đặt hàng sản phẩm, v.v. Mặt trước là Flex (Flash Builder) và mặt sau cuối cùng là MySQL và PHP. Vì vậy - đây là câu hỏi thực sự tôi đoán. Khi khách hàng đặt hàng cho sản phẩm, tôi không chắc chắn họ đang đặt hàng bao nhiêu, nhưng tôi cần phải lưu tất cả các mặt hàng vào một 'vé'. (Ví dụ: Một đơn đặt hàng có thể là 2 quả táo, 3 quả cam, chuối và kiwi - Tiếp theo có thể chỉ cần đặt một quả táo.) Trong cơ sở dữ liệu 'vé' của tôi, tôi có không gian cho tối đa 20 mục (ticketItem1, ticketItem2, vv ...) - Hạn chế rõ ràng ở đây là nếu khách hàng chỉ yêu cầu một sản phẩm tôi còn lại với 19 khoảng trống.Có được nhiều giá trị null trong cơ sở dữ liệu MySQL không?

Loại vấn đề nào, nếu có, thường được kết hợp với có nhiều giá trị NULL trong cơ sở dữ liệu? Có cách nào giúp ngăn họ xảy ra không? Và có bất kỳ gợi ý nào để giúp đỡ trong việc này không?

Ngoài ra và cuối cùng - Mỗi mục được đặt hàng (hãy sử dụng lại quả táo) có mã vạch UNIQUE riêng của nó được liên kết với nó. Vì vậy, một quả táo có thể được đánh số 0001 và một quả táo khác có thể là số 4524 ...

Cảm ơn bạn đã hỗ trợ bạn có thể cung cấp.

-CS

+0

Tại sao bạn không thể sử dụng mối quan hệ 1: n để lưu trữ đơn đặt hàng và các mặt hàng đã đặt hàng? – Maerlyn

+2

Đọc trên [Chuẩn hóa cơ sở dữ liệu] (http://www.phlonx.com/resources/nf3/). –

+1

Bạn không nên làm theo cách này. Bạn nên thêm một bảng khác gọi là 'orderItems' hoặc thứ gì đó, với ID của thứ tự trong nó - theo cách này bạn có thể có các sản phẩm vô hạn cho mỗi đơn đặt hàng, dễ quản lý hơn và đó là mối quan hệ một - nhiều. – Bojangles

Trả lời

7

Thay vì có 20 cột ticketItem1, ticketItem2, ..., giới thiệu một bảng order_item, như thế này:

Bảng trật tự:

id customer 
1 42 
2 23 

Bảng mục:

id name 
1 banana 
2 kiwi 
3 apple 
4 oranges 

Bảng order_item:

order_id item_id multiplicity 
1  1  1    # 1 banana 
1  2  1    # 1 kiwi 
1  3  2    # 2 apples 
1  4  3    # 3 oranges 
2  3  1    # 1 apple in the second order 

mục Sau đó, JOIN trên các bảng để có được tất cả các lệnh trong một trật tự.

1

Bạn nên có một bảng liệt kê các thứ, và một cho các OrderDetails với một OrderID trỏ đến bảng theo thứ tự

Vì vậy, nếu bạn có 10 sản phẩm trong một trật tự. Bạn sẽ có 1 hàng theo thứ tự, và 10 trong OrderDetails

+0

Vì vậy, nếu tôi hiểu điều này một cách chính xác - Tôi vẫn sẽ có rất nhiều giá trị null, họ sẽ chỉ nằm trong một bảng riêng biệt gọi ra sản phẩm cụ thể nào được yêu cầu cho 'vé' đó. Lợi ích của việc làm theo cách này so với cái kia là gì? - Tôi cũng sẽ đọc thêm về chuẩn hóa DB. Tuy nhiên - sẽ có ~ 30-50 đơn đặt hàng/vé mỗi ngày ... Tôi đánh giá cao sự trợ giúp! –

+0

Không thực sự. Bạn có 1 bảng liệt kê tất cả thứ tự, không có vé. Bạn có exemple trong bảng này các cột sau: ID, OrderDate, IsProcessed, và trên một bảng OrderItems: ID, OrderID, Ticket, và bất kỳ cột nào khác cho thông tin cụ thể cho 1 vé. Nếu bạn có một đơn đặt hàng với 20 vé. Bạn sẽ có 1 mục trong bảng Orders và 20 mục trong OrderDetails. Và sẽ không có giá trị NULL trong bất kỳ cột nào – Frank

0

Nếu bạn muốn năng động trong những gì bạn lưu trữ, bạn có thể sử dụng mảng json. Tôi hoàn toàn đồng ý với những người khác rằng việc chuẩn hóa cơ sở dữ liệu là điều đầu tiên cần làm. Tôi sẽ làm theo quy tắc của Codd.

Nhưng trong trường hợp bạn không biết chính xác những gì bạn cần để lưu trữ json có thể là một giải pháp. Tuy nhiên, một hạn chế lớn là việc tìm kiếm trở nên khá khó khăn.

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