데이터 아키텍쳐는 말 그대로,
회사에서 데이터를 사용하고 구조화하는 작업을 의미합니다.
가장 대표적인 예시로 CRUD matrix를 들 수 있습니다.
CRUD matrix를 통해 업무활동과 데이터 엔티티 간 상호작용성을 정의하고 정렬화를 합니다.
그 이후 정렬화된 업무활동과 데이터 엔티티를 친화성 묶음화를 통해 clustering하게 됩니다.
이렇게 묶음화한 영역을 비즈니스 영역이라 하며, 연관성이 있는 비즈니스 영역을 일괄적으로 모아 프로젝트화 할 수 있습니다.
혹은 비즈니스 영역에서 데이터스토어로 분류할 수 있고, 향후 DB로 구축하거나 profile로 관리할 수 있습니다.
데이터 스토어를 기반으로 데이터를 관리하기 위한 환경구축
데이터 아키텍쳐를 통해 엔티티 유형의 인스턴스를 정의하고, 데이터스토어를 산출합니다.
이를 기반으로 데이터를 정의하고 관리하는 DBMS, Data Base Management System 즉 기술환경을 고려하는 과정을 수행합니다.
DBMS를 구축하기 전에 몇가지 고려사항을 먼저 확인해야 합니다.
Table은 Entity, Column은 Attribute
데이터의 엔티티는 데이터 개념적으로 정의하기 위한 하나의 인스턴스이고, 이러한 인스턴스들을 데이터 유형 및 의미에 따라 분류하는 단위가 속성입니다.
예를 들어 아래와 같이 제품이라는 엔티티가 있다면, 화장품이나 TV 등 여러 제조회사의 제품들이 인스턴스가 될 것입니다.
이러한 인스턴스들의 유형에 따라 제품ID, 제품명, 가격 등으로 분류할 때의 항목이 속성입니다.
쉽게 말하면 엔티티는 Table로, 속성은 Column으로 나타낼 수 있고, DB을 구축하기 전에 반드시 이해한 후 시행되어야 합니다.
※MySQL DBMS를 사용하여 SQL 쿼리를 작성하는 것으로 가정하면,
CREATE TABLE product (
PRODUCT_ID int,
PRODUCT_NAME varchar(50),
PRODUCT_PRICE int
);
식별/비식별 관계, 연결비율(관계비), 주키/외래키의 설정이 중요합니다.
위와 같은 2개의 엔티티가 있다고 가정해보겠습니다.
식별, 비식별 관계
데이터 모델을 구축할 때, 관계성이 있는 엔티티들의 관계에 참여하는 엔티티들의 연결 비율 및 관계성에 따라 관리를 하게 됩니다.
이를 MySQL와 같은 DBMS에서 DB를 구축하는 관점에서 보면, 여러 table을 구성하고 데이터 관리 방식에 따라 여러 table들을 일괄적으로 취합하는 것과 같습니다.
이러한 과정에서 각 엔티티(table)들은 연관관계가 생기는 시점이 발생할 수 있는데, 이때 연관관계가 생기는 엔티티의 관계를 식별관계라 합니다.
식별관계의 엔티티들은 서로의 table에서 유일한, 단 하나만 존재하는 속성을 주키(Primary key)로 정하고 이를 다른 table과 이어주기 위한 외래키(Foreign key)까지 선별하는 과정이 추가적으로 필요합니다.
각 table의 연관관계가 존재하지 않을 경우 비식별관계라 합니다.
연결비율, 관계비
식별관계를 가지는 table들은 엔티티의 인스턴스간 관계에 참여하는 개수에 따라 관계차수(Cardinality)를 설정하고, 이에 따른 관계비율을 나타낼 수 있습니다.
DB구축시 가장 많이 활용되는 1:N관계를 예를 들어 보겠습니다.
위 예시에서 판매점 엔티티와 제품 엔티티가 있을때, 하나의 판매점 인스턴스(ex. 홍익돈가스)가 제품 인스턴스(치즈돈가스, 치킨돈가스 등) 여러 개와 관계를 가지고 있습니다.
이처럼 하나의 인스턴스와 여러 다른 인스턴스들의 연결 관계가 구축될 경우를 1:N 관계라 합니다.
이 경우 table의 외래키가 서로 1개씩 연결되어 있으며, 하나의 판매점 인스턴스가 주체(mandatory)가 되어 제품 인스턴스의 여러개(optionary)를 활용할 수 있는 쿼리를 작성할 수 있는 형태가 됩니다.
주키, 외래키
각 엔티티(table)들의 연관관계가 생기는 시점이 발생하였을때, DB관리자가 각 table에 일괄(동시)적으로 접근할 수 있는 방법이 필요하게 됩니다.
이를 위해 먼저 각 table에서 유일성을 가지는 속성을 주키(Primary key)로 설정하고, 이 주키로 table을 연결할 수 있도록 외래키(Foreign key)로 설정하여 관리할 수 있습니다.
다시 돌아와 이 2개의 엔티티를 구성하는 Query문 예시를 작성해보겠습니다.
※MySQL DBMS를 사용하여 SQL 쿼리를 작성하는 것으로 가정하였습니다.
※이해를 높이기 위해, 위 엔티티들은 서로 식별관계이지만 조건상 연결된 key가 없기 때문에 임의로 만들어 구성하였습니다.
CREATE TABLE SELLER (
SELLER_ID int,
SELLER_NAME varchar(50),
SELLER_SERIAL_NUMBER int auto_increment primary key
)
CREATE TABLE PRODUCT (
PRODUCT_ID int,
PRODUCT_NAME varchar(50),
PRODUCT_PRICE int
SELLER_SERIAL_NUMBER int not null,
foreign key (SELLER_SERIAL_NUMBER)
references SELLER(SELLER_SERIAL_NUMBER)
)
SELLER table의 SELLER_SERIAL_NUMBER를 주키로 설정하였고,
해당 table과 optinary 관계인 table에서 해당 속성을 foreign key를 사용하여 연결관계를 맺어주었습니다.
엔티티관계에 대한 정의(정보공학 표기법)
https://parksrazor.tistory.com/500
https://moonibot.tistory.com/36
연결비율 관련한 정보공학 표기법
https://thebook.io/006977/ch05/02-04/
key values
https://jerryjerryjerry.tistory.com/49
데이터모델링의 개념, RDBMS를 통한 데이터 관리를 위해 실무적으로 활용하기
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=sinabin&logNo=221635787496
https://hec-ker.tistory.com/68