Database 설계 및 모델
데이터 설계 구조
데이터 설계 구조(Data Design Structure)는 데이터베이스에서 데이터를 효과적으로 구조화하고 조직화하는 과정과 방법을 의미한다. 설계구조는 데이터베이스의 성능, 일관성, 확장성 및 유지보수성에 영향을 미친다. 데이터를 효과적으로 관리하기 위해 잘 설계된 데이터베이스 구조가 필요한다.
첫 번째 단계는 개념적 데이터 모델링으로, 이는 비즈니스 요구사항을 분석하여 엔터티, 속성, 관계 등을 정의하는 과정이다. 이 단계에서는 ERD(Entity-Relationship Diagram)를 사용하여 엔터티 간의 관계를 시각적으로 표현하고, 비즈니스 요구사항을 모델링한다.
다음 단계는 논리적 데이터 모델링이다. 이 단계에서는 개념적 모델을 바탕으로 테이블, 열, 관계 등 구체적인 데이터베이스 객체를 정의하는데, 과정에서는 정규화를 통해 데이터 중복을 최소화하고 일관성을 유지한다. 데이터베이스 정규화는 중복을 최소화하고 데이터 구조를 최적화하는 과정인데, 이를 위해 제1정규형, 제2정규형, 제3정규형 등의 정규형을 적용하여 데이터를 정리한다.
세 번째 단계는 물리적 데이터 모델링이다. 이 단계에서는 논리적 모델을 특정 DBMS에 맞게 변환하여 물리적 구조를 설계한다. 테이블의 데이터 타입, 인덱스, 제약 조건 등을 정의하여 데이터 접근 성능을 최적화하는 작업이 이루어진다.
테이블 설계는 데이터베이스의 핵심적인 부분인데, 각 테이블은 특정 엔터티를 나타내며, 테이블의 열은 속성을, 행은 레코드를 나타낸다. 이때 이터 검색 및 조회 성능을 향상시키기 위해 적절한 인덱스를 정의한다. 또한, 기본키와 외래키를 정의하여 데이터의 무결성을 유지하고, 데이터 간의 관계를 설정한다. 데이터 무결성은 정확성, 일관성, 유효성이 유지지되는것으로 기본키, 외래키, 고유 제약 조건 등을 사용하여 유지된다. 이를 통해 데이터의 일관성을 유지하고 부정확한 데이터를 방지한다.
마지막으로, 보안 및 권한 관리는 데이터에 대한 접근 권한을 설정하고 관리하는 과정해야한다.. 특히 민감한 데이터에 대한 보안을 구축하는 것이 중요하다. 이렇게 각 단계를 거쳐 데이터베이스 설계가 완성된다. 그런데, 고도화 혹은 업데이트가 되면 당연히 설계구조가 추가된다. 변경될시엔 복잡해진다..
데이터 모델
-관계형 데이터베이스 (RDBMS)
관계형 데이터베이스는 테이블 기반의 데이터 모델을 사용하는 데이터베이스 시스템이다. 이 모델에서 데이터는 정형이고 구조화된 테이블에 저장되며, 테이블 간의 관계를 유지한다. 관계형 데이터베이스 시스템은 SQL(Structured Query Language)을 사용하여 데이터를 조작하고 조회하며, 데이터의 무결성을 유지하기 위해 ACID 속성을 준수한다. MySQL, PostgreSQL, Oracle Database, Microsoft SQL Server 등이 전통적인 관계형 데이터베이스다.
-NoSQL 데이터베이스
NoSQL은 "Not Only SQL"의 약어로 비관계형(non-relational)이다. 관계형 데이터베이스의 한계를 극복하고 특정 요구 사항을 충족하기 위해 개발된 다양한 형태의 데이터베이스다. NoSQL 데이터베이스는 다양한 모델을 사용할 수 있고 스키마가 동적이거나 덜 제한적이다.
NoSQL은 대규모 데이터 처리, 빠른 데이터 쓰기, 유연한 스키마 등에 중점을 두고 있어, 비정형 데이터나 데이터 구조의 자주 변경되는 환경에서 효과적이다.
*NoSQL의 종류로는 MongoDB(문서 지향), Cassandra(와이드 칼럼), Redis(키-값 스토어), Neo4j(그래프 데이터베이스)
요약하면, 관계형 데이터베이스는 정형이고 구조화된 데이터를 테이블에 저장하며 SQL을 사용하여 관리하는 시스템이고, NoSQL 데이터베이스는 다양한 모델을 사용하며 스키마의 유연성과 확장성을 강조하는 데이터베이스를 의미한다.
두 유형은 프로젝트의 특정 요구 사항, 규모, 성능, 데이터 구조의 유연성 등에 따라 다르다.
특성 | 관계형 데이터베이스 (RDBMS) | NoSQL 데이터베이스 |
데이터 모델 | 테이블 기반 (정형, 구조화된 데이터) | 다양한 모델 (문서, 키-값, 와이드 칼럼 등) |
스키마 | 고정 스키마 (미리 정의된 데이터 구조) | 동적 스키마 (자유롭게 변경 가능) |
쿼리 언어 | SQL | 다양한 쿼리 언어 (종류에 따라 다름) |
트랜잭션 지원 | ACID 속성을 준수 | ACID를 완전하게 준수하지 않을 수 있음 |
확장성 | 주로 수직 확장 (성능 향상을 위한 서버 업그레이드) | 주로 수평 확장 (샤딩, 분산 환경에서 확장) |
용도 | 전통적인 비즈니스 응용 프로그램, 정형화된 데이터 | 대규모 데이터셋, 실시간 애플리케이션, 유연한 데이터 구조가 필요한 경우 |
적합한 데이터 형태 | 정형 데이터 (테이블, 열) | 비정형 데이터 및 구조의 변경이 빈번한 데이터 |
예시 데이터베이스 | MySQL, PostgreSQL, Oracle Database, SQL Server 등 | MongoDB, Cassandra, Redis, Neo4j 등 |