문제

서버 및 데이터베이스 인벤토리 용 데이터베이스를 설계하려고 노력하고 있으며 좋은 데이터베이스 디자인을 찾고 있습니다. 서버 클러스터, 독립형 서버 및 데이터베이스에 대한 테이블이 있습니다. 데이터베이스에서 다음 관계를 나타내고 싶습니다.

클러스터에서 서버로의 하나에서 많은 관계.
데이터베이스에서 클러스터/서버에 이르기까지 하나에서 많은 관계.

클러스터와 서버가 별도의 테이블에 있고 클러스터가 서버로 구성되어 있기 때문에 두 번째 관계에서 어려움이 있습니다. 이 관계를 대표하는 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

상황에 대한 관계 적 관점에서 이것을 가지고있는 것 같습니다.

Cluster : name, other attributes of cluster

Server : name, optional FK to cluster, other attributes of a server

Database : name, (FK to cluster OR FK to server)

문제는 관계 기술이 깨끗하게 반영되지 않는 다소 복잡한 실제 상황을 가지고 있다는 것입니다.

Host -- an abstract superclass for places a database can run.

Cluster (extends Host) : name, etc.

Server (extends Host) : name, optional FK to cluster.

Database : FK to Host

이런 종류의 "하위 엔티티"문제를 처리하기위한 몇 가지 선택이 있습니다.

  1. 호스트, 클러스터 및 서버를 단일 테이블로 붕괴시킵니다. 이로 인해 호스트 (클러스터)와 호스트 (서버) 사이의 재귀 관계가 발생합니다. 이것은 일종의 성가 시지만 호스트, 클러스터 및 서버를위한 단일 테이블을 만듭니다. 결과 테이블에는 많은 널이 많이 있습니다 (클러스터 행은 하나의 열을 사용하고 서버 행은 다른 열 세트를 사용합니다.) 호스트의 하위 엔티티를 구별하려면 열을 추가해야합니다.

  2. 호스트 정보를 클러스터 및 서버로 푸시하십시오. 호스트 테이블에 공통 정보가 많고 클러스터 또는 서버 테이블에 서브 클래스 별 정보가 거의 없을 때 유용합니다. 클러스터 및 서버 테이블은 몇 개의 열이 다른 매우 유사하게 보입니다 (본질적으로 호스트 클론).

  3. 호스트의 판별자를 기반으로 (호스트와 클러스터) 또는 (호스트 및 서버) 사이에 조인을 사용하십시오. 상당히 복잡하지만 모든 데이터베이스가 호스트에 결합되기 때문에 이것은 잘 확장되며, 호스트의 전체 목록은 클러스터에 가입하는 서버 플러스 호스트에 가입하는 호스트의 유니언입니다.

  4. 데이터베이스에서 옵션 FK 필드를 사용하십시오. 이를 위해서는 데이터베이스에 가입 한 클러스터 Plus 데이터베이스가 서버에 가입하여 전체 데이터베이스 목록을 얻을 수 있습니다. 각 데이터베이스에는 두 개의 FK 필드에서 널 값의 다양한 조합을 구별 할 수 있도록 차별기가 있어야 할 수도 있습니다. 4 가지 가능한 조합이 있으며 그 중 2 개는 합리적이며 2 개는 금지 될 수 있습니다. 단순히 두 개의 nullable FK를 사용하려고 시도하는 것은 일반적으로 잘 작동하지 않으므로 종종 데이터베이스의 데이터베이스에서 데이터베이스에서 데이터베이스에서 데이터베이스에서 데이터베이스에서 데이터베이스를 분리하여 데이터베이스에서 할당되지 않은 데이터베이스에서 데이터베이스에서 할당되지 않은 다른 상태에서 알 수없는 다른 상태에서 알 수없는 데이터베이스에서 데이터베이스가 필요합니다. 관련 있는.

다른 팁

옵션 1 : 데이터베이스 테이블에 두 개의 필드가 있습니다. 하나는 서버를, 다른 하나는 클러스터를 나타냅니다. 그들 중 하나를 null로 유지하십시오.

옵션 2 : 또 다른 접근 방식은 각 독립형 서버의 클러스터 항목을 추가하고 해당 테이블에만 연결하는 것입니다.

옵션 1은 실제로 가장 깨끗한 솔루션이 아닙니다 (주석에 동의합니다). 옵션 2로 가십시오 :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top