cIonecoder / expedia

Expedia Clone Coding - Portfolio
0 stars 1 forks source link

User/Partner Schema #2

Open BAEKJungHo opened 2 years ago

BAEKJungHo commented 2 years ago

User Account

CREATE TABLE IF NOT EXISTS user_account(
    id           INT(11)  unsigned auto_increment COMMENT '유저 계정 일련번호',
    email        VARCHAR(255) NOT NULL COMMENT '이메일',
    password     VARCHAR(255) NOT NULL COMMENT '패스워드',
    external_id  VARCHAR(255) NOT NULL COMMENT 'OAuth 연동 아이디',
    active       TINYINT(1) NOT NULL DEFAULT 1 COMMENT '활성화 여부',
    created_at  DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '등록일시',
    created_by  VARCHAR(100) NOT NULL COMMENT '등록자',
    last_modified_at  DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '수정일시',
    last_modified_by  VARCHAR(100) NOT NULL COMMENT '수정자',
    PRIMARY KEY (id),
    UNIQUE (email)
) DEFAULT character set utf8mb4 collate utf8mb4_unicode_ci;

external_id 에 대한 필요성은 고민이 필요해 보임

User Info

CREATE TABLE IF NOT EXISTS user_info(
    id              INT(11)  unsigned auto_increment COMMENT '유저 정보 일련번호',
    account_id  INT(11) unsigned NOT NULL COMMENT '유저 계정 일련번호',
    last_name  VARCHAR(50) NOT NULL COMMENT '성', 
    first_name VARCHAR(100) NOT NULL COMMENT '이름',
    birth_year CHAR(4) DEFAULT NULL COMMENT '생년월일 연도',
    birth_month CHAR(2) DEFAULT NULL COMMENT '생년월일 월',
    birth_date CHAR(2) DEFAULT NULL COMMENT '생년월일 일',
    gender CHAR(1)  DEFAULT NULL COMMENT '성별',
    phone_country_code VARCHAR(20) DEFAULT NULL COMMENT '연락처 국가 코드',
    phone      VARCHAR(20) DEFAULT NULL COMMENT '연락처',
    emergency_phone_country_code VARCHAR(20) DEFAULT NULL COMMENT '비상 연락처 국가 코드',
    emergency_phone      VARCHAR(20) DEFAULT NULL COMMENT '비상 연락처',
    created_at  DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '등록일시',
    created_by  VARCHAR(100) NOT NULL COMMENT '등록자',
    last_modified_at  DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '수정일시',
    last_modified_by  VARCHAR(100) NOT NULL  COMMENT '수정자',
    PRIMARY KEY (id),
    FOREIGN KEY (account_id) REFERENCES user_account(id)
) DEFAULT character set utf8mb4 collate utf8mb4_unicode_ci;

Expedia Group Account

CREATE TABLE IF NOT EXISTS expedia_group_account(
    id           INT(11)  unsigned auto_increment COMMENT '파트너 계정 일련번호',
    name     VARCHAR(255) NOT NULL COMMENT '사용자 이름',
    email        VARCHAR(255) NOT NULL COMMENT '이메일',
    password     VARCHAR(255) NOT NULL COMMENT '패스워드',
    active       TINYINT(1) NOT NULL DEFAULT 1 COMMENT '활성화 여부',
    created_at  DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '등록일시',
    created_by  VARCHAR(100) NOT NULL COMMENT '등록자',
    last_modified_at  DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '수정일시',
    last_modified_by  VARCHAR(100) NOT NULL COMMENT '수정자',
    PRIMARY KEY (id),
    UNIQUE (email)
) DEFAULT character set utf8mb4 collate utf8mb4_unicode_ci;

Expedia Group Info

CREATE TABLE IF NOT EXISTS expedia_authentication.expedia_group_info(
    id              INT(11)  unsigned auto_increment COMMENT '파트너 정보 일련번호',
    account_id  INT(11) unsigned NOT NULL COMMENT '파트너 계정 일련번호',
    group_type ENUM('EXPEDIA', 'TRIVAGO', 'HOTELS.COM') COMMENT '그룹 유형', 
    active       TINYINT(1) NOT NULL DEFAULT 1 COMMENT '활성화 여부',
    created_at  DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '등록일시',
    created_by  VARCHAR(100) NOT NULL COMMENT '등록자',
    last_modified_at  DATETIME(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) COMMENT '수정일시',
    last_modified_by  VARCHAR(100) NOT NULL  COMMENT '수정자',
    PRIMARY KEY (id),
    FOREIGN KEY (account_id) REFERENCES expedia_group_account(id)
) DEFAULT character set utf8mb4 collate utf8mb4_unicode_ci;

User Point

point-service 추가 해야할 듯 reward 도 같이 갈지는 고민 필요

shbada commented 2 years ago

USER_ACCOUNT, USER_INFO 의 PK 'id' 를 숙박업체의 경우 'idx'로 두었는데, 이는 하나의 서비스 안에서 통일하는게 나아보이는데, id 로 지정하신 이유가 있으실까요?

아래 질문은 Expedia 앱 안의 메뉴로 확인했습니다! [계정] 탭 > 이메일 및 비밀번호 / 개인 정보 메뉴로 분리하신것으로 보여져서 항목은 잘 정리된 것 같습니다!

USER_ACCOUNT, USER_INFO 로 테이블을 나누셨는데, USER의 계정 정보와 유저의 기본 정보로 나눠진 이유
EMAIL이 로그인할 때의 ID로 보여지는데, 유저의 이메일은 ID로 쓰이는 이메일 뿐인가요? 담당자 이메일 또는 대표 이메일이 별도로 없이 관리가 USER_ACCOUNT의 'EMAIL'로만 관리 여부
BAEKJungHo commented 2 years ago

USER_ACCOUNT, USER_INFO 의 PK 'id' 를 숙박업체의 경우 'idx'로 두었는데, 이는 하나의 서비스 안에서 통일하는게 나아보이는데, id 로 지정하신 이유가 있으실까요?

이건 통일하면 되는 부분이라 ㅎㅎ id 로 한 이유는 idx 는 일단 index 의 축약어 이기도 하고, 보통 JPA 를 쓰게되면 엔티티의 PK 컬럼을 id 로 잡는 경우가 많아서 id 로 선언해줬습니다.

EMAIL이 로그인할 때의 ID로 보여지는데, 유저의 이메일은 ID로 쓰이는 이메일 뿐인가요? 담당자 이메일 또는 대표 이메일이 별도로 없이 관리가 USER_ACCOUNT의 'EMAIL'로만 관리 여부

일반 유저의 경우 ID = EMAIL 로 사용하면 될 것 같습니다 :)

반면 관리자의 경우에는 Expedia 기준 내 숙박 시설 등록을 클릭하면 헤더 좌측 상단을 보면 Partner Central 이라고 되어있습니다. 실제로 Partner Central 에 가입을 해야지 숙박 관련한 관리자 기능들을 사용할 수 있는 것 같습니다.

제가 일반 유저로 가입한 아이디가 Partner Central 에는 로그인이 안됩니다.

호텔스 닷컴 숙박 등록 화면을 보면 익스피디아와 동일합니다.

따라서, 익스피디아 그룹에 속하는 브랜드들은 Expedia Partner central Id 를 사용하여 관리할 수 있는 것 같습니다.

그래서 일반 유저를 관리하는 user_account 와 expedia partner central 에 관한 계정을 관리하는 테이블이 분리되어야 할 것 같습니다.

shbada commented 2 years ago

아하 넵! 답변 내용 이해했습니다~

USER의 상태 정보(탈퇴 등)에 관련된 기능 제공은 없을까요?

BAEKJungHo commented 2 years ago

USER의 상태 정보(탈퇴 등)에 관련된 기능 제공은 없을까요?

감사합니다 :) ~ active 정도만 추가해 놓을게요. History Table 은 제외 시키겠습니다.

shbada commented 2 years ago

정호님~ Expedia Group Account 관련 스키마는 잘 정리해주신거 같아요! 한가지 질문이 있는데,

expedia_group_account, expedia_group_info 두 테이블 모두 '활성화 여부 컬럼'이 존재하는 이유가 뭔가요?

BAEKJungHo commented 2 years ago

expedia_group_account, expedia_group_info 두 테이블 모두 '활성화 여부 컬럼'이 존재하는 이유가 뭔가요?

INFO 는 내가 'EXPEDIA', 'TRIVAGO', 'HOTELS.COM' 에 가입한 상태에서, TRIVAGO 를 탈퇴하는 경우, 비활성화 처리하기 위한 컬럼이고, account 는 전체 탈퇴 개념으로 넣어두었습니다 :)