GH GambleHub

데이터 정규화

1) 목적

정규화는 업데이트의 중복 및 이상을 제거하고 균일 한 디렉토리 및 키를 설정하며 데이터를 일관되고 저렴하게 유지 관리합니다. iGaming에서는 GGR/NGR, AML/RG 분석, 규제보고, 사기 방지 및 ML에 중요합니다.

2) 우리가 정규화하는 곳

청동 (원시): 정규화되지 않음-법의학 (추가 전용) 과 같은 저장.
은 (깨끗함/준수): 기본 정규화 (3NF/BCNF, 디렉토리, 키, SCD).
금 (서브): 목표 상점-읽기/BI에 대한 통제 된 비정규화가 가능합니다.

3) 기본 원칙

1. 스키마 우선 테이블에는 명시 적 스키마와 키가 있습니다.
2. 단일 식별자: 'user _ pseudo _ id', 'setion _ id', 'game _ id', 'provider _ id', 'tragement _ id'.
3. 일반적인 디렉토리: 통화, 시장/관할 구역, KYC/RG 상태, 게임 제공 업체, 트래픽 채널.
4. 시간 및 통화: '이벤트 _ time' (UTC) 을 저장하고 정규화 된 'amount _ base' + 'fx _ source'.
5. 진화: 시맨틱 버전, "자동" 중단없이 호환 가능한 변경 사항 만 있습니다.
6. PII 최소화: 사용자 - pseudo-ID를 통한; 매핑은 별도로 저장되며 액세스가 제한됩니다.

4) 정상적인 형태 빠르게

1NF: 원자 값, 열에 배열 없음 (배열 → 하위 테이블).
2NF 속성은 전체 화합물 키에 따라 다릅니다.
3NF: 전이 종속성이 없습니다 (속성은 키에만 따름).
BCNF: 각 결정 요인이 핵심입니다. "커널" (결제/게임 플레이) 에 사용하십시오.

실습: 실버 모델의 결제 및 게임 활동은 최소 3NF를 유지합니다. 참고 도서 및 참조 테이블에 대한보다 엄격한 BCNF.

5) 참조 도메인 모델 (실버)

5. 1 참고서

'어두운. 사용자 (의사 ID, 국가, 연령 범위, RG 상태).
'어두운. 게임 '(게임 _ id, 제공자 _ id, 장르, RTP, 변동성).
'어두운. 공급자 (provesser _ id, 유형, 라이센스).
'어두운. 시장 (관할권 코드, 규제 기관).
'어두운. fx _ rates '(날짜, ccy _ from, ccy _ to, rate, fx _ source).

5. 2 사실 (좁은 이벤트/트랜잭션 테이블)

'사실. 결제 '(trange _ id, user _ pseudo _ id, m액 _ orig, 통화, m액 _ base, 시장, 이벤트 _ time, psp _ ref, 메소드).
'사실. 베팅 '(bet _ id, user _ pseudo _ id, game _ id, stake _ base, stake _ ccy, 결과, 이벤트 _ time).
'사실. 지불금 '(payout _ id, user _ pseudo _ id, game _ id, amount _ base, 이벤트 _ time).

링크: 안정적인 키 가이드. 'fx _ source' 를 수정하여 "소스 통화" 와 "베이스" (amount _ base) 에 모든 금액을 복제합니다.

6) 천천히 변화하는 측정 (SCD)

타입 I (덮어쓰기): 철자/비 임계 수정.
유형 II (기록): '유효한 _ from/유효한 _ to/is _ current', 감사 변경 (예: RG 상태 변경).
III 형 (대체 열): 짧은 비교를 위해 "전/후".

추천: RG/KYC/마케팅 채널 - SCD II; 영향 검증을받은 게임 참조 도서 (RTP) -SCD II.

SCD II의 예 (단순화):
sql
CREATE TABLE dim. users_scd (
user_pseudo_id STRING,
country STRING,
rg_status STRING,
valid_from TIMESTAMP,
valid_to  TIMESTAMP,
is_current BOOLEAN
);

7) 중복 제거 및 키

내부 링크에 대한 대리 키 (BIGINT/UUI).
자연 키 (예: PSP의 'trange _ id') -별도로 검증 및 저장됩니다.
'(이벤트 _ id, 소스)' 에 의해 실버의 비즈니스 키에 의해 + 섭취되도록 결정됩니다.

지불 공제 (예):
sql
CREATE TABLE silver. payments AS
SELECT EXCEPT(rn) FROM (
SELECT p., ROW_NUMBER() OVER (PARTITION BY transaction_id ORDER BY event_time) rn
FROM bronze. payment_events p
)
WHERE rn = 1;

8) 통화 표준화 및 에스코트

'이벤트 _ time' - 항상 UTC; 상점 창의 경우 시장의 로케일/시간대를 추가하십시오.
통화: 'amount _ orig' 및 'mount _ base' (예: EUR) + 'fx _ source', 'fx _ rate _ used'.
코스의 일일 수정: 소스 및 해시 서명이있는 'dim. fx _ rates'.

양의 정규화 (예):
sql
SELECT t. transaction_id,
t. amount_orig,
t. currency,
r. rate AS fx_rate_used,
t. amount_orig r. rate AS amount_base
FROM bronze. payment_events t
JOIN dim. fx_rates r
ON r. date = DATE(t. event_time) AND r. ccy_from = t. currency AND r. ccy_to = 'EUR';

9) 참고 도서의 일관성

통합 디렉토리 등록 (게임, 공급자, 시장, 통화).
DQ 유효성 검사기: 'in _ set', FK 참조, 독창성, SCD의 일관성.
외부 소스 (게임 제공 업체, 국가, PSP) 에서 "얇은" 차원의 자동 생성.

10) 비정규화 시점

비정규화는 다음을 위해 금으로 허용됩니다

안정적인 "와이드" 보고서 (GGR, 위험 쇼케이스);

BI 쿼리/대시 보드의 가속

SLA 판독 값에 따라 실시간 상점 (ClickHouse/Pinot).

규칙:
  • 은은 진실의 근원으로 남아 있습니다.
  • 비정규화 된 필드-은에서 계산/복사; 버전 논리.
  • 모든 비정규화는 문서화되고 정확성을 테스트합니다.

11) 별과 눈송이 모델

별: 하나의 사실 + 평평한 측정-더 쉽고 빠른 읽기, 더 비싼 쓰기/일치.
눈송이: 측정이 정규화 (연결된 하위 디렉토리) -더 적은 중복, 더 복잡한 쿼리.

추천: 금에서 더 자주 "별", 은에서 - 정규화 된 "눈송이".

12) 계획의 진화 (안전한 변화)

역 호환: 널링 가능한 열 추가; 플래그가있는 새로운 참조 값.
속보: 마이그레이션 기간 동안 '/v2 '및 이중 항목을 통해서만 이름 변경/타이핑/의미 변경.
계약: 레지스트리의 JSON/Avro 체계, 호환성에 대한 소비자 테스트.

13) 정규화를위한 DQ 컨트롤

최소 세트:
  • 키는 고유합니다: 'trange _ id', 'bet _ id'.
  • 참조 무결성: '희미한' FK..
  • 통화: 화이트리스트의 '통화', 'fx _ rate _ 는' not not ', amount _ base> = 0' 을 사용했습니다.
  • 시간: 합리적인 창에서 '이벤트 _ time'; "미래" 이벤트가 없습니다.
  • SCD- 올바른: 겹치지 않는 범위는 '유효한 _ from/유효한 _ to' 입니다.

14) SQL 모델의 예

실제 요율 (3NF):
sql
CREATE TABLE silver. fact_bets (
bet_id STRING PRIMARY KEY,
user_pseudo_id STRING NOT NULL,
game_id STRING NOT NULL,
stake_ccy DECIMAL(18,2) NOT NULL,
currency CHAR(3) NOT NULL,
stake_base DECIMAL(18,2) NOT NULL,
market CHAR(2) NOT NULL,
event_time TIMESTAMP NOT NULL
);
GGR 별 (금):
sql
CREATE VIEW gold. ggr_daily AS
SELECT
DATE(b. event_time) AS event_date,
m. market,
g. provider_id,
SUM(b. stake_base) AS stakes_eur,
SUM(p. amount_base) AS payouts_eur,
SUM(b. stake_base) - SUM(p. amount_base) AS ggr_eur
FROM silver. fact_bets b
LEFT JOIN silver. fact_payouts p
ON p. user_pseudo_id = b. user_pseudo_id
AND p. game_id = b. game_id
AND DATE(p. event_time) = DATE(b. event_time)
JOIN dim. markets m ON m. code = b. market
JOIN dim. games g  ON g. game_id = b. game_id
GROUP BY 1,2,3;

15) 개인 정보 보호 및 준수

실버에서 사용자 할당; 별도의 보호 회로에서 실제 ID와의 연결.
RLS/CLS 및 현장 마스킹 (분석에서는 이메일/PAN을 사용할 수 없음).
디렉토리/키의 지역화, 스키마 확장을위한 DPO 제어.

16) 관찰 및 계보

Bronze → Silver → Gold의 데이터 계보, 변환 및 계약 버전.
지표: 완전성, 유효성, FK 오류, 중복, 시간의 "구멍", 요청 비용.
디렉토리 및 FX 소스에서 중단 될 때 경고합니다.

17) RACI

R: 데이터 엔지니어링 (실버/골드 모델), 데이터 플랫폼 (회로 레지스터, DQ).
A: 데이터/아키텍처 책임자.
C: 준수/DPO (PII/보존), 금융 (FX/GGR), 위험 (RG/AML).
I: BI/제품/마케팅/운영.

18) 구현 로드맵

MVP (2-4 주):

1. 디렉토리 등록 (시장, 통화, 공급자, 게임).

2. 실버 모델의 사실. 지불 ',' 사실. 베팅 ',' 희미합니다. '(3HF), SCD II for' dim. 사용자.

3. 통화 정규화/시간대, 기본 DQ 규칙 (FK/고유성/in _ set).

4. 최초의 골드 쇼케이스 (GGR Daily) 및 조정 테스트.

2 단계 (4-8 주):
  • SCD 확장, 게임 이벤트 범위, 공급자 컨 포멀 모델.
  • 스키마 호환성 오토 테스트, 마이그레이션 시뮬레이터, 메타 데이
  • 키/파티 최적화, 클러스터링/Z- 순서.
3 단계 (8-12 주):
  • 금, SLA/가치에 대한 비정규화 정책; 별/눈송이 템플릿.
  • 문서의 자동 생성, 대시 보드의 계보 그래프.
  • 지역 디렉토리 및 암호화 키, DR 연습.

19) 품질 점검표

  • 단일 키 및 디렉토리가 승인되었습니다.
  • 3NF의은, SCD는 "느린" 측정에 적용되었습니다.
  • 통화/우주선이 정규화되었습니다. 'fx _ source' 가 수정되었습니다.
  • DQ 규칙 (FK/고유성/범위/in _ set) 이 활성화되어 있습니다.
  • 비정규화 문서화, 정확성 테스트가 통과되었습니다.
  • 대시 보드에는 선형 및 신선도/충만 지표가 표시됩니다.

20) 빈번한 실수와 피하는 방법

분석의 PII 혼합: 별도의 매핑, CLS/RLS 사용.
실버의 정규화 불충분: 3NF, 그렇지 않으면 값 비싼 지원 및 조정 오류가 발생합니다.
FX "보고서 당": "후진" 이 아닌 이벤트에서 요금을 캡처해야합니다.
핵심 치수에 대한 SCD 없음: RG/KYC/채널 기록 손실.
금 재 정규화: 중복 결합 → 관리 된 비정규화.
체계의 불투명 한 진화: 레지스트리 및 소비자 테스트 사용.

21) 결론

정규화는 균일 한 키 및 참고 서적, 사실 및 측정을위한 3NF/BCNF, 올바른 기록 (SCD) 및 시간/통화의 표준화와 같은은 수준의 분야입니다. 이러한 "골격" 으로 골드 케이스가 예측 가능 해지고 보고서가 비슷하며 소유 비용이 통제됩니다.

Contact

문의하기

질문이나 지원이 필요하시면 언제든지 연락하십시오.우리는 항상 도울 준비가 되어 있습니다!

Telegram
@Gamble_GC
통합 시작

Email — 필수. Telegram 또는 WhatsApp — 선택 사항.

이름 선택 사항
Email 선택 사항
제목 선택 사항
메시지 선택 사항
Telegram 선택 사항
@
Telegram을 입력하시면 Email과 함께 Telegram에서도 답변드립니다.
WhatsApp 선택 사항
형식: +국가 코드 + 번호 (예: +82XXXXXXXXX).

버튼을 클릭하면 데이터 처리에 동의하는 것으로 간주됩니다.