나는 대학에서 비교적 신선하지 않기 때문에 관계형 데이터베이스에 대한 대부분의 친숙 함은 BCNF 또는 3NF에없는 것이 비극적 인 데이터베이스 과정에서 나온 것입니다. 확실히 그것은 극단적 인 것의 한 끝이지만, 직장에서 우리 팀은 그것을 완전히 반대쪽 끝으로 가져가는 것 같습니다.
마이크로 서비스 db 스키마에서 엔티티는 하나 이상의 테이블을 갖는 경우가 거의 없습니다. 일반적으로 다른 테이블로 정규화하는 모든 항목은 json 열에 저장됩니다. 나중에이 json의 속성 중 하나를 쿼리해야한다는 것을 알게되면 새 열이 추가되고 데이터가 두 위치에 저장됩니다 (예, 동일한 테이블의 두 개의 다른 열에).
많은 경우 이러한 json 컬럼은 확실히 이점이 있습니다. 해당 데이터를 쿼리 할 필요가없고 해당 데이터를 일방적으로 변경할 필요가없는 경우 (명백하게 예측할 수없는 것) 나쁜 생각이 아닙니다. 또한 많은 서비스는 서버를 보지 못하거나 필요한 디스크 공간이 불필요한 머신에서 호스팅되므로 데이터 복제가 큰 문제가되지 않습니다. (나는 일반적으로 철학에서 피하고 싶은 것이 있지만)
현재 우리는 자신이 소유 한 일련의 조건에 따라 규칙과 일치하는 서비스를 구축 한 다음 규칙이 참일 때 해당 규칙과 관련된 일련의 작업을 수행합니다 (예 : 모든 조건이 참). 이 서비스를 가장 즉시 구축하는 하위 팀은 스키마의 규칙에서 멀어지면 작업 및 조건을 정상화하는 데 상당한 이점이 있다고 생각합니다. 분명히이 테이블은 규칙 ID와 외래 키 관계를 유지합니다. 우리의 관점에서 우리는 조건에 대한 데이터 복제를 피할 수 있으므로 한 번만 평가할 수 있으며 모든 단일 규칙을 제거하고 메모리에서 검색하지 않고도 필요할 때 필요한 조건과 규칙을 쉽게 찾을 수 있습니다.
오늘 우리의 주요 엔지니어 중 한 명과 이야기하면서 그는이 스키마에서 멀어 지도록 노력했습니다. 우리가 실제로 필요로하지 않는 모든 방식으로 논쟁하려고하면 미래에 성능 문제가 발생할 것입니다. 우리가 소유하고있는 오래된 모놀리스를 참조하십시오. 그는 우리가하고있는 것을 "구식"이라고하고, json을 "새로운 방식"이라고하는 평평한 테이블을 언급했습니다. 그는 원 자성을 원하는 곳에서는 필요하지 않으며 쿼리 대신 메모리에서 더 많은 일을해야한다고 주장했습니다. 이것은 현재 많은 서비스가 따르는 디자인 원칙입니다. 우리는 데이터의 양이 크게 증가하여 쿼리를 빨리 유지해야 할 것으로 예상하지 않습니다. 우리가 예상하는 것은 규칙 평가 및 조치 수행에 많은 시간이 소요됩니다.
최근 몇 년 동안 비 관계형 데이터베이스가 널리 보급되었다는 것을 알고 있지만 외래 키 관계의 성능 영향에 대한 정보를 적극적으로 검색하더라도 많은 정보가 그의 사례를 보여주지 못합니다. 나는 그들이 문제를 일으킬 수있는 큰 트랜잭션을 도입하는 경향이 있다고 생각하지만 외래 키 자체와는 독립적 인 문제처럼 보입니다.
이것이 내 순진한가? 아니면 이것이 정말로 저와 저의 하위 팀이없는 것입니까? 필자는 그 해결책을 찾지 않아도되기 때문에 문제에 대한 자세한 정보를 명시 적으로 제공하지 않았습니다. 그것이 우리의 큰 팀에서 일반적인 경향을 감안할 때, 그들이 이것과 관련이 있다면 정말 궁금합니다.