1

gps 시스템에 대한 mysql 데이터베이스가 있습니다. 약 70 개의 테이블이 있습니다.데이터베이스 : 많은 양의 외래 키

테이블 중 하나는 차량이며 차량의 ID가 포함 된 열은 하나 뿐이며 기본 키입니다.

나머지 테이블에는 모두 외래 키인 vehicleId이라는 열이 있습니다.

외래 키가 하나 뿐인 테이블을 가리키는 것이 정상적인 경우 걱정되기 시작했습니다.

실제로 이것은 내 질문입니다. 하나의 기본 키만 가리키는 70 개의 외래 키가 있습니까?

P. 관계의 일부는 일대일이고 일부는 일대 다입니다.

답변

1

무엇보다 우선, 나는 당신이 어떤 종류의 관계형 데이터베이스 관리 시스템, 아마도 SQL을 사용하고 있다고 가정하고 있습니다.

'현실 세계'의 관계가 맞다면, 70 개의 테이블 각각의 각 행이 진정한 의미의 정보를 보유하고 있다면, '차량'테이블에서 하나 이상의 기본 키 값을 찾을 수 있습니다.

순수한 데이터베이스에서 Normalization 관점에서 일대일 테이블 매핑이 관련되어있는 경우 각 테이블의 열을 '차량'테이블로 이동할 수 있다고 주장 할 수 있습니다. 그러나 다른 일대일 테이블에 엄청난 양의 컬럼이 있다면 테이블을 읽으려는 사람이 다루기 힘들 수있는 것처럼 들립니다. (테이블을 직접 보는 데 관심이 있다고 가정하면 ... 이 모든 것이 어쨌든 응용 프로그램의 프론트 엔드에 의해 추상화되었거나 간단한 쿼리를 사용하여 많은 열이 포함 된 단일 테이블을 선택적으로 검사해야합니다.

또한 데이터베이스의 선택적으로 Denormalize 부분에 대한 좋은 성능상의 이유가 있습니다.

모두는 실제로 달성하려는 대상에 따라 다릅니다. 정규화 및 비정규 화에 대한 이론적 인 이해가 좋은 출발점 일 수 있습니다.

일반적으로 RDBMS의 경우 달리해야 할 적절한 이유가없는 한 기본적으로 정규화됩니다. 그리고 성능을 향상시키기위한 옵션으로 비정규 화 (Denormalization)를 고려하기 전에 인덱스를 제대로 작성하고 쿼리를 구조화해야합니다.

나는 귀하의 경우 제공된 정보에서 '차량'테이블에 일대일 테이블의 열을 옮기고 싶습니다.

+0

차량 테이블에서 해당 정보를 이동하면 50 열 이상이됩니다. –

+0

예, 그 자체로는 문제가되지 않습니다. 차량이 진실로 일대일의 50 가지 속성을 가지고 있다면, 괜찮습니다. 이렇게 말하면 많은 수의 열은 아직 조롱되지 않은 일대 다 관계가 더 있음을 암시 할 수 있습니다. 그러나 상황에 따라 달라집니다. – Holf

+0

정보의 일부는 화폐 거래에 관한 것이지만 때로는 다른 개발자에게 테이블에 대한 읽기 권한을 부여해야하지만 사장님은 돈에 대한 세부 정보를보고 싶지 않으므로 별도의 테이블에 있어야한다고 생각합니다.) –

1

당신이 인용 한 문제가 반드시 당신이 문제가 있다는 것을 의미하는 것은 아니지만 그것이 좋은 디자인이라는 것을 의미하지는 않습니다.

대체 방법은 무엇입니까? 70 개의 테이블에 차량 정보를 복제 하시겠습니까? 그건 나에게 좋은 생각 같지는 않은데.

ID가있는 단일 열이있는 차량 테이블을 이해하지 못합니다. 필요한 차량에 대한 의미있는 속성이 있습니까? VIN? 하다? 모델? 년? 차고 주소? 나는이 소리가 싫어. 나는이 기초에 당신의 디자인의 나머지를 혼자 질문 할 것입니다.

70 테이블은 이 아니며, 큰 수입니다.

정확히 무엇이 문제입니까? 과도한 JOIN 때문에 성능이 문제가된다는 것을 알고 있습니까? JOIN에있는 7 개 이하의 테이블은 일반적인 경험 법칙입니다.

모든 테이블이 이런 식으로 결합되는 것에 대해 걱정할 것입니다. 너무 얽혀있는 객체 모델과 동일한 이슈가 있습니다. 이 장소에 도착한 이유를 설명하기 위해 문제에 대한 자세한 내용을 설명하지는 않지만 자연스럽게 관련된 테이블 클러스터를 갖추려면 더 나은 디자인이 필요합니다. 모두에게 이야기하는 사람 모두 큰 테이블 일 수 있다고 느낍니다. 별로 좋지 않다.

+0

나는 그것이 옳지 않다고 걱정하기 시작했기 때문에 더 심리적 인 문제였습니다. –

0

데이터베이스에 저장할 모든 값을 관리하는 관계, 특성 및 특성을 식별하는 훌륭한 ER 모델이있는 경우. 엔터티의 각 인스턴스에 대해 고유 한 값을 가진 식별 열이있는 각 엔터티에 대한 테이블을 만듭니다.

관계에 대한 외래 키를 추가하십시오. 다 대다 관계의 경우 외래 키 쌍 (또는 삼중 항 등)을 보유 할 테이블을 추가하십시오. 일대일 관계의 경우 두 엔티티 테이블을 하나로 통합하는 것이 좋습니다. 관계가 선택 사항 인 경우 테이블을 별도로 유지하면서 다음 태그에 설명 된 기술을 사용할 수 있습니다.

이렇게하면 데이터베이스와 같은 스키마를 얻을 수 있습니다. 대부분의 목적. 그렇지 않은 경우 스키마 변경을 고려하십시오.

관련 문제