programing

외부 키 참조 복합 기본 키

sourcetip 2022. 10. 2. 23:32
반응형

외부 키 참조 복합 기본 키

데이터베이스는 하드웨어 디바이스와 수집된 데이터에 대한 정보를 저장합니다.사용 가능한 하드웨어 디바이스를 저장하는 디바이스 테이블을 만들었습니다.

CREATE TABLE IF NOT EXISTS `devices` (
  `deviceID` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `deviceType` int(10) unsigned NOT NULL,
  `updateFrequency` int(10) unsigned NOT NULL,
  PRIMARY KEY (`deviceID`,`deviceType`)
)

디바이스ID는 실제 하드웨어 ID(1~12)에 대응합니다.하드웨어 디바이스에는 2종류가 있기 때문에 어떤 하드웨어 디바이스에 따라 0 또는 1이 되는 디바이스 타입을 작성하여 복합 프라이머리 키를 만드는 것이 적절하다고 생각했습니다.

나는 그 데이터를 저장하기 위해 다른 테이블을 만들었다.

CREATE TABLE IF NOT EXISTS `data` (
  `dataID` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `deviceID` int(11) unsigned NOT NULL,
  `payload` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
  PRIMARY KEY (`dataID`),
  KEY `fk_data_devices` (`deviceID`),
  CONSTRAINT `fk_data_devices` 
    FOREIGN KEY (`deviceID`) 
    REFERENCES `devices` (`deviceID`) 
    ON DELETE CASCADE
)

데이터 내부의 한 열에 있는 복합 키를 참조할 수 없는 것이 문제입니다.deviceType 및 외부 키 참조용 데이터 내부에 추가 열을 생성하여 디바이스를 할당하는 것이 더 합리적입니까?ID 및 deviceInside 디바이스를 다른 ID로 입력하고 해당 내부 데이터를 참조합니까?

잘 부탁드립니다!

컬럼에 복합 프라이머리 키가 있는 부모 테이블이 있습니다( )deviceID, deviceType). 자 테이블을 작성하려면 다음 작업을 수행해야 합니다.

  • 부모 테이블의 프라이머리 키의 일부인 각 컬럼에 대해 자녀 테이블에 1개의 컬럼을 만듭니다.(deviceID, deviceType)
  • 상위 테이블의 해당 열 태플을 참조하는 복합 외부 키 생성

고려사항:

CREATE TABLE IF NOT EXISTS `data` (
    `dataID` int(11) unsigned NOT NULL AUTO_INCREMENT,
    `deviceID` int(11) unsigned NOT NULL,
    `deviceType` int(10) unsigned NOT NULL,
    `payload` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
    PRIMARY KEY (`dataID`),
    CONSTRAINT `fk_data_pk` 
        FOREIGN KEY (`deviceID`, `deviceType`) 
        REFERENCES `devices` (`deviceID`, `deviceType`) 
        ON DELETE CASCADE
);

NB: 복합 외부 키 생성은 상위 테이블의 열 중 하나를 가리키는 두 개의 외부 키를 생성하는 것과 기능이 다릅니다.

부모 테이블의 다음 데이터가 지정됩니다.

deviceID  deviceType
1         0
2         1

각 열에 구분된 외부 키를 만들면 하위 테이블에 다음과 같은 값을 가진 레코드를 삽입할 수 있습니다.(1, 1), 또는(2, 0)이러한 특정 튜플은 소스 테이블에 존재하지 않기 때문에 복합 외부 키에서는 허용되지 않습니다.

언급URL : https://stackoverflow.com/questions/55543308/foreign-key-reference-composite-primary-key

반응형