سلام چند وقت پیش مشکل عجیبی موقع نام‌گذاری جدول‌های sql برام پیش اومد که خیلی طول کشید دلیلشو بفهمم و بعد با یه کلک جالب مشکلو حل کردم. من دارم یه اپ اندرویدی می‌نویسم که توی اون سنارویی پیش اومد که کاربر یک نوشته (استرینگ) رو توی برنامه وارد می کنه و این نوشته توی جدولی از دیتابیس A داخل یک رکورد ذخیره می‌شه و همچنین توی دیتابیس B یک جدول ایجاد می‌شه که نام اسمش همین رشته‌ایه که کاربر وارد کرده. خب یه عکس زشت (به بزرگی خودتون ببخشید دیگه?) آماده کردم که این سناریو رو نشون می‌ده. این کار بعضی وقتا باعث ایجاد خطا در برنامه می‌شه. ام ا چرا؟ دلیلش اینه که ما کنترلی روی ورودی کاربر نداریم و کاربر می‌تونه هر رشته‌ای وارد کنه ولی sql هر اسمی‌رو به عنوان نام جدول قبول نمی‌کنه! - راه او ل: خب یه راهی که به ذهن می‌رسه اینه که کاربر رو مجبور به وارد کردن ورودی معتبر برای نام جدول بکنیم که تجربه‌ی کاربری خوبی نیست. - راه دو م: یه راه بهتر که به ذهن می‌رسه اینه که بذاریم کاربر هر چیزی رو که می‌خواد به عنوان ورودی وارد کنه و ما بیایم و اون ورودی رو برای نام جدول معتبرسازی ( validate ) کنیم. - یه راه سو می‌هم هست که جواب اصلی مسیله‌ی ماست (پایین‌تر بعد از راه دو م توضیحش دادم?) بررسی راه دو م: نام جدول‌ها در sql باید دارای یک سری شرایط باشه. مثلا نباید داخلش از کاراکتر اسپیس یا یا % و. استفاده کرد. شما می‌تونید از شرایط لازم برای نام جدول در sql رو مطالعه کنید. خب من برای این کار تابعی با نام validateTableName نوشتم که یک استرینگ به عنوان ورودی می‌گیره، اون‌رو برای نام جدول sql معتبرسازی می کنه و برمی‌گردونه. کار این تابع اینه که اگه کاراکتر نامعتبری داخل ورودی باشه یه سری کاراکتر درهم و برهم به جای اون کاراکتر قرار می‌ده. من دیگه وارد جزییات این تابع نمی‌شم خودتون می‌تونید بخونید. این تابع می‌تونه برای رفع مشکل ایجاد شده به درد بخوره ام ا توی این سناریو یه راه بهتر به ذهنم رسید. بررسی راه سو م: - و ام ا اون راه چیه؟ همون طور که توی عکس بالا هم دیدید متنی که کاربر وارد می کنه داخل رکوردی از Database A => table ذخیره می‌شه و سپس یک جدول در دیتابیس B ایجاد می شه که نامش همین ورودی کاربره. خب چه کاریه؟ نام جدولی که توی دیتابیس B ساخته می‌شه رو بر اساس id ای که در Database A => table هست انتخاب می‌کنیم. با این کار، کاربر هر چیزی که بخواد به عنوان ورودی وارد می‌کنه، اون ورودی داخل رکوردی از Database A => table ذخیره می‌شه و‌id متناظر با این رکورد برای نام جدول ساخته شده در دیتابیس B استفاده می‌شه. توج ه: نام جدول نمی‌تونه یه عدد باشه در صورتی که‌id یک عدد هست که برای رفع این مشکل هم یک آندرلاین به او ل id اضافه کردم. خیلی ممنون که وقت گذاشتید و این نوشته‌رو خوندید. اگر شما راه بهتری به ذهنتون می‌رسه حتما تو کامنتا بگید? و نظرم یادتون نره!