CREATE TABLE IF NOT EXISTS QuestionBanks(
id INT IDENTITY,
name VARCHAR(255) NOT NULL
);
CREATE TABLE IF NOT EXISTS QuestionTypes(
id INT IDENTITY,
name VARCHAR(255) NOT NULL
);
CREATE TABLE IF NOT EXISTS Questions(
bank_id INT NOT NULL,
id INT NOT NULL,
type_id INT NOT NULL,
content JSON NOT NULL,
answer JSON NOT NULL,
PRIMARY KEY (bank_id, id),
CONSTRAINT fk_bank FOREIGN KEY (bank_id) REFERENCES QuestionBanks(id),
CONSTRAINT fk_type FOREIGN KEY (type_id) REFERENCES QuestionTypes(id)
);
if (NEW_TYPE is not present in QuestionTypes) {
insert NEW_TYPE into QuestionTypes
}
type_id = get ID for NEW_TYPESELECT id FROM QuestionBanks WHERE name = ?SELECT id FROM FINAL TABLE (
INSERT INTO QuestionBanks(name) VALUES (?))@Data
public class Question {
private Long id;
private String type;
private String content;
private String answer;
}INSERT INTO Questions VALUES
(?, ?, (SELECT id FROM QuestionTypes WHERE name = ?),
? FORMAT JSON, ? FORMAT JSON);INSERT INTO Questions VALUES
(?, ?, (SELECT id FROM QuestionTypes WHERE name = ?), // or 'INSERT INTO QuestionTypes' if absent and use the generated id
? FORMAT JSON, ? FORMAT JSON);INSERT INTO Questions VALUES (
?,
?,
(WITH S(NAME) AS (VALUES ?)
SELECT id FROM QuestionTypes JOIN S ON QuestionTypes.name = S.NAME
UNION SELECT id FROM FINAL TABLE (
MERGE INTO QuestionTypes T USING S ON T.name = S.NAME WHEN NOT MATCHED THEN INSERT (name) VALUES (S.NAME)
)
),
? FORMAT JSON,
? FORMAT JSON
);ALTER TABLE QuestionTypes ADD UNIQUE(name); (WITH S(NAME) AS (VALUES ?)
SELECT id FROM FINAL TABLE(
MERGE INTO QuestionTypes T USING S ON T.name = S.NAME WHEN NOT MATCHED THEN INSERT (name) VALUES (S.NAME)
)
UNION
SELECT id FROM QuestionTypes JOIN S ON QuestionTypes.name = S.NAME
)