-- 每设备归因 + GB 综合配额(todo #5 Phase 2) -- -- ① devices.dp_uuid:每设备独立的数据面凭证(替代账户级 users.dp_uuid 作为出网凭证)。 -- 唯一索引而非内联 UNIQUE,与 SQLite 迁移对齐(NULL 不冲突,存量设备待回填)。 -- ② usage_device_daily:按设备的每日用量;usage_daily 仍作账户综合 rollup。 -- ③ plans.daily_mb:每日综合流量配额(MB,与 daily_minutes 并存,按账户综合卡)。 -- 用 MB 而非 GB 以支持免费版 500MB。free 500 / pro 100GB / team 200GB(可调)。 ALTER TABLE devices ADD COLUMN dp_uuid CHAR(36) NULL; CREATE UNIQUE INDEX idx_devices_dp_uuid ON devices (dp_uuid); CREATE TABLE usage_device_daily ( user_id BIGINT UNSIGNED NOT NULL, device_id BIGINT UNSIGNED NOT NULL, date DATE NOT NULL, bytes_up BIGINT UNSIGNED NOT NULL DEFAULT 0, bytes_down BIGINT UNSIGNED NOT NULL DEFAULT 0, minutes_used INT NOT NULL DEFAULT 0, PRIMARY KEY (device_id, date), INDEX idx_usage_device_user_date (user_id, date) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ALTER TABLE plans ADD COLUMN daily_mb INT NULL; UPDATE plans SET daily_mb = 500 WHERE code = 'free'; UPDATE plans SET daily_mb = 102400 WHERE code = 'pro'; UPDATE plans SET daily_mb = 204800 WHERE code = 'team';