-- ============================================================
-- 会員マスタ（KAIIN_MASTER）
-- 生成元: input/kaiin-item-teigi.csv（項目定義書 12項目）
-- 生成: Claude Code（項目定義書から自動生成・人手レビュー前）
-- ============================================================

CREATE TABLE kaiin_master (
    kaiin_no        CHAR(8)         NOT NULL,               -- 会員番号: K+7桁数字
    kaiin_name      VARCHAR2(40)    NOT NULL,               -- 会員氏名
    kaiin_kana      VARCHAR2(60)    NOT NULL,               -- 会員氏名カナ（全角カタカナのみ）
    mail_address    VARCHAR2(254)   NOT NULL,               -- メールアドレス（一意）
    tel_no          VARCHAR2(13),                           -- 電話番号（ハイフン区切り）
    seibetsu_kbn    CHAR(1),                                -- 性別区分 1:男性 2:女性 9:回答しない
    birth_date      DATE,                                   -- 生年月日（1900-01-01以降の過去日付）
    rank_kbn        CHAR(1)         NOT NULL,               -- 会員ランク区分 1:ゴールド 2:シルバー 3:ブロンズ
    point_zan       NUMBER(9)       DEFAULT 0 NOT NULL,     -- ポイント残高（0以上）
    taikai_flg      CHAR(1)         DEFAULT '0' NOT NULL,   -- 退会フラグ 0:在会 1:退会
    create_ts       TIMESTAMP       NOT NULL,               -- 登録日時
    update_ts       TIMESTAMP       NOT NULL,               -- 更新日時
    CONSTRAINT pk_kaiin_master PRIMARY KEY (kaiin_no),
    CONSTRAINT uq_kaiin_master_mail UNIQUE (mail_address),
    CONSTRAINT ck_kaiin_master_kaiin_no  CHECK (REGEXP_LIKE(kaiin_no, '^K[0-9]{7}$')),
    CONSTRAINT ck_kaiin_master_seibetsu  CHECK (seibetsu_kbn IN ('1', '2', '9')),
    CONSTRAINT ck_kaiin_master_rank      CHECK (rank_kbn IN ('1', '2', '3')),
    CONSTRAINT ck_kaiin_master_point     CHECK (point_zan >= 0),
    CONSTRAINT ck_kaiin_master_taikai    CHECK (taikai_flg IN ('0', '1'))
);

COMMENT ON TABLE  kaiin_master IS '会員マスタ';
COMMENT ON COLUMN kaiin_master.kaiin_no     IS '会員番号（K+7桁数字）';
COMMENT ON COLUMN kaiin_master.kaiin_name   IS '会員氏名';
COMMENT ON COLUMN kaiin_master.kaiin_kana   IS '会員氏名カナ（全角カタカナのみ）';
COMMENT ON COLUMN kaiin_master.mail_address IS 'メールアドレス（一意）';
COMMENT ON COLUMN kaiin_master.tel_no       IS '電話番号（ハイフン区切り）';
COMMENT ON COLUMN kaiin_master.seibetsu_kbn IS '性別区分 1:男性 2:女性 9:回答しない';
COMMENT ON COLUMN kaiin_master.birth_date   IS '生年月日（1900-01-01以降の過去日付）';
COMMENT ON COLUMN kaiin_master.rank_kbn     IS '会員ランク区分 1:ゴールド 2:シルバー 3:ブロンズ';
COMMENT ON COLUMN kaiin_master.point_zan    IS 'ポイント残高（0以上・初期値0）';
COMMENT ON COLUMN kaiin_master.taikai_flg   IS '退会フラグ 0:在会 1:退会（初期値0）';
COMMENT ON COLUMN kaiin_master.create_ts    IS '登録日時';
COMMENT ON COLUMN kaiin_master.update_ts    IS '更新日時';
