Database schema patterns for InsForge including social graphs, e-commerce, content publishing, and multi-tenancy with RLS policies. Use when designing data models with relationships, foreign keys, or Row Level Security.
View on GitHubInsForge/InsForge
insforge
January 14, 2026
Select agents to install to:
npx add-skill https://github.com/InsForge/InsForge/blob/main/claude-plugin/skills/insforge-schema-patterns/SKILL.md -a claude-code --skill insforge-schema-patternsInstallation paths:
.claude/skills/insforge-schema-patterns/# InsForge Schema Patterns
Expert patterns for designing PostgreSQL schemas optimized for InsForge's PostgREST backend.
## Pattern 1: Social Graph (Follows)
**Use when:** Building social features like Twitter, Instagram, LinkedIn connections
**Schema:**
```sql
CREATE TABLE follows (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
follower_id UUID REFERENCES auth.users(id) ON DELETE CASCADE,
following_id UUID REFERENCES auth.users(id) ON DELETE CASCADE,
created_at TIMESTAMPTZ DEFAULT NOW(),
UNIQUE(follower_id, following_id)
);
-- Index for fast lookups
CREATE INDEX idx_follows_follower ON follows(follower_id);
CREATE INDEX idx_follows_following ON follows(following_id);
-- RLS: Users can read all follows but only create their own
ALTER TABLE follows ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Anyone can read follows" ON follows
FOR SELECT USING (true);
CREATE POLICY "Users can follow others" ON follows
FOR INSERT
TO authenticated
WITH CHECK (uid() = follower_id);
CREATE POLICY "Users can unfollow" ON follows
FOR DELETE
TO authenticated
USING (uid() = follower_id);
```
**Query with InsForge SDK:**
```javascript
// Get users I follow
const { data: following } = await client.database
.from('follows')
.select()
.eq('follower_id', currentUserId);
// Get my followers
const { data: followers } = await client.database
.from('follows')
.select()
.eq('following_id', currentUserId);
// Check if user1 follows user2
const { data: isFollowing } = await client.database
.from('follows')
.select()
.eq('follower_id', user1Id)
.eq('following_id', user2Id)
.single();
// Follow a user
await client.database
.from('follows')
.insert([{ follower_id: currentUserId, following_id: targetUserId }]);
```
---
## Pattern 2: Likes (Many-to-Many Junction Table)
**Use when:** Users can like posts, comments, or other content
**Schema:**
```sql
CREATE TABLE likes (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID REFERENCES