कई से कई टेबल्स एसक्यूएल - mysql, एसक्यूएल

मुझे टेबल टेबल और एक टेबल रेस्टॉरंट के बीच कई तालिकाओं में बहुत कुछ करना है। सबसे पहले मैंने दो टेबल बनाए:

CREATE TABLE RESTAURANT (
ID_Restaurant VARCHAR(10) NOT NULL,
ID_Hotel VARCHAR(10) NOT NULL,
Name VARCHAR(30) NOT NULL,
Number_of_Tables INT(3) NOT NULL,
PRIMARY KEY (ID_Restaurant),
FOREIGN KEY (ID_Hotel) REFERENCES HOTEL (ID_Hotel));

CREATE TABLE MEAL(
ID_Meal VARCHAR(10) NOT NULL,
Name VARCHAR(30) NOT NULL,
Preparation_Time VARCHAR(20),
Cooking_Time VARCHAR(20),
PRIMARY KEY (ID_Meal));

फिर मैंने "संयुक्त" टेबल बनाया:

CREATE TABLE MEAL_SERVED(
ID_Meal VARCHAR(10) NOT NULL,
ID_Restaurant VARCHAR(10) NOT NULL,
Price INT(5) NOT NULL,
PRIMARY KEY (ID_Meal, ID_Restaurant, Price),
FOREIGN KEY(ID_Meal) REFERENCES MEAL(ID_Meal),
FOREIGN KEY(ID_Restaurant) REFERENCES RESTAURANT (ID_Restaurant));

मैंने पहले दो तालिकाओं में कुछ डेटा दर्ज किया:

INSERT INTO RESTAURANT(ID_Restaurant, ID_Hotel, Name, Number_of_Tables)
VALUES ("REST1", "H1", "Benares Indisk Restaurant", 26);
("REST2", "H2", "La Gaichel", 35),
("REST3", "H3", "Tapas Restaurant", 17),
("REST4", "H4", "Faubourg 101", 19),
("REST5", "H5", "Pizzeria Roma", 38);

INSERT INTO MEAL(ID_Meal, Name, Preparation_Time, Cooking_Time)
VALUES ("MEAL1", "Croque-Monsieur", "5 min", "4 min"),
("MEAL2", "Salad", "6 min", NULL),
("MEAL3", "Hot Dog", "3 min", "2min"),
("MEAL4", "Panini", "6 min", "5 min"),
("MEAL5", "Coca-Cola", NULL, NULL);

जब तक, अब कोई समस्या नहीं है, लेकिन जब मैंने तीसरे तालिकाओं में डेटा दर्ज करने का प्रयास किया:

INSERT INTO MEAL_SERVED(ID_Meal, ID_Restaurant, Price)
VALUES ("MEAL1", "REST1", 50),
("MEAL4", "REST1", 50),
("MEAL5", "REST1", 35),
("MEAL1", "REST2", 3.5),
("MEAL2", "REST2", 3.5),
("MEAL4", "REST2", 5);

उदाहरण के लिए, तो मेरे पास एक त्रुटि संदेश है:

FOREIGN KEY constraint failed: INSERT INTO MEAL_SERVED(ID_Meal, ID_Restaurant, Price)

मुझे समझ में नहीं आता कि मेरे पास यह संदेश क्यों है और इसे कैसे ठीक किया जाए। अग्रिम धन्यवाद।

उत्तर:

उत्तर № 1 के लिए 1

जैसा कि छाया ने टिप्पणी खंड में कहा था।

सबसे पहले, अपने एसक्यूएल कथन में से एक में अपना टाइपो ठीक करें:

INSERT INTO RESTAURANT(ID_Restaurant, ID_Hotel, Name, Number_of_Tables)
VALUES ("REST1", "H1", "Benares Indisk Restaurant", 26);
("REST2", "H2", "La Gaichel", 35),
("REST3", "H3", "Tapas Restaurant", 17),
("REST4", "H4", "Faubourg 101", 19),
("REST5", "H5", "Pizzeria Roma", 38);

होना चाहिए:

INSERT INTO RESTAURANT(ID_Restaurant, ID_Hotel, Name, Number_of_Tables)
VALUES ("REST1", "H1", "Benares Indisk Restaurant", 26),
("REST2", "H2", "La Gaichel", 35),
("REST3", "H3", "Tapas Restaurant", 17),
("REST4", "H4", "Faubourg 101", 19),
("REST5", "H5", "Pizzeria Roma", 38);

दूसरा: अपने आप को एक पक्ष बनाओ और प्राथमिक कुंजी के लिए पूर्णांक का उपयोग करें और auto_increment विकल्प के साथ, आप आईडी को अनदेखा कर सकते हैं।

CREATE TABLE RESTAURANT (
`id` INT NOT NULL AUTO_INCREMENT,
`hotel` INT NOT NULL,
`name` VARCHAR(30) NOT NULL,
`numberOfTables` INT NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (hotel) REFERENCES HOTEL (`id`));

CREATE TABLE MEAL(
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(30) NOT NULL,
`preparationTime` VARCHAR(20),
`cookingTime` VARCHAR(20),
PRIMARY KEY (`id`));

CREATE TABLE MEAL_SERVED(
`id` INT NOT NULL AUTO_INCREMENT,
`meal` INT NOT NULL,
`restaurant` INT NOT NULL,
Price FLOAT NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY(meal) REFERENCES MEAL(`id`),
FOREIGN KEY(restaurant) REFERENCES RESTAURANT (`id`));

डेटा:

INSERT INTO RESTAURANT(`hotel`, `name`, `numberOfTables`)
VALUES ("1", "Benares Indisk Restaurant", 26),
(2, "La Gaichel", 35),
(3, "Tapas Restaurant", 17),
(4, "Faubourg 101", 19),
(5, "Pizzeria Roma", 38);

INSERT INTO MEAL(`name`, `preparationTime`, `cookingTime`)
VALUES ("Croque-Monsieur", "5 min", "4 min"),
("Salad", "6 min", NULL),
("Hot Dog", "3 min", "2min"),
("Panini", "6 min", "5 min"),
("Coca-Cola", NULL, NULL);

INSERT INTO MEAL_SERVED(`meal`, `restaurant`, `price`)
VALUES (1, 1, 50),
(4, 1, 50),
(5, 1, 35),
(1, 2, 3.5),
(2, 2, 3.5),
(4, 2, 5);

तीसरा: INT (3) का कोई प्रभाव नहीं है। आईएनटी के लिए जगह आवंटित की जाएगी। आप शायद TINYINT या SMALLINT इंस्टैड का उपयोग कर सकते हैं। इधर देखो: https://dev.mysql.com/doc/refman/5.7/en/integer-types.html

चौथा: ऊंट-केस या सांप-केस का उपयोग करें लेकिन दोनों कृपया नहीं ;-)


संबंधित सवाल
सबसे लोकप्रिय