मैं SQLite में दो टेबल Category और Product बनाना चाहता हूं। श्रेणी तालिका माता-पिता होनी चाहिए और उत्पाद तालिका एक बच्चा होनी चाहिए। मैंने इस तरह से दो टेबल बनाए, और मुझे नहीं पता कि यह एक अच्छा तरीका है:

CREATE TABLE Category (
    id BIGINT PRIMARY KEY,
    category_name VARCHAR,
    category_description VARCHAR,
    image_path VARCHAR
):

CREATE TABLE Product (
    product_id integer PRIMARY KEY,
    product_name VARCHAR,
    product_description VARCHAR,
    product_numberOfProduct integer,
    product_image_path VARCHAR,
    product_price integer,
    category_id integer NOT NULL,
    FOREIGN KEY (category_id) REFERENCES Category(id)
);

मैं category_name से सभी उत्पादों को खोजने के लिए एक क्वेरी बनाना चाहता हूं और ऐसा ही कुछ।

0
SIn san sun 19 फरवरी 2019, 15:55

1 उत्तर

सबसे बढ़िया उत्तर

आपका दृष्टिकोण लगभग हाजिर है। आपके समाधान में प्रमुख कमी यह है कि यदि कोई दिया गया उत्पाद एक से अधिक श्रेणी से संबंधित हो सकता है, तो आपकी स्कीमा प्रत्येक उत्पाद-श्रेणी संबंध के लिए उस उत्पाद के सभी मेटाडेटा को डुप्लिकेट कर रही होगी। इससे निपटने का मानक तरीका तीसरी जंक्शन तालिका बनाना है, जो मुख्य रूप से उत्पादों और उनकी श्रेणियों के बीच संबंधों को संग्रहीत करने के लिए मौजूद है। तो, आपकी जंक्शन तालिका कुछ इस तरह दिख सकती है:

CREATE TABLE Product_Category (
    product_id integer,
    category_id integer,
    PRIMARY KEY (product_id, category_id)
)

अपनी वर्तमान Product तालिका से आप category_id के संदर्भ को हटा देंगे।

एक उदाहरण प्रश्न के रूप में, यदि आप किसी दिए गए उत्पाद के सभी श्रेणी नामों का पता लगाना चाहते हैं, तो आप कोशिश कर सकते हैं:

SELECT
    c.category_name
FROM Category c
INNER JOIN Product_Category pc
    ON c.id = pc.category_id
INNER JOIN Product p
    ON pc.product_id = p.product_id
WHERE
    p.product_name = 'some product name';
0
Tim Biegeleisen 19 फरवरी 2019, 13:00