एडमिन पैनल के लिए पठनीय डेटाबेस नामकरण नियम
क्लीन जेनरेटेड स्क्रीन पाने के लिए एडमिन पैनल के डेटाबेस नामकरण नियम अपनाएँ: स्पष्ट टेबल/फील्ड नियम, एन्थम्स, रिलेशन और एक त्वरित चेकलिस्ट।

नाम तय करते हैं कि एडमिन पैनल स्पष्ट लगेगा या गड़बड़\n\nज़्यादातर एडमिन पैनल आपके डेटा मॉडल से बनते हैं। टेबल और फील्ड के नाम मेनू आइटम, पेज टाइटल, कॉलम हेडर, फ़िल्टर लेबल और यहाँ तक कि सर्च में टाइप किए जाने वाले शब्द बन जाते हैं।\n\nजब नाम स्पष्ट होते हैं, तो कोई एडमिन एक सूची देखकर सेकंड में समझ जाता है। जब नाम अस्पष्ट होते हैं, तो वह रुकता है, अनुमान लगाता है, रिकॉर्ड खोलता है, वापस आता है और फिर से कोशिश करता है। वो हिचक मिलती-जुलती सहायता प्रश्नों और पढ़ने में उबाऊ ट्रेनिंग डॉक्स में बदल जाती है।\n\nडेवलपर्स आमतौर पर चीज़ों को बिल्डिंग और डिबगिंग के हिसाब से नाम देते हैं। ऑपरेटर्स काम करने के हिसाब से नाम चाहते हैं। एक डेवलपर को acct, addr1, या stat ठीक लग सकते हैं क्योंकि वे याद रखते हैं कि इसका मतलब क्या है। एक ऑपरेटर को बिना डिकोड किए “Account”, “Address line 1”, और “Status” चाहिए।\n\nएडमिन स्क्रीन में, "पठनीय" का मतलब आमतौर पर यह होता है:\n\n- आप एक टेबल स्कैन कर सकें और हर कॉलम को खोलें बिना समझ सकें।\n- आप उसी शब्दावली से सर्च और फ़िल्टर कर सकें जो आप दिन-प्रतिदिन काम में इस्तेमाल करते हैं।\n- आप बिना आश्चर्य के मानों को सॉर्ट और तुलना कर सकें (उदाहरण के लिए, तारीखें वास्तव में तारीखें हों, और स्टेटस संगत हों)।\n\nयदि आप किसी ऐसे प्लेटफ़ॉर्म का उपयोग करते हैं जो मॉडल से स्क्रीन जेनरेट करता है (उदाहरण के लिए, AppMaster का Data Designer और एडमिन-शैली व्यू), तो नाम UI डिज़ाइन का हिस्सा बन जाते हैं। अच्छे नाम पहले दिन से ही आपको साफ़ डिफ़ॉल्ट स्क्रीन देते हैं, उससे पहले कि आप लेबल और लेआउट पॉलिश करें।\n\n## पूरी टीम के लिए एक सरल नामकरण बेसलाइन\n\nयदि आप चाहते हैं कि जेनरेटेड एडमिन स्क्रीन पहले दिन से साफ़ दिखें, तो कोई भी तालिका जोड़ने से पहले एक बेसलाइन पर सहमति बनाएं। ज़्यादातर नामकरण समस्याएँ तकनीकी नहीं होतीं — वे संगति की समस्याएँ हैं।\n\nएक पहचान शैली चुनें और उसे मिलाए नहीं। डेटाबेस के लिए, snake_case आमतौर पर पढ़ने और खोजने में आसान होता है। यदि आपका स्टैक camelCase की उम्मीद करता है, तो हर जगह (टेबल्स, कॉलम, फ़ॉरेन कीज़, एन्थम्स) उसी का पालन करें। प्रोजेक्ट के बीच में शैली बदलना वह है जो लेबल्स और फ़िल्टरों को यादृच्छिक बना देता है।\n\nअधिकांश टीमों के लिए काम करने वाली एक बेसलाइन:\n\n- पूरे शब्दों का प्रयोग करें: customer_id, न कि cust_id; description, न कि desc.\n- चीज़ों के लिए स्पष्ट संज्ञाएँ और कार्यों के लिए स्पष्ट क्रियाएँ रखें: invoice, payment, refund_requested.\n- संगत टाइमस्टैम्प नाम रखें: created_at, updated_at, deleted_at.\n- data, info, value, या type जैसे अस्पष्ट शब्दों से बचें जब तक आप संदर्भ न जोड़ें (उदाहरण: shipping_address, payout_method).\n- सिंगुलर बनाम प्लुरल में संगति बनाए रखें (कई टीम्स प्लुरल टेबल्स जैसे customers और सिंगुलर कॉलम जैसे customer_id का उपयोग करती हैं)।\n\nएक छोटा ग्लॉसरी लिखें और उसे दिखने लायक रखें। जल्दी तय करें कि आप customer, client, account, या user में से किसका मतलब लेते हैं, फिर एक टर्म पर टिके रहें। "order" बनाम "purchase" या "ticket" बनाम "case" के लिए भी यही करें।\n\nएक तेज़ जाँच: यदि दो लोग account_status जैसे कॉलम को देख कर बिना पूछे समझ जाते हैं कि उसका मतलब क्या है, तो बेसलाइन काम कर रही है। अगर वे नहीं समझते, तो स्क्रीन और फ़िल्टर बनाने से पहले इसे बदल दें।\n\n## टेबल नामकरण नियम जो मेन्यू और सूचियों से साफ़ मेल खाते हैं\n\nअधिकांश एडमिन पैनल टेबल नामों को मेन्यू आइटम, सूची शीर्षक और ब्रेडक्रंब में बदल देते हैं। आपका स्कीमा सिर्फ़ इंजीनियर्स के लिए नहीं है। यह आपकी UI का पहला ड्राफ्ट है।\n\nएंटिटी टेबल्स के लिए एक स्टाइल चुनें और उसी पर टिके रहें: सिंगुलर (user, invoice, ticket) या प्लुरल (users, invoices, tickets)। सिंगुलर अक्सर फॉर्म टाइटल्स में बेहतर लगता है (“Edit Ticket”), जबकि प्लुरल मेन्यूज़ में बेहतर दिख सकता है (“Tickets”)। दोनों ठीक हैं। दोनों का मिलाजुला उपयोग नेविगेशन को असंगत बना देता है।\n\nटेबल्स का नाम उनके होने का नाम होना चाहिए, न कि उनके करने का। एक टेबल को ऐसी चीज़ दिखानी चाहिए जिसे आप इंगित कर सकें। payment एक चीज़ है; processing एक क्रिया है। बाद में यदि आप refunds, retries, और settlements जोड़ते हैं, तो “processing” नाम भ्रामक हो जाएगा।\n\nऐसे नियम जो मेन्यू और सूचियों को साफ़ रखते हैं:\n\n- ठोस संज्ञाओं का प्रयोग करें (customer, subscription, invoice, ticket_message).\n- स्थायी डेटा के लिए बकेट टेबल्स से बचें (settings, misc, temp, data). उन्हें असली एंटिटीज़ में विभाजित करें (notification_setting, tax_rate, feature_flag).\n- underscore के साथ छोटे, पढ़ने योग्य कंपाउंड नाम पसंद करें (purchase_order, support_ticket) बजाय संक्षेप के।\n- केवल टक्कर रोकने पर ही मॉड्यूल प्रीफ़िक्स जोड़ें (उदा., billing_invoice बनाम invoice). यदि आप प्रीफ़िक्स जोड़ते हैं, तो उसे मॉड्यूल भर में सुसंगत रूप से लागू करें।\n\nयदि आप AppMaster का उपयोग करके सीधे अपनी स्कीमा से स्क्रीन जेनरेट कर रहे हैं, तो स्थिर संज्ञा-आधारित टेबल नाम आमतौर पर कम क्लीनअप के साथ एक साफ़ डिफ़ॉल्ट मेन्यू और सूची दृश्य बनाते हैं।\n\n## जॉइन टेबल्स और पहचानकर्ता: कई-से-कई को पठनीय बनाए रखना\n\nकई-से-कई रिश्ते वहां होते हैं जहाँ एडमिन पैनल अक्सर गड़बड़ा दिखना शुरू करते हैं। यदि जॉइन टेबल और उसकी कीज़ का नाम अच्छा हो, तो जेनरेटेड स्क्रीन मैन्युअल सफाई के बिना भी पठनीय रहते हैं।\n\nएक नीरस नियम से शुरू करें और उसे न तोड़ें: हर टेबल की प्राइमरी की id नाम से हो। किसी टेबल में user_id को प्राइमरी की न बनाएं जबकि दूसरी में id हो। समान पहचानकर्ता रिलेशन्स को अनुमान्य बनाते हैं, और वे जेनरेटेड फॉर्म्स और संदर्भ फ़ील्ड्स को संगत रखते हैं।\n\nसाफ़ जॉइन टेबल्स के लिए, उन्हें दोनों एंटिटीज़ के नाम से एक पैटर्न और ऑर्डर में नामित करें। सामान्य विकल्प वर्णानुक्रम (product_tag) या "मुख्य चीज़ पहले" (user_role) हैं। एक ऑर्डर चुनें और हर जगह रखें।\n\nlinks या mappings जैसे अस्पष्ट नामों से बचें जब तक टेबल वास्तव में जेनरिक क्रॉस-ऑब्जेक्ट लिंक न रखे। अधिकांश एडमिन पैनलों में, विशिष्टता चालाकी से बेहतर है।\n\n### जब जॉइन टेबल एक वास्तविक एंटिटी बन जाए\n\nयदि रिलेशन में अतिरिक्त फील्ड हों, तो इसे अपने मॉडल की तरह समझें और ऐसे नाम दें जो उपयोगकर्ताओं को समझ में आएँ: membership, assignment, subscription. उदाहरण के लिए, यदि एक यूज़र के रोल में starts_at, ends_at, और granted_by हैं, तो user_role ठीक है, लेकिन UI में membership बेहतर पढ़ सकता है।\n\nसरल नियमों का सेट जो स्क्रीन को प्रोफेशनल रखता है:\n\n- हर टेबल में प्राइमरी की के रूप में id का उपयोग करें।\n- जॉइन टेबल्स का नाम दोनों एंटिटीज़ के साथ सुसंगत क्रम में रखें (user_role).\n- स्पष्ट फ़ॉरेन कीज़ जैसे user_id और role_id का उपयोग करें।\n- एक यूनिकनेस नियम जोड़ें जो वास्तविक जीवन से मेल खाता हो (उदा., हर user_id पर एक role_id)।\n- यदि आप इतिहास अनुमति देते हैं, तो यूनिकनेस नियम को सक्रिय रिकॉर्ड्स से मेल खाने वाला बनाएं (उदा., ended_at null होने पर यूनिक)।\n\nये चुनाव आपके डेटा बढ़ने पर भी टिकते हैं, और AppMaster के Data Designer के साथ अच्छी तरह काम करते हैं, जहाँ स्क्रीन सीधे मॉडल से जेनरेट की जा सकती हैं।\n\n## फील्ड नामकरण पैटर्न जो साफ़ कॉलम और फ़िल्टर देते हैं\n\nफील्ड नाम सिर्फ़ डेवलपर्स की मदद नहीं करते। वे तय करते हैं कि उपयोगकर्ता कॉलम हेडर, फ़िल्टर लेबल और फॉर्म फील्ड्स को कैसे देखेंगे।\n\nअनुमेय प्रत्यय अनुमान हटाते हैं:\n\n- फ़ॉरेन कीज़ के लिए _id का प्रयोग: customer_id, assigned_agent_id.\n- टाइमस्टैम्प के लिए _at: created_at, paid_at, closed_at.\n- काउंटर के लिए _count: login_count, attachment_count.\n\nबूलियंस वाक्य की तरह पढ़ने चाहिए। is_ और has_ पसंद करें ताकि चेकबॉक्स एक नज़र में समझ आ जाए: is_active, has_paid, is_verified. is_not_approved जैसे डबल नेगेटिव से बचें। यदि आपको "नहीं" स्थिति चाहिए, तो सकारात्मक मॉडल बनाएं और लॉजिक में उसे उलट दें।\n\nमनी फील्ड्स एडमिन ग्रिड्स में अक्सर भ्रम का स्रोत होते हैं। एक तरीका चुनें और उसी पर टिके रहें: छोटे यूनिट्स (सेंट्स) को इंटीजर में स्टोर करें, या निश्चित प्रिसिशन के साथ दशमलव रखें। फील्ड का नाम ऐसा रखें कि किसी को अनुमान न लगाना पड़े। उदाहरण: total_amount_cents + currency_code, या total_amount + currency_code. price, amount, और total को तब तक मिलाएँ नहीं जब तक वे अलग अवधारणाएँ न दर्शाएँ।\n\nटेक्स्ट फील्ड्स उद्देश्य के बारे में स्पष्ट होने चाहिए, सिर्फ़ प्रकार के बारे में नहीं। description उपयोगकर्ता-उन्मुख है। internal_comment निजी है। notes पक-ऑल है और सावधानी से उपयोग होना चाहिए। यदि आपके पास कई नोट्स हैं, तो उन्हें ऑडियंस के अनुसार नाम दें: customer_note, agent_note.\n\nसंपर्क फील्ड्स स्पष्ट होने चाहिए क्योंकि वे अक्सर जल्दी के फ़िल्टर बन जाते हैं: website_url, contact_email, billing_email. AppMaster से जेनरेटेड एडमिन स्क्रीन्स में ऐसे नाम आम तौर पर साफ़ डिफ़ॉल्ट लेबल बनाते हैं।\n\n## रिलेशन्स और फ़ॉरेन कीज़: नाम जो डेटा मॉडल को समझाएँ\n\nअच्छा रिलेशन सामान्य अंग्रेज़ी जैसा पढ़ना चाहिए। जब एक एडमिन पैनल डेटाबेस से जेनरेट होता है, तो फ़ॉरेन कीज़ अक्सर कॉलम टाइटल, फ़िल्टर और फॉर्म लेबल बन जाते हैं।\n\nएक नियम रखें: फ़ॉरेन की कॉलम संदर्भित टेबल के नाम के साथ _id हो। यदि आपके पास customer.id है, तो उपयोग करें customer_id. यदि आपके पास order.id है, तो उपयोग करें order_id. यह संगति यह स्पष्ट कर देती है कि एक कॉलम किसकी ओर इशारा कर रहा है।\n\nसेल्फ-रिलेशन्स को अतिरिक्त स्पष्टता चाहिए क्योंकि वे बाद में आसानी से गलत पढ़े जाते हैं। related_id जैसे सामान्य नाम से बचें। दिशा और अर्थ स्पष्ट करने वाले नाम उपयोग करें, जैसे पेड़ों के लिए parent_id, संगठन चार्ट के लिए manager_id, या डिड्यूपिंग के लिए merged_into_id.\n\nजब रिलेशन जॉइन टेबल को शामिल करे, तो इसे वाक्य जैसा पढ़ने लायक नाम दें। उदाहरण: यदि भूमिका "assignee" है, तो ticket_assignee.user_id ticket_user.user_id की तुलना में स्पष्ट है (और न कि "reporter" या "watcher")।\n\nकुछ व्यावहारिक जाँचें जो ज़्यादातर समस्याओं को रोकती हैं:\n\n- owner_id को अलग-अलग अर्थों में दोबारा उपयोग न करें। created_by_user_id, account_manager_user_id, या billing_contact_id पसंद करें।\n- यदि आपके पास एक ही तालिका के कई रिलेशन्स हैं, तो भूमिका शामिल करें: requested_by_user_id और approved_by_user_id.\n- एक सॉफ्ट-डिलीट मार्कर चुनें और उसी पर टिके रहें। deleted_at व्यापक रूप से समझा जाता है और फ़िल्टर्स के साथ अच्छा काम करता है।\n\nयदि आप बाद में AppMaster में स्क्रीन बनाते हैं, तो ये नाम हर जगह दिखाई देंगे, इसलिए यहाँ थोड़ी सावधानी UI क्लीनअप को बहुत बचाती है।\n\n## एन्थम्स और स्टेटस फील्ड्स जो समय के साथ समझने योग्य रहें\n\nयदि आपका एडमिन पैनल आपके डेटाबेस से जेनरेट होता है, तो सबसे तेज़ तरीका जिससे स्क्रीन गंदे लगने लगती हैं वह है बहुत सारे छोटे फ़्लैग्स में अर्थ बिखेरना। मुख्य रिकॉर्ड लाइफसाइकल के लिए एक स्पष्ट स्टेटस एन्थम पसंद करें, और केवल उन व्यवहारों के लिए अतिरिक्त फ्लैग रखें जो वास्तव में अलग हों।\n\nएक उपयोगी नियम: यदि उपयोगकर्ता पूछेंगे "यह आइटम अपनी यात्रा में कहाँ है?", तो वह स्टेटस है। यदि सवाल है "क्या हमें इसे छुपाना चाहिए?" या "क्या यह लॉक है?", तो वह अलग बूलियन है।\n\n### एक स्टेटस पाँच बूलियनों से बेहतर है\n\nis_new, is_in_progress, is_done, is_cancelled के बजाय एक ticket_status का उपयोग करें। यह लिस्ट कॉलम, फ़िल्टर और बुल्क एक्शन्स में बेहतर पढ़ता है। यह असंभव संयोजनों जैसे "done + in_progress" से भी बचाता है।\n\nएन्थम मानों को स्थिर रखें। UI टेक्स्ट बदला जा सकता है, पर स्टोर किए गए मान नहीं। waiting_for_review जैसे शब्दों के बजाय pending स्टोर करें। बाद में आप केवल प्रदर्शन लेबल बदल सकते हैं बिना डेटा माइग्रेट किए।\n\nजब आपको अतिरिक्त विवरण चाहिए, तो स्टेटस ओवरलोड करने के बजाय एक दूसरा फ़ील्ड जोड़ें। उदाहरण: लाइफसाइकल के लिए payment_status रखें, और ज़रूरत पड़ने पर failure_reason (टेक्स्ट) जोड़ें।\n\n### फ़िल्टर समझ में रहें — डोमेन के अनुसार नाम दें\n\nजब कई मॉडल में "status" हो, तो डोमेन प्रीफ़िक्स का प्रयोग करें ताकि स्क्रीन पठनीय रहें:\n\n- payment_status (ऑर्डर चेकआउट)\n- ticket_priority (सपोर्ट प्राथमिकता)\n- user_role (एक्सेस स्तर)\n- invoice_status (बिलिंग लाइफसाइकल)\n- delivery_status (शिपिंग लाइफसाइकल)\n\nवर्कफ़्लो को दर्शाने वाला status अलग रखें और संचालनात्मक फ्लैग्स अलग: उदाहरण के लिए status बताते है कि यह वर्कफ़्लो में कहाँ है, जबकि is_archived बताता है कि इसे रोज़मर्रा की सूचियों से छुपाया जाना चाहिए।\n\nहर एन्थम मान के लिए एक एक-लाइन अर्थ अपनी टीम नोट्स में लिखें। भविष्य का आप cancelled और voided के बीच का अंतर भूल जाएगा। यदि आप AppMaster का उपयोग कर रहे हैं, तो वे संक्षिप्त परिभाषाएँ जेनरेटेड ड्रॉपडाउन और फ़िल्टर दोनों में संगति बनाए रखने में मदद करती हैं।\n\n## एज केस: तिथियाँ, ऑडिट फील्ड और type कॉलम\n\nनामकरण गाइड अक्सर टेबल्स और बुनियादी फ़ील्ड्स को कवर करते हैं, पर एडमिन पैनल किनारे के मामलों में गड़बड़ा दिखते हैं। तिथियाँ, ऑडिट फील्ड और type कॉलम वे जगहें हैं जहाँ भ्रमित नाम स्क्रीन को उलझन में बदल देते हैं।\n\nतिथियों और टाइमस्टैम्प्स के लिए, नाम बताये कि यह कहानी क्या है: क्या यह नियोजित है, वास्तविक है, या एक रिमाइंडर है? एक सरल पैटर्न क्रिया-हैसा अर्थ और स्पष्ट प्रत्यय है। उदाहरण: due_at (नियोजित डेडलाइन) और completed_at (वास्तविक समापन) समझने योग्य कॉलम और फ़िल्टर बनाते हैं। start_date और end_date जैसे अस्पष्ट जोड़ियों से बचें जब आप सचमुच scheduled_at और finished_at कहना चाहते हों।\n\nऑप्शनल रिलेशन्स एक और आम जाल हैं। हर तालिका के लिए नई पैटर्न न बनाएं। रिलेशन नाम स्थिर रखें और "वैकल्पिक" को nulls की अनुमति देकर व्यक्त करें, न कि फ़ील्ड का नाम बदलकर। manager_id फिर भी manager_id ही होना चाहिए भले ही वह वैकल्पिक हो।\n\nपते (addresses) को कोड में ठीक दिखने के बावजूद ग्रिड्स में बदसूरत बनना आसान है। नंबर वाली लाइनों का प्रयोग तभी करें जब आपकी टीम हर जगह उनका अर्थ मानती हो। उन्हें स्पष्ट रखें:\n\n- address_line1, address_line2, city, region, postal_code, country_code\n- address1, address2 से बचें (कम पढ़ने योग्य, डुप्लिकेट करने में आसान)\n\nऑडिट फील्ड जानबूझकर बोरिंग होने चाहिए:\n\n- created_at, updated_at\n- created_by_id, updated_by_id (सिर्फ यदि आपको वास्तव में यूज़र ट्रैकिंग चाहिए तो)\n\ntype के साथ सावधान रहें। यह अक्सर बहुत व्यापक होता है और समय के साथ बुढ़ापा दिखाता है। type के बजाय अर्थ बताने वाला नाम रखें: payment_method, ticket_channel, customer_tier. स्कीमा-ड्रिवन एडमिन स्क्रीन (जिसमें AppMaster भी शामिल है) में यह एकल चुनाव साफ़ फ़िल्टर और भ्रम-रहित ड्रॉपडाउन का फ़र्क कर सकता है।\n\n## उदाहरण: सपोर्ट टिकट मॉडल का नामकरण जो एडमिन में अच्छा दिखे\n\nएक छोटा, वास्तविक सपोर्ट सेटअप: ग्राहक लिखते हैं, स्टाफ जवाब देते हैं, और टिकट टैग किए जा सकते हैं। नामकरण नियम वही चीज़ें हैं जो ऑटो-जनरेटेड मेन्यू, लिस्ट स्क्रीन और फ़िल्टर को सहज बनाते हैं।\n\nसाइडबार में संज्ञा जैसा पढ़ने वाले टेबल नामों से शुरू करें:\n\n- customer\n- ticket\n- ticket_message\n- ticket_tag\n- ticket_tag_link\n\nअधिकांश एडमिन पैनलों में ये "Tickets" और "Ticket Messages" जैसे लेबल बन जाते हैं, और जॉइन टेबल रास्ते में नहीं आती।\n\nटिकट लिस्ट स्क्रीन के लिए, उन फ़ील्ड नामों का चयन करें जो स्पष्ट कॉलम हेडर और फ़िल्टर बनते हैं:\n\n- subject, status, priority\n- assigned_to_id (स्टाफ यूज़र की ओर इशारा करता है)\n- last_message_at (सबसे हाल की पर सॉर्ट करने के लिए)\n- created_at (मानक और अनुमान्य)\n\nएन्थम्स वे जगह हैं जहाँ पठनीयता बाद में अक्सर टूटती है, इसलिए सेट को स्थिर और सादा रखें:\n\n- ticket_status: new, open, pending_customer, resolved, closed\n- ticket_priority: low, normal, high, urgent\n\nएक नामकरण निर्णय जो लगातार भ्रम से रोकता है: "customer" को ओवरलोड न करें। सपोर्ट में, अनुरोधकर्ता हमेशा ग्राहक नहीं होता (एक सहकर्मी किसी के behalf पर सबमिट कर सकता है)। यदि आप टिकट भेजने वाले व्यक्ति को स्टोर करते हैं, तो उसे requester_id कहें, और अलग से customer_id स्टोर करें उस खाते के लिए जिसके बारे में टिकट है। यह अंतर फॉर्म्स और फ़िल्टर को पहले दिन से सच्चा रखता है।\n\n## चरण-दर-चरण: स्क्रीन बनाने से पहले नया मॉडल कैसे नाम दें\n\nस्क्रीन पठनीय रखने का सबसे आसान तरीका यह है कि चीज़ों का नामकरण उस समय करें जब आप अभी भी सामान्य भाषा में सोच रहे हों, न कि जब आप पहले से ही बना रहे हों।\n\n### हर फीचर के लिए एक दोहराने योग्य प्रक्रिया\n\n1) एक छोटी ग्लॉसरी से शुरुआत करें (5 से 10 शब्द)। वे शब्द लिखें जो एक गैर-तकनीकी teammate मीटिंग में बोलेगा, फिर प्रत्येक अवधारणा के लिए एक पसंदीदा शब्द चुनें (उदा., “customer” बनाम “client”)।\n\n2) जिन स्क्रीन की आप उम्मीद करते हैं उन्हें स्केच करें: सूची, विवरण, क्रिएट, एडिट। लिस्ट व्यू के लिए, तय करें कि कौन से 5 से 8 कॉलम तुरंत स्पष्ट होने चाहिए। यदि कोई फ़ील्ड नाम हेडर के रूप में अजीब लगे, तो संभवतः उसे बदलने की ज़रूरत है।\n\n3) टेबल्स और रिलेशन्स का ड्राफ्ट बनाएं, फिर प्रत्यय नियमों का उपयोग करते हुए फील्ड्स का नाम रखें (*_id, *_at, is_*, *_count). जब आप बाद में एडमिन स्क्रीन जेनरेट करते हैं (AppMaster सहित), ये पैटर्न साफ़ लेबल और अनुमान्य फ़िल्टर बनाते हैं।\n\nआगे बढ़ने से पहले, सुनिश्चित करें कि आप स्टाइल नहीं मिला रहे (customer_id एक टेबल में और clientId दूसरी में)। संगति चालाकी से बेहतर है।\n\n4) एन्थम्स जल्दी परिभाषित करें, न कि पहले UI बनने के बाद। हर मान के लिए एक लाइन की परिभाषा लिखें, जैसे आप इसे सपोर्ट स्टाफ को समझा रहे हों। टिकाऊ मान पसंद करें जैसे pending, active, archived (न कि new, newer, newest).\n\n5) एक "कॉलम हेडर रीड-थ्रू" करें। खुद को एडमिन यूज़र मानकर एक तालिका स्कैन करें।\n\n- क्या “Created At”, “Updated At”, “Status”, “Assigned To”, “Total Amount” बिना ट्रेनिंग समझ आएँगे?\n- क्या कोई फ़ील्ड अंदरूनी कोड जैसा लगता है (tmp_flag, x_type, data1)?\n- क्या यूनिट्स स्पष्ट हैं (amount_cents बनाम amount, duration_seconds बनाम duration)?\n\nयदि कुछ भी बोलकर अजीब लगे, तो अब ही नाम बदल दें। बाद में रीनेम करना संभव है, पर अक्सर रिपोर्ट्स, फ़िल्टर और आदतों में रिसाव होता है।\n\n## आम नामकरण गलतियाँ जो एडमिन पैनल को कठिन बनाती हैं\n\nयदि स्कीमा गंदा है, तो स्क्रीन गंदी दिखेगी, चाहे UI कितना भी अच्छा हो। नामकरण नियम "स्टाइल" से ज़्यादा रोज़मर्रा की उपयोगिता के बारे में होते हैं।\n\nपहला जाल मिश्रित शब्दावली है। यदि एक टेबल client कहता है और दूसरी customer, तो आपके मेन्यू, फ़िल्टर और सर्च परिणाम अलग चीजें बताते हुए लगेंगे। हर कोर कॉन्सेप्ट के लिए एक शब्द चुनें और हर जगह उसका उपयोग करें, रिलेशन नामों सहित।\n\nएक और आम समस्या अत्यधिक संक्षेप है। addr, misc, या info जैसे संक्षेप कुछ अक्षर बचाते हैं पर टेबल्स और एक्सपोर्ट्स में स्पष्टता खर्च करते हैं।\n\nतीसरी गलती UI फ्लो को डेटाबेस में बेक कर देना है। new_customer_wizard_step जैसा फ़ील्ड लॉन्च के दौरान समझ आता है, पर जब फ्लो बदले या दूसरा ऑनबोर्डिंग पथ जुड़ जाये तो भ्रमित कर देता है। व्यापारिक तथ्य स्टोर करें (उदा., onboarding_status) और UI को निर्णय लेने दें कि कैसे लोगों को मार्गदर्शित करना है।\n\nबूलियन ओवरलोड से भी सावधान रहें। is_new, is_open, और is_closed जोड़ने पर अंततः टकराव होंगे और अस्पष्ट फ़िल्टर बनेंगे। एक छोटी, सुविचारित स्टेटस फ़ील्ड पसंद करें।\n\nलाल झंडे जो आमतौर पर बदसूरत स्क्रीन की ओर ले जाते हैं:\n\n- एक ही चीज़ के दो अलग नाम (client_id कहीं, customer_id कहीं और)\n- कैच-ऑल कॉलम (notes, misc, extra) जो मिश्रित डेटा रख लेते हैं\n- समय-निर्भर नाम (summer_campaign_*) जो अभियान के बाद भी रहते हैं\n- एक ही स्थिति के लिए कई बूलियंस\n- बिना माइग्रेशन प्लान के आकस्मिक रीनेम्स\n\nरीनेम केवल खोज-और-बदल नहीं है। यदि आप customer_phone को phone_number में बदलते हैं, तो माइग्रेशन की योजना बनाएं, किसी भी जेनरेटेड स्क्रीन को अपडेट करें, और जहाँ जरूरत हो बैकवर्ड कम्पैटिबिलिटी रखें (विशेषकर यदि दूसरे सिस्टम API पढ़ते हैं)। AppMaster में, साफ़ नाम तुरंत फायदा देते हैं क्योंकि लिस्ट्स, फॉर्म्स और फ़िल्टर आपके मॉडल से लेबल इनहेरिट करते हैं।\n\n## शिप करने से पहले एक त्वरित चेकलिस्ट\n\nस्कीमा को "डन" कहने से पहले, रोज़ एडमिन पैनल में जीने वाले व्यक्ति के नजरिये से एक पास करें।\n\n- टेबल्स असली चीज़ों की तरह सुनाई दें। किसी teammate को बिना अनुमान के बताना चाहिए कि एक टेबल किसका प्रतिनिधित्व करती है (ticket, customer, invoice)।\n- प्रमुख फ़ील्ड्स प्रत्ययों का पालन करें। ऐसे पैटर्न इस्तेमाल करें जो लोग एक नज़र में पहचानें: रेफ़रेंस के लिए *_id, टाइमस्टैम्प के लिए *_at, पैसे के लिए *_amount (या *_amount_cents), और true/false के लिए is_*.\n- एन्थम्स स्थिर और सादे हों। pending, paid, failed जैसे मान स्टोर करें बजाय बदलने वाले UI वाक्यांशों के।\n- एक नया teammate अर्थ का अनुमान लगा सके। यदि फ़ील्ड्स बिना हेल्प टेक्स्ट के जेनरेटेड लिस्ट व्यू में आ जाएँ तो भी आशय स्पष्ट होना चाहिए।\n- अस्पष्ट शब्द हटाए या विशिष्ट बनाए जाएँ। data, value, type, या info जैसे जंक-ड्रॉर नामों की जगह status, source, category, notes, या external_reference लगाए जाएँ।\n\nयदि आप AppMaster के Data Designer से अपनी स्कीमा से एडमिन-शैली व्यू जेनरेट कर रहे हैं, तो यह चेकलिस्ट तुरंत व्यावहारिक है: साफ़ नाम साफ़ कॉलम और फ़िल्टर बनाते हैं, और उपयोगकर्ताओं के काम शुरू करते ही लेबल पैच करने में कम समय लगेगा।\n\n## अगले कदम: नामकरण को आदत बनाएं (और स्क्रीन को संगत रखें)\n\nअच्छा नामकरण एक बार का क्लीनअप नहीं है। यह एक छोटी आदत है जो जैसे-जैसे स्कीमा बढ़ता है आपके एडमिन UI को पठनीय रखती है।\n\nएक मौजूदा मॉड्यूल से शुरू करें और नियम केवल अगले नए टेबल पर लागू करें। इससे बड़े री-राइट से बचा जा सकेगा और आपको अभ्यास करने के लिए एक वास्तविक जगह मिलेगी। यदि आपका अगला फीचर आदेश प्रणाली में "returns" जोड़ता है, तो उस टेबल, फ़ॉरेन कीज़ और स्टेटस को अपने पैटर्न से नाम दें और फिर अगली बार वही तरीका दोहराएँ।\n\nएक पेज का नामकरण गाइड वहाँ रखें जहाँ आप स्कीमा काम करते हैं। इसे छोटा रखें: आप टेबल्स, प्राइमरी कीज़, फ़ॉरेन कीज़, टाइमस्टैम्प्स और स्टेटस एन्थम्स को कैसे नाम देंगे। लक्ष्य जल्दी निर्णय है, लंबी बहस नहीं।\n\nयदि आप AppMaster के साथ बिल्ड करते हैं, तो ये पैटर्न Data Designer में सेट करना मददगार होता है इससे पहले कि आप UI स्क्रीन छुएं। जब आप टेबल्स या फील्ड्स का नाम बदलते हैं, तो ऐप को रीजनरेट करें ताकि स्क्रीन, API, और लॉजिक एक साथ रहें न कि अलग-अलग।\n\nरिलीज़ से पहले एक हल्का रिव्यू स्टेप आमतौर पर काफी होता है:\n\n- क्या टेबल और फील्ड नाम मेन्यू आइटम, कॉलम हेडर और फ़िल्टर्स के रूप में पढ़ने लायक हैं?\n- क्या स्टेटस और एन्थम्स बिना अतिरिक्त स्पष्टीकरण के स्पष्ट हैं?\n- क्या रिलेशन्स और फ़ॉरेन कीज़ अपने आप को समझाती हैं (कोई रहस्यमय संक्षेप नहीं)?\n- क्या समान मॉडल संगत रूप से नामित हैं (एक ही शब्द, एक ही क्रम)?\n\nसमय के साथ, असली जीत संगति है। जब हर नया मॉडल एक ही नियमों का पालन करता है, तो आपके एडमिन पैनल्स जेनरेट होने के बावजूद डिज़ाइन की तरह दिखना शुरू हो जाते हैं, क्योंकि लेबल और सूचियाँ एक सुसंगत उत्पाद की तरह पढ़ती हैं।
सामान्य प्रश्न
ऐसी नामावली इस्तेमाल करें जो रिकॉर्ड क्या है यह बताए, न कि यह क्या करता है। ticket या invoice जैसा नाम साफ़ मेन्यू आइटम बनता है, जबकि processing वर्कफ़्लो बदलते ही भ्रमित कर देता है।
एक स्टाइल चुनें और हर जगह उसी का पालन करें। अधिकांश डेटाबेस के लिए snake_case पढ़ने में आसान होता है और जेनरेटेड लेबल/फ़िल्टर को यादृच्छिक नहीं बनने देता।
डिफ़ॉल्ट रूप से पूरे और स्पष्ट शब्दों का प्रयोग करें, क्योंकि ये कॉलम हेडर और फ़िल्टर लेबल बनते हैं। acct या addr1 जैसे संक्षेप ऑपरेटर्स के लिए हिचक पैदा करते हैं, भले ही डेवलपर समझे।
एक तरीका चुनें और संगत रहें: या तो सिंगुलर (ticket) या प्लुरल (tickets)। लक्ष्य यह है कि नेविगेशन और पेज टाइटल्स मॉड्यूलों में स्टाइल न बदलें।
एक सादा नियम रखें: हर टेबल की प्राइमरी की id हो और फ़ॉरेन कीज़ something_id हों। यह रिलेशन्स को अनुमान योग्य बनाता है और जेनरेटेड फॉर्म/रेफरेंस फील्ड्स को संगत बनाता है।
शुद्ध जॉइन टेबल्स का नाम दोनों एंटिटीज़ के नाम से एक सुसंगत क्रम में रखें, जैसे user_role या product_tag। यदि रिलेशन के अपने फील्ड और मायने हों तो उसे membership या assignment जैसे वास्तविक संज्ञा का नाम दें ताकि UI स्वाभाविक पढ़े।
डेटा प्रकार और मकसद के अनुसार प्रत्यय इस्तेमाल करें: _at टाइमस्टैम्प के लिए, _count काउंटर के लिए। बूलियंस के लिए is_ और has_ पसंद करें ताकि जेनरेटेड स्क्रीन में चेकबॉक्स वाक्य जैसा पढ़े।
मुख्य लाइफसाइकल के लिए एक स्पष्ट स्टेटस फ़ील्ड पसंद करें, जैसे ticket_status या invoice_status, बजाय कई ओवरलैपिंग बूलियंस के। स्टोर किए गए मान स्थिर और सादे रखें ताकि प्रदर्शन टेक्स्ट बाद में बदला जा सके बिना माइग्रेशन के।
Generic नामों का दोहराव यानी owner_id जैसी चीज़ें अलग-अलग अर्थों में न उपयोग करें। भूमिका-विशिष्ट नाम जैसे created_by_user_id, approved_by_user_id, या payment_method उपयोग करें ताकि स्क्रीन और फ़िल्टर खुद-ब-खुद स्पष्ट हों।
जल्दी में नहीं—पहले, स्क्रीन/रिपोर्ट्स/फ़िल्टर पुरानी नामों पर निर्भर बनने से पहले रीनेम करें। AppMaster में Data Designer में नाम अपडेट करें और एप रीजनरेट करें ताकि UI और API एक साथ रहें।


