這裏是我的情況:我有如何創建一個表,其行的引用2個現有表中的1個(並且只有1個)?
CREATE DATABASE JsPracticeDb;
/* Create tables corresponding to the problems, solutions to
problems, and ratings of problems or solutions */
CREATE TABLE Problems (
id INT PRIMARY KEY NOT NULL,
prompt_code VARCHAR(3000),
test_func_code VARCHAR(3000),
test_input_code VARCHAR(3000)
);
CREATE TABLE Solutions (
id INT PRIMARY KEY NOT NULL,
problem_id INT,
solver_name VARCHAR(50),
code VARCHAR(3000),
FOREIGN KEY (problem_id) REFERENCES Problems(id) ON DELETE CASCADE,
);
創建了兩個表,我想關於評級Solutions
,這是我寫的
CREATE TABLE Ratings (
id INT PRIMARY KEY NOT NULL,
solution_id INT,
stars TINYINT,
FOREIGN KEY (solution_id) REFERENCES Solutions(id) ON DELETE CASCADE
);
但後來我意識到我可能真的要創建一個表也有的評價。在「蠻力」解決方案,在我看來,是
CREATE TABLE SolutionRatings (
id INT PRIMARY KEY NOT NULL,
solution_id INT,
stars TINYINT,
FOREIGN KEY (solution_id) REFERENCES Solutions(id) ON DELETE CASCADE
);
CREATE TABLE ProblemRatings (
id INT PRIMARY KEY NOT NULL,
problem_id INT,
stars TINYINT,
FOREIGN KEY (problem_id) REFERENCES Problems(id) ON DELETE CASCADE
);
但我的直覺編程說有一個與我用複製粘貼寫的代碼兩個部分是幾乎相同的事實問題。但是,我想不出任何使用交叉表或類似的替代解決方案,它也允許我執行級聯刪除。例如,我知道我能做到
CREATE TABLE RatedTables (
id TINYINT PRIMARY KEY NOT NULL,
table_name VARCHAR(9)
);
INSERT INTO RatedTables (table_name) VALUES ('Problems','Solutions');
CREATE TABLE Ratings (
id INT PRIMARY KEY NOT NULL,
rated_table_id TINYINT NOT NULL,
stars TINYINT,
FOREIGN KEY (rated_table_id) REFERENCES RatedTables(id)
);
但隨後我怎麼會讓它這樣,如果有相應的Rating
個Solution
被刪除那麼這些評級會過於?????
如何在等級表中添加另一列problem_id int使用外鍵約束FOREIGN KEY(problem_id)參考問題(id)ON DELETE CASCADE –