SaaS தரவுத்தளக் கட்டமைப்பை வடிவமைத்தல்

உங்கள் முதல் வாரத்தில் நீங்கள் எடுக்கும் தவறான தரவுத்தள முடிவுகள் பல வருடங்களுக்கு உங்களைத் துரத்தும்.

ஒரு SaaS நிறுவனத் தொடங்குபவருக்கு (founder), multi-tenancy, billing மற்றும் வளர்ச்சி ஆகியவற்றை கையாளக்கூடிய ஒரு schema தேவைப்படுகிறது. நீங்கள் இதில் தவறு செய்தால், ஆறு மாதங்களிலேயே உங்கள் முழு அமைப்பையும் மீண்டும் எழுத வேண்டியிருக்கும்.

ஒரு production-ready schema-வை எவ்வாறு உருவாக்குவது என்பது இதோ.

1. உங்கள் Tenant Strategy-யைத் தேர்ந்தெடுக்கவும்

வாடிக்கையாளர்களுக்கிடையிலான தரவுகளை நீங்கள் தனிமைப்படுத்த வேண்டும்.

Row-level (Shared DB): குறைந்த சிக்கல் தன்மை கொண்டது. பெரும்பாலான ஸ்டார்ட்அப்களுக்கு சிறந்தது. ஒவ்வொரு query-யிலும் WHERE organization_id = ? என்ற filter-ஐப் பயன்படுத்தவும். • Schema-level (Separate Schemas): நடுத்தர சிக்கல் தன்மை கொண்டது. ஒழுங்குமுறைத் தேவைகளுக்கு (regulatory needs) சிறந்தது. • Database-level (Separate DBs): அதிக சிக்கல் தன்மை கொண்டது. பெரிய நிறுவன வாடிக்கையாளர்களுக்கு (enterprise clients) சிறந்தது.

90% புதிய தயாரிப்புகளுக்கு, row-level multi-tenancy என்பதே சரியான தேர்வாகும்.

2. சரியான Entity Hierarchy

பயனர்களுக்கு (users) நேரடியாகப் கட்டணம் வசூலிக்காதீர்கள். பயனர்கள் வந்து போவார்கள், ஆனால் நிறுவனங்கள் (organizations) நிலைத்திருக்கும்.

அந்த hierarchy இவ்வாறு இருக்க வேண்டும்: User ── MemberOf ── Organization ── Subscription ── Invoice

Users: இந்த அட்டவணையை அடையாளத்திற்காக (identity) மட்டுமே வைத்திருக்கவும். தாக்குதல்களைத் தவிர்க்க UUIDs-களைப் பயன்படுத்தவும். • Organizations: இதுதான் உங்கள் tenant எல்லை. எப்போதும் subscription-களை organization-உடன் இணைக்கவும். • Memberships: பயனர்களை நிறுவனங்களுடன் இணைக்க ஒரு join table-ஐப் பயன்படுத்தவும். भूमिकाக்களை (roles) இங்கு சேமிக்கவும், user table-இல் அல்ல.

3. Billing மற்றும் Subscriptions

is_active போன்ற ஒரு எளிய boolean-ஐ ஒருபோதும் பயன்படுத்தாதீர்கள். இது குழப்பமான தரவுகளை (messy data) உருவாக்கும்.

Subscriptions-களுக்கு ஒரு state machine-ஐப் பயன்படுத்தவும். பொதுவான நிலைகள் (states) பின்வருமாறு: • trialingactivepast_duecanceledexpiredincomplete

இது கைமுறையாகத் தரவுகளைச் சரிசெய்யாமல், கட்டணத் தோல்விகள் (payment failures) மற்றும் கால அவகாசங்களை (grace periods) கையாள அனுமதிக்கிறது.

4. பணம் மற்றும் Invoicing

நிதித் தவறுகளைத் தவிர்க்க இந்தத் கடுமையான விதிகளைப் பின்பற்றவும்:

• பணத்திற்கு ஒருபோதும் FLOAT அல்லது REAL-ஐப் பயன்படுத்தாதீர்கள். சென்ட் (cents) மதிப்புகளைச் சேமிக்க integers-களைப் பயன்படுத்தவும். உதாரணமாக, $29.99 என்பது 2999 என மாறும். • ஒரு invoice_line_items அட்டவணையைப் பயன்படுத்தவும். வரி அறிக்கைகள் (tax reports) மற்றும் ரீஃபண்ட்களுக்கு (refunds) இது உங்களுக்குத் தேவைப்படும். • ஒரு வாடிக்கையாளர் உங்கள் தயாரிப்பைப் பயன்படுத்தும் அளவைப் பொறுத்து நீங்கள் கட்டணம் வசூலித்தால், usage_events அட்டவணையைப் பயன்படுத்தவும்.

5. செயல்திறன் குறிப்புகள் (Performance Tips)

• உங்கள் foreign keys-களை index செய்யவும். • உங்கள் status columns-களை index செய்யவும். • உங்கள் timestamp columns-களை index செய்யவும். • N+1 queries-களைத் தவிர்க்கவும். organization மற்றும் subscription தரவுகளை ஒரே முறையில் பெற JOINs-களைப் பயன்படுத்தவும்.

ஒரு சிறந்த schema சரியாகச் செயல்படும்போது அது கண்ணுக்குத் தெரியாது. அது தோல்வியடையும் போது பேரழிவாக அமையும்.

நிறுவனத்திற்காகக் கட்டமைக்கவும். State machines-களைப் பயன்படுத்தவும். பணத்தைச் சேமிக்க integers-களைப் பயன்படுத்தவும்.

Source: https://dev.to/feidou/designing-saas-database-architecture-users-organizations-subscriptions-and-billing-df

Optional learning community: https://t.me/GyaanSetuAi