[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7CWS0AVWEKSSXAP8Y31SMS0":3,"skill-same:01M7CWS0AVWEKSSXAP8Y31SMS0":46},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":25,"commitSha":26,"skillDirectory":27,"forksCount":14,"repositoryHtmlUrl":28,"repositoryHomepageUrl":6,"ownerHtmlUrl":29,"ownerBlogUrl":6,"ownerDescription":30,"updatedAt":31,"install":32,"resources":45},"01M7CWS0AVWEKSSXAP8Y31SMS0","database-design",null,"Database schema design, optimization, and migration patterns for PostgreSQL, MySQL, and NoSQL databases. Use for designing schemas, writing migrations, or optimizing queries.","haidonglethqb\u002FBAHAU","haidonglethqb","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F115625430?v=4","01M7CW8M42R8EJ7G0P4XPYEE5D","HAI","01M7CW8M550DFW4TEHPTGEA1S8",0,"MIT","https:\u002F\u002Fgithub.com\u002Fhaidonglethqb\u002FBAHAU\u002Fblob\u002Fmain\u002F.cursor\u002Fskills\u002Fdatabase-design\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: database-design\ndescription: Database schema design, optimization, and migration patterns for PostgreSQL, MySQL, and NoSQL databases. Use for designing schemas, writing migrations, or optimizing queries.\nsource: wshobson\u002Fagents\nlicense: MIT\n---\n\n# Database Design\n\n## Schema Design Principles\n\n### Normalization Guidelines\n```sql\n-- 1NF: Atomic values, no repeating groups\n-- 2NF: No partial dependencies on composite keys\n-- 3NF: No transitive dependencies\n\n-- Users table (normalized)\nCREATE TABLE users (\n  id SERIAL PRIMARY KEY,\n  email VARCHAR(255) UNIQUE NOT NULL,\n  created_at TIMESTAMPTZ DEFAULT NOW()\n);\n\n-- Addresses table (separate entity)\nCREATE TABLE addresses (\n  id SERIAL PRIMARY KEY,\n  user_id INTEGER REFERENCES users(id) ON DELETE CASCADE,\n  street VARCHAR(255),\n  city VARCHAR(100),\n  country VARCHAR(100),\n  is_primary BOOLEAN DEFAULT false\n);\n```\n\n### Denormalization for Performance\n```sql\n-- When read performance matters more than write consistency\nCREATE TABLE order_summaries (\n  id SERIAL PRIMARY KEY,\n  order_id INTEGER REFERENCES orders(id),\n  customer_name VARCHAR(255),  -- Denormalized from customers\n  total_amount DECIMAL(10,2),\n  item_count INTEGER,\n  last_updated TIMESTAMPTZ DEFAULT NOW()\n);\n```\n\n## Index Design\n\n### Common Index Patterns\n```sql\n-- B-tree (default) for equality and range queries\nCREATE INDEX idx_users_email ON users(email);\n\n-- Composite index (order matters!)\nCREATE INDEX idx_orders_user_date ON orders(user_id, created_at DESC);\n\n-- Partial index for specific conditions\nCREATE INDEX idx_active_users ON users(email) WHERE deleted_at IS NULL;\n\n-- GIN index for array\u002FJSONB columns\nCREATE INDEX idx_posts_tags ON posts USING GIN(tags);\n\n-- Covering index (includes additional columns)\nCREATE INDEX idx_orders_covering ON orders(user_id) INCLUDE (total, status);\n```\n\n### Index Analysis\n```sql\n-- Check index usage\nSELECT\n  schemaname, tablename, indexname,\n  idx_scan, idx_tup_read, idx_tup_fetch\nFROM pg_stat_user_indexes\nORDER BY idx_scan DESC;\n\n-- Find missing indexes\nSELECT\n  relname, seq_scan, seq_tup_read,\n  idx_scan, idx_tup_fetch\nFROM pg_stat_user_tables\nWHERE seq_scan > idx_scan\nORDER BY seq_tup_read DESC;\n```\n\n## Migration Patterns\n\n### Safe Migration Template\n```sql\n-- Always use transactions\nBEGIN;\n\n-- Add column with default (non-blocking in PG 11+)\nALTER TABLE users ADD COLUMN status VARCHAR(20) DEFAULT 'active';\n\n-- Create index concurrently (doesn't lock table)\nCREATE INDEX CONCURRENTLY idx_users_status ON users(status);\n\n-- Backfill data in batches\nUPDATE users SET status = 'active' WHERE status IS NULL AND id BETWEEN 1 AND 10000;\n\nCOMMIT;\n```\n\n### Zero-Downtime Migrations\n```\n1. Add new column (nullable)\n2. Deploy code that writes to both columns\n3. Backfill old data\n4. Deploy code that reads from new column\n5. Remove old column\n```\n\n## Query Optimization\n\n### EXPLAIN Analysis\n```sql\n-- Always use EXPLAIN ANALYZE\nEXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)\nSELECT * FROM orders WHERE user_id = 123 AND status = 'pending';\n\n-- Key metrics to watch:\n-- - Seq Scan vs Index Scan\n-- - Actual rows vs Estimated rows\n-- - Buffers: shared hit vs read\n```\n\n### Common Optimizations\n```sql\n-- Use EXISTS instead of IN for large sets\nSELECT * FROM users u\nWHERE EXISTS (SELECT 1 FROM orders o WHERE o.user_id = u.id);\n\n-- Pagination with keyset (cursor) instead of OFFSET\nSELECT * FROM posts\nWHERE created_at \u003C '2024-01-01'\nORDER BY created_at DESC\nLIMIT 20;\n\n-- Use CTEs for complex queries\nWITH active_users AS (\n  SELECT id FROM users WHERE last_login > NOW() - INTERVAL '30 days'\n)\nSELECT * FROM orders WHERE user_id IN (SELECT id FROM active_users);\n```\n\n## Constraints & Data Integrity\n\n```sql\n-- Primary key\nALTER TABLE users ADD PRIMARY KEY (id);\n\n-- Foreign key with cascade\nALTER TABLE orders ADD CONSTRAINT fk_orders_user\n  FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;\n\n-- Check constraint\nALTER TABLE products ADD CONSTRAINT chk_price_positive\n  CHECK (price >= 0);\n\n-- Unique constraint\nALTER TABLE users ADD CONSTRAINT uniq_users_email UNIQUE (email);\n\n-- Exclusion constraint (no overlapping ranges)\nALTER TABLE reservations ADD CONSTRAINT excl_no_overlap\n  EXCLUDE USING gist (room_id WITH =, tsrange(start_time, end_time) WITH &&);\n```\n\n## Best Practices\n\n- Use UUIDs for public-facing IDs, SERIAL\u002FBIGSERIAL for internal\n- Always add `created_at` and `updated_at` timestamps\n- Use soft deletes (`deleted_at`) for important data\n- Design for eventual consistency in distributed systems\n- Document schema decisions in migration files\n- Test migrations on production-size data before deploying\n","# Database Design\n\n## Schema Design Principles\n\n### Normalization Guidelines\n```sql\n-- 1NF: Atomic values, no repeating groups\n-- 2NF: No partial dependencies on composite keys\n-- 3NF: No transitive dependencies\n\n-- Users table (normalized)\nCREATE TABLE users (\n  id SERIAL PRIMARY KEY,\n  email VARCHAR(255) UNIQUE NOT NULL,\n  created_at TIMESTAMPTZ DEFAULT NOW()\n);\n\n-- Addresses table (separate entity)\nCREATE TABLE addresses (\n  id SERIAL PRIMARY KEY,\n  user_id INTEGER REFERENCES users(id) ON DELETE CASCADE,\n  street VARCHAR(255),\n  city VARCHAR(100),\n  country VARCHAR(100),\n  is_primary BOOLEAN DEFAULT false\n);\n```\n\n### Denormalization for Performance\n```sql\n-- When read performance matters more than write consistency\nCREATE TABLE order_summaries (\n  id SERIAL PRIMARY KEY,\n  order_id INTEGER REFERENCES orders(id),\n  customer_name VARCHAR(255),  -- Denormalized from customers\n  total_amount DECIMAL(10,2),\n  item_count INTEGER,\n  last_updated TIMESTAMPTZ DEFAULT NOW()\n);\n```\n\n## Index Design\n\n### Common Index Patterns\n```sql\n-- B-tree (default) for equality and range queries\nCREATE INDEX idx_users_email ON users(email);\n\n-- Composite index (order matters!)\nCREATE INDEX idx_orders_user_date ON orders(user_id, created_at DESC);\n\n-- Partial index for specific conditions\nCREATE INDEX idx_active_users ON users(email) WHERE deleted_at IS NULL;\n\n-- GIN index for array\u002FJSONB columns\nCREATE INDEX idx_posts_tags ON posts USING GIN(tags);\n\n-- Covering index (includes additional columns)\nCREATE INDEX idx_orders_covering ON orders(user_id) INCLUDE (total, status);\n```\n\n### Index Analysis\n```sql\n-- Check index usage\nSELECT\n  schemaname, tablename, indexname,\n  idx_scan, idx_tup_read, idx_tup_fetch\nFROM pg_stat_user_indexes\nORDER BY idx_scan DESC;\n\n-- Find missing indexes\nSELECT\n  relname, seq_scan, seq_tup_read,\n  idx_scan, idx_tup_fetch\nFROM pg_stat_user_tables\nWHERE seq_scan > idx_scan\nORDER BY seq_tup_read DESC;\n```\n\n## Migration Patterns\n\n### Safe Migration Template\n```sql\n-- Always use transactions\nBEGIN;\n\n-- Add column with default (non-blocking in PG 11+)\nALTER TABLE users ADD COLUMN status VARCHAR(20) DEFAULT 'active';\n\n-- Create index concurrently (doesn't lock table)\nCREATE INDEX CONCURRENTLY idx_users_status ON users(status);\n\n-- Backfill data in batches\nUPDATE users SET status = 'active' WHERE status IS NULL AND id BETWEEN 1 AND 10000;\n\nCOMMIT;\n```\n\n### Zero-Downtime Migrations\n```\n1. Add new column (nullable)\n2. Deploy code that writes to both columns\n3. Backfill old data\n4. Deploy code that reads from new column\n5. Remove old column\n```\n\n## Query Optimization\n\n### EXPLAIN Analysis\n```sql\n-- Always use EXPLAIN ANALYZE\nEXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT)\nSELECT * FROM orders WHERE user_id = 123 AND status = 'pending';\n\n-- Key metrics to watch:\n-- - Seq Scan vs Index Scan\n-- - Actual rows vs Estimated rows\n-- - Buffers: shared hit vs read\n```\n\n### Common Optimizations\n```sql\n-- Use EXISTS instead of IN for large sets\nSELECT * FROM users u\nWHERE EXISTS (SELECT 1 FROM orders o WHERE o.user_id = u.id);\n\n-- Pagination with keyset (cursor) instead of OFFSET\nSELECT * FROM posts\nWHERE created_at \u003C '2024-01-01'\nORDER BY created_at DESC\nLIMIT 20;\n\n-- Use CTEs for complex queries\nWITH active_users AS (\n  SELECT id FROM users WHERE last_login > NOW() - INTERVAL '30 days'\n)\nSELECT * FROM orders WHERE user_id IN (SELECT id FROM active_users);\n```\n\n## Constraints & Data Integrity\n\n```sql\n-- Primary key\nALTER TABLE users ADD PRIMARY KEY (id);\n\n-- Foreign key with cascade\nALTER TABLE orders ADD CONSTRAINT fk_orders_user\n  FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE;\n\n-- Check constraint\nALTER TABLE products ADD CONSTRAINT chk_price_positive\n  CHECK (price >= 0);\n\n-- Unique constraint\nALTER TABLE users ADD CONSTRAINT uniq_users_email UNIQUE (email);\n\n-- Exclusion constraint (no overlapping ranges)\nALTER TABLE reservations ADD CONSTRAINT excl_no_overlap\n  EXCLUDE USING gist (room_id WITH =, tsrange(start_time, end_time) WITH &&);\n```\n\n## Best Practices\n\n- Use UUIDs for public-facing IDs, SERIAL\u002FBIGSERIAL for internal\n- Always add `created_at` and `updated_at` timestamps\n- Use soft deletes (`deleted_at`) for important data\n- Design for eventual consistency in distributed systems\n- Document schema decisions in migration files\n- Test migrations on production-size data before deploying\n",{"name":5,"source":24,"license":15,"description":7},"wshobson\u002Fagents","main","82da5963278d597455c869ad91cfc05b2b607e75",".cursor\u002Fskills\u002Fdatabase-design","https:\u002F\u002Fgithub.com\u002Fhaidonglethqb\u002FBAHAU","https:\u002F\u002Fgithub.com\u002Fhaidonglethqb","Study at University of information technology - Viet Nam National University","2026-11-12 17:30:31",{"source":8,"skillName":5,"commands":33,"prompt":43,"zipAvailable":44},[34,37,40],{"tool":35,"command":36},"npx","npx skills add haidonglethqb\u002FBAHAU --skill database-design",{"tool":38,"command":39},"bunx","bunx skills add haidonglethqb\u002FBAHAU --skill database-design",{"tool":41,"command":42},"pnpm","pnpm dlx skills add haidonglethqb\u002FBAHAU --skill database-design","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fhaidonglethqb\u002FBAHAU\u002Fblob\u002Fmain\u002F.cursor\u002Fskills\u002Fdatabase-design\u002FSKILL.md",true,[],[47,55,62,70,77,85],{"skillNo":48,"name":49,"nameZh":6,"description":50,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":51,"licenseFileUrl":6,"sourceHtmlUrl":52,"categories":53,"keywords":54,"publishedAt":19},"01M7CX33YDC6KGJ0E8BXAZPJ5F","ck:web-testing","Web testing with Playwright, Vitest, k6. E2E\u002Funit\u002Fintegration\u002Fload\u002Fsecurity\u002Fvisual\u002Fa11y testing. Use for test automation, flakiness, Core Web Vitals, mobile gestures, cross-browser.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fhaidonglethqb\u002FBAHAU\u002Fblob\u002Fmain\u002F.qwen\u002Fskills\u002Fweb-testing\u002FSKILL.md",[],[],{"skillNo":56,"name":57,"nameZh":6,"description":58,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":59,"categories":60,"keywords":61,"publishedAt":19},"01M7CX2ZQD1ZYDCPDXV9RT172S","ck:web-frameworks","Build with Next.js (App Router, RSC, SSR, ISR), Turborepo monorepos. Use for React apps, server rendering, build optimization, caching strategies, shared dependencies.","https:\u002F\u002Fgithub.com\u002Fhaidonglethqb\u002FBAHAU\u002Fblob\u002Fmain\u002F.qwen\u002Fskills\u002Fweb-frameworks\u002FSKILL.md",[],[],{"skillNo":63,"name":64,"nameZh":6,"description":65,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":66,"sourceHtmlUrl":67,"categories":68,"keywords":69,"publishedAt":19},"01M7CX2AAFYCVRJVP668GQGWEG","ck:ui-styling","Style UIs with shadcn\u002Fui components (Radix UI + Tailwind CSS). Use for accessible components, themes, dark mode, responsive layouts, design systems, color customization.","https:\u002F\u002Fgithub.com\u002Fhaidonglethqb\u002FBAHAU\u002Fblob\u002Fmain\u002F.qwen\u002Fskills\u002Fui-styling\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fhaidonglethqb\u002FBAHAU\u002Fblob\u002Fmain\u002F.qwen\u002Fskills\u002Fui-styling\u002FSKILL.md",[],[],{"skillNo":71,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":76,"publishedAt":19},"01M7CX23C6RSSS5YQZTT9C86GC","ck:threejs","Build 3D web apps with Three.js (WebGL\u002FWebGPU). 556 searchable examples, 60 API classes, 20 use cases. Actions: create 3D scene, load model, add animation, implement physics, build VR\u002FXR. Topics: GLTF loader, PBR materials, particle effects, shadows, post-processing, compute shaders, TSL. Integrations: WebGPU, physics engines, spatial audio.","https:\u002F\u002Fgithub.com\u002Fhaidonglethqb\u002FBAHAU\u002Fblob\u002Fmain\u002F.qwen\u002Fskills\u002Fthreejs\u002FSKILL.md",[],[],{"skillNo":78,"name":79,"nameZh":6,"description":80,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":51,"licenseFileUrl":81,"sourceHtmlUrl":82,"categories":83,"keywords":84,"publishedAt":19},"01M7CX1CJVKAQJHM6VSEFMNCHX","ck:skill-creator","Create or update Claude skills optimized for Skillmark benchmarks. Use for new skills, skill scripts, references, benchmark optimization, extending Claude's capabilities.","https:\u002F\u002Fgithub.com\u002Fhaidonglethqb\u002FBAHAU\u002Fblob\u002Fmain\u002F.qwen\u002Fskills\u002Fskill-creator\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fhaidonglethqb\u002FBAHAU\u002Fblob\u002Fmain\u002F.qwen\u002Fskills\u002Fskill-creator\u002FSKILL.md",[],[],{"skillNo":86,"name":87,"nameZh":6,"description":88,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":89,"categories":90,"keywords":91,"publishedAt":19},"01M7CX115W0PP7J9CDDZZQGH0M","ck:sequential-thinking","Apply step-by-step analysis for complex problems with revision capability. Use for multi-step reasoning, hypothesis verification, adaptive planning, problem decomposition, course correction.","https:\u002F\u002Fgithub.com\u002Fhaidonglethqb\u002FBAHAU\u002Fblob\u002Fmain\u002F.qwen\u002Fskills\u002Fsequential-thinking\u002FSKILL.md",[],[]]