Free tutorials & notes in Hindi & English · Clean code examples 🧰 मुफ़्त PDF और फ़ोटो टूल्स →
MySQL + SQL · Lesson 120

Online Shopping Database Project

Project

Online shopping (e-commerce) database एक समृद्ध DBMS project है। यह customers, products, orders, और हर order के items model करता है। यह one-to-many संबंध (customer से orders) और many-to-many (orders से products) दोनों दिखाता है, order items table से हल।

💡 customer → orders one-to-many है; orders ↔ products order_items से many-to-many।

Tables design करना

  • customers — id, name, city।
  • products — id, name, price।
  • orders — id, customer_id (FK), order_date।
  • order_items — id, order_id (FK), product_id (FK), quantity, price।

हर order एक customer का होता है। हर order में order_items से कई products हो सकते हैं।

Schema बनाना

CREATE TABLE customers (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL, city VARCHAR(40)
);
CREATE TABLE products (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(80) NOT NULL, price DECIMAL(10,2)
);
CREATE TABLE orders (
    id INT PRIMARY KEY AUTO_INCREMENT,
    customer_id INT, order_date DATE,
    FOREIGN KEY (customer_id) REFERENCES customers(id)
);
CREATE TABLE order_items (
    id INT PRIMARY KEY AUTO_INCREMENT,
    order_id INT, product_id INT,
    quantity INT, price DECIMAL(10,2),
    FOREIGN KEY (order_id) REFERENCES orders(id),
    FOREIGN KEY (product_id) REFERENCES products(id)
);

Order items link

order_items orders और products के बीच many-to-many link है। हर row एक order में एक product line है, उसकी quantity और खरीद समय की price के साथ। यहाँ price store करना पुराने order totals सही रखता है भले product price बाद में बदले।

Sample data

INSERT INTO customers (name, city) VALUES ('Aman', 'Delhi'), ('Diya', 'Mumbai');
INSERT INTO products (name, price) VALUES ('Pen', 10.00), ('Notebook', 50.00);
INSERT INTO orders (customer_id, order_date) VALUES (1, '2026-09-20');
INSERT INTO order_items (order_id, product_id, quantity, price) VALUES
    (1, 1, 3, 10.00), (1, 2, 2, 50.00);

Sales queries

-- एक order का total
SELECT SUM(quantity * price) AS order_total
FROM order_items WHERE order_id = 1;

-- सबसे ज़्यादा बिकते products
SELECT p.name, SUM(oi.quantity) AS sold
FROM order_items oi JOIN products p ON oi.product_id = p.id
GROUP BY p.id ORDER BY sold DESC;

-- प्रति customer कुल खर्च
SELECT c.name, SUM(oi.quantity * oi.price) AS spent
FROM customers c
JOIN orders o ON o.customer_id = c.id
JOIN order_items oi ON oi.order_id = o.id
GROUP BY c.id;
-- order 1 total: 130.00 (3×10 + 2×50)

आम गलतियाँ

  • Products सीधे orders में डालना। प्रति order कई products को order_items इस्तेमाल कीजिए।
  • order_items में price न store करना। तब product की price बदलने पर पुराने totals बदल जाते हैं।
  • Quantity भूलना। Order line को चाहिए कितने खरीदे गए।
  • कोई foreign keys नहीं। Items को असली orders और products से जोड़िए।

सारांश

  • E-commerce database में customers, products, orders और order_items होती हैं।
  • customer → orders one-to-many है; orders ↔ products many-to-many।
  • order_items हर product line quantity और price के साथ store करती है।
  • Order total = इसके items पर SUM(quantity × price)।
  • Best-sellers और spending JOIN व GROUP BY से query कीजिए।

आगे, many-to-many दोहराइए ER diagram examples में, या library database project बनाइए।

अक्सर पूछे जाने वाले प्रश्न (FAQ)

MySQL में online shopping database कैसे design करूँ?
customers, products, orders और order_items tables बनाइए। एक order एक customer का होता है (one-to-many), और order_items orders और products जोड़ती है (many-to-many), हर order line को quantity और price store करके।
मुझे order_items table क्यों चाहिए?
एक order में कई products हो सकते हैं, और एक product कई orders में आ सकता है — many-to-many संबंध। order_items link table हर order में हर product record करती है, उसकी quantity और price के साथ, जो एक foreign key नहीं कर सकता।
MySQL में order total कैसे निकालूँ?
उस order के order_items में quantity गुणा price जोड़िए: SELECT SUM(quantity * price) FROM order_items WHERE order_id = ?;। हर line पर price store करना totals सही रखता है भले product price बाद में बदले।
सबसे ज़्यादा बिकते products कैसे ढूँढूँ?
order_items को product से group करके quantity जोड़िए: SELECT product_id, SUM(quantity) FROM order_items GROUP BY product_id ORDER BY SUM(quantity) DESC;। Names दिखाने को products से join कीजिए।
Price को order_items में क्यों store करूँ, सिर्फ़ products में नहीं?
Product prices समय के साथ बदलते हैं। खरीद के पल की price order_items में store करना मतलब पुराने orders अपने सही ऐतिहासिक totals रखते हैं, product price update होने के बाद भी।
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।

💻 लाइव कोड एडिटर

इस पेज के प्रोग्राम यहीं तैयार हैं — चलाएँ, बदलें और सीखें। कुछ भी इंस्टॉल किए बिना।
OneCompiler द्वारा संचालित। कोड एडिटर में अपने आप आ जाता है — Run दबाकर आउटपुट देखें। अगर एडिटर न खुले तो नए टैब में खोलें.
अगला topicStudent Marksheet Database Project आपकी प्रगति: 120 / 151 (79%) · Lesson 121 / 151 आगे बढ़ें →

यह lesson कैसा लगा?

आपकी राय से हम content और बेहतर बनाते हैं।

अपना review और सुझाव लिखें (वैकल्पिक)

Review approve होने के बाद आपका नाम और शहर इसके साथ public दिख सकते हैं। Email या phone न लिखें।

▶ CodingEasily on YouTube

Video से सीखें – आसान Hindi में

चुनी हुई video: RDBMS भाग 3 – Class XI Commerce IT

▶ Channel subscribe करें