programing

다른 테이블을 참조하여 제약 조건을 확인

linuxpc 2023. 8. 24. 21:51
반응형

다른 테이블을 참조하여 제약 조건을 확인

테이블이 세 개 있습니다.

Processor with columns Name and Socket.
Motherboard with columns Name and Socket.
Build with columns Processor[references Processor(Name)] and Motherboard[references Motherboard(Name)]

빌드에 입력할 프로세서와 마더보드의 소켓이 동일한지 확인해야 합니다.제약 조건 검사에서 다른 값을 참조할 수 없기 때문에 대안을 찾고 있습니다.UDF 또는 트리거를 사용할 수 있다는 것을 알고 있지만, 저는 초보자이기 때문에 몇 가지 예제 코드가 도움이 되었으면 합니다.

감사해요.

트리거가 필요하지 않습니다.외부 키 제약 조건을 사용하여 이 작업을 수행할 수 있습니다.

  1. 프로세서에서 이름과 소켓 두 열에 대한 고유 키를 추가합니다.
  2. 마더보드에 이름 및 소켓 두 열에 대한 고유 키를 추가합니다.
  3. 빌드에서 Foreign KEY가 두 열을 참조하도록 합니다.Build에 Socket이라고 하는 열을 하나만 제공합니다.두 외국어 키 모두에서 사용합니다.따라서 동일해야 합니다.

다음은 다음과 같습니다.

CREATE TABLE `Processor` (
  `name` varchar(20) NOT NULL,
  `socket` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`name`),
  UNIQUE KEY `name` (`name`,`socket`)
);

CREATE TABLE `Motherboard` (
  `name` varchar(20) NOT NULL,
  `socket` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`name`),
  UNIQUE KEY `name` (`name`,`socket`)
);

CREATE TABLE `Build` (
  `Processor` varchar(20) DEFAULT NULL,
  `Motherboard` varchar(20) DEFAULT NULL,
  `Socket` varchar(20) DEFAULT NULL,
  CONSTRAINT `build_ibfk_1` FOREIGN KEY (`Processor`, `Socket`)
    REFERENCES `processor` (`name`, `socket`),
  CONSTRAINT `build_ibfk_2` FOREIGN KEY (`Motherboard`, `Socket`)
    REFERENCES `Motherboard` (`name`, `socket`)
);

이렇게 하면 원하는 비즈니스 규칙이 적용됩니다.외부 키는 다음을 요구합니다.Build.Socket양쪽의 소켓을 참조합니다.Processor그리고.Motherboard의 값은 하나만 있을 수 있습니다.Build.Socket의 일정한 열에.Build따라서 소켓은 두 테이블에서 동일해야 합니다.

언급URL : https://stackoverflow.com/questions/58918195/check-constraint-referring-to-other-table

반응형