>

앱을 빌드하는 동안 문제가 발생했습니다. 정보가있는 데이터베이스 테이블이 있으며 다른 응용 프로그램에 재사용하고 싶습니다. 주로 인증 및 사용자 권한을 위해.

그러므로 데이터베이스를 사용자 데이터 (다른 응용 프로그램에 필요한 데이터)와 응용 프로그램 관련 데이터 (데이터에만 필요한 데이터)에 대해 두 개로 분할하기로 결정한 것입니다.

어떤 경우에는 다른 데이터베이스의 한 데이터베이스에서 외래 키를 참조해야합니다. 데이터베이스가 동일한 연결에있는 동안에는 아무런 문제가 없었습니다. 나는 그렇게했다 :

CREATE TABLE `database1`.`table1` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `foreign_key` int(10) unsigned DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `table1_foreign_key_foreign` (`foreign_key`),
  CONSTRAINT `table1_foreign_key_foreign` FOREIGN KEY (`foreign_key`) REFERENCES `database2`.`table2` (`id`)
);

이제 내 문제이다. Docker 를 알게되었습니다  각 데이터베이스에 대한 컨테이너를 만들고 싶습니다. 이해가 정확하면 각 컨테이너는 다른 연결 역할을합니다.

다른 데이터베이스 연결에서 외래 키를 참조 할 수 있습니까?

하나의 Docker 에서 외래 키를 참조하는 다른 방법이 있습니까?  다른 용기?

의견이나 의견은 대단히 감사하겠습니다.

  • 답변 # 1

    외부 키 데이터베이스 간 경계를 갖는 것은 여러 가지 이유로 나쁜 생각입니다.

    <올>

    스케일 아웃 : 데이터베이스를 동일한 인스턴스에 연결합니다. 데이터베이스를 새 인스턴스로 옮기는 것이 훨씬 더 복잡해지고 연결된 서버에서 실행되는 FK 제약 조건을 끝내고 싶지 않습니다. 안돼 하지 마라.

    재해 복구 : 재해 복구 프로세스에는 상당한 위험이 있습니다. 백업이 정확히 같은 시점에 데이터를 캡처하고 있습니까? 그렇지 않으면 복원 후 관련 데이터가 일치하지 않을 위험이 있습니다. 몇 초의 차이만으로도 관계의 무결성이 무효화 될 수 있습니다.

    다른 서브 시스템 : 각 데이터베이스에는 자원이 필요합니다. 일부는 명시 적이며 다른 것은 공유되지만 인스턴스에서 실행중인 각 데이터베이스에 대한 오버 헤드가 있습니다.

    보안 : 각 데이터베이스에는 자체 보안 구현이 있습니다. 다른 로그인 및 액세스 권한. DATA 데이터베이스의 사용자가 USER 데이터베이스에 대한 값을 찾아야하는 경우 두 가지 모두에서 권한을 관리해야합니다. 데이터베이스를 기준으로 데이터를 분리한다고해서 보안이 해결되거나 향상되는 것은 아니며 더 복잡해집니다. 중요한 데이터의 보안을 관리하기위한 오버 헤드는 변경되지 않지만 데이터 위치가 아닌 데이터를 기반으로 사용자 및 권한을 검토하고 관리해야합니다. 단일 데이터베이스 내에서 정확히 동일한 보안 제어를 구현할 수 있어야합니다.

  • 답변 # 2

    아니요, 불가능합니다. 다른 DB 인스턴스 (또는 귀하의 경우 다른 Docker 컨테이너)에 FK를 만들 수 없습니다. 응용 프로그램 수준에서이 확인을 시도 할 수 있습니다.

관련 자료

  • 이전 Azure Stream Analytics에서 Event Hub로 출력 배치 크기를 설정 하시겠습니까?
  • 다음 python pandas - 주어진 순서에 따라 정렬 된 파일 이름이있는 열