Spring Data Jpa 在不同表的属性上添加SQL约束

cwtwac6a  于 2023-03-30  发布在  Spring
关注(0)|答案(1)|浏览(109)

我有table

Question (int id,string question, int questionNumber)
Option (int id, string option, int optionNumber)

如何将对(questionNumber, optionNumber)约束为唯一?
我如何通过Spring data JPA应用它?

pwuypxnk

pwuypxnk1#

您有业务密钥;问题编号和选项编号。问题编号必须唯一标识问题。选项编号必须唯一标识问题中的选项。
这将是沿着如下:

CREATE TABLE question
(
  question_number  INT            NOT NULL,
  question         VARCHAR(1000)  NOT NULL,
  PRIMARY KEY (question_number)
);

CREATE TABLE option
(
  question_number  INT            NOT NULL,
  option_number    INT            NOT NULL,
  option           VARCHAR(1000)  NOT NULL,
  PRIMARY KEY (question_number, option_number),
  FOREIGN KEY (question_number) REFERENCES question(question_number)
);

但是,您希望将技术ID添加到表中,并且似乎希望将它们用作主键,这使得这有点复杂。

CREATE TABLE question
(
  id               INT            NOT NULL,
  question_number  INT            NOT NULL,
  question         VARCHAR(1000)  NOT NULL,
  PRIMARY KEY (ID),
  CONSTRAINT uq_question UNIQUE (question_number)
);

CREATE TABLE option
(
  id               INT            NOT NULL,
  question_id      INT            NOT NULL,
  option_number    INT            NOT NULL,
  option           VARCHAR(1000)  NOT NULL,
  PRIMARY KEY (ID),
  FOREIGN KEY (question_id) REFERENCES question(id),
  CONSTRAINT uq_option UNIQUE (question_id, option_number)
);

对于建立在技术主键上的数据库,您希望ID和业务键都是唯一的,因此数据库中的唯一约束更多。

相关问题