افزودن جستجوی چندجدولی
هدف
فیلدی بسازید که به رکوردی در یکی از چند جدول ارجاع دهد — «مشتری»ای که میتواند یک حساب یا یک مخاطب باشد، «پرداختکننده»ای که میتواند هر یک از چهار چیز باشد.
پیشنیازها
- با نقش سازنده (یا مدیر پلتفرم) وارد شدهاید.
- جدولی که فیلد را به آن میافزایید وجود دارد، و حداقل دو جدول هم که میخواهید فیلد بتواند به آنها ارجاع دهد.
گامها
- جدولها را باز کنید، محیط را برگزینید و جدول خود را روی زبانهٔ فیلدها باز کنید.
- جدید را بزنید و مثل همیشه نام نمایشی و نام منطقی بدهید.
- برای نوع داده، جستجوی رکورد (چند جدول) را برگزینید.
- جدولهایی را که فیلد میتواند به آنها ارجا ع دهد تیک بزنید. حداقل دو تا. شمارهٔ کوچکی کنار هر جدول تیکخورده ترتیب تیک زدن شما را نشان میدهد — و همان ترتیبی است که کاربر میبیند، پس اولی همان جدولی است که انتخابگر روی آن باز میشود. رایجترین را اول تیک بزنید.
- افزودن را انتخاب کنید.
- مثل هر فیلد دیگری، فیلد بهمحض افزوده شدن فعال است — ستونش همانجا وجود دارد.
کاربر چه میبیند
یک کادر جستجوی معمولی. با برگزیدنش پنلی باز میشود، و جدولهایی که تیک زدهاید سرِ آن پنلاند، بالای همان نامهایی که فیلترشان میکنند:
مشتری
[ 👤 آدا لاولیس ] ← بسته: رکورد، با نشانک جدولش
─────────────────────────────
[ حساب ] [ مخاطب ] ← باز: جدولهایی که تیک زدید، به ترتیب شما
آدا لاولیس ← …و نتیجهها در هر کدام که برگزیده شده
آدا بایرون
اول برگزیدن جدول، گامی اضافی برای خودش نیست. «مخاطبی به نام آدا پیدا کن» و «حسابی به نام آدا پیدا کن» دو جستوجوی متفاوت روی دو مجموعهٔ متفاوت از ستونها هستند، پس یک فهرست نتیجهٔ درهمآمیخته باید ستونهایی را با هم تطبیق دهد که متناظر نیستند. نام بردن جدول در ابتدا یعنی هر چه پایینتر است همان جستجوی رکوردی است که از قبل کار میکند — با جستوجو، خط دوم، تصاویر و پنجرهٔ جستجوی پیشرفتهاش.
جدولها درون پنلاند، نه بالای کادر، تا وقتی کسی چیزی برنمیگزیند جایی از فرم را نگیرند. به همین دلیل رکورد برگزیده نشانک جدولش را کنار خود نشان میدهد: با پنهان بودن انتخابگر، همان نشانک است که هنوز میگوید آدا یک حساب است یا یک مخاطب. این همان نشانکی است که در طراح جدول به جدول دادهاید، پس اگر قرار است چند جدول در یک جستجوی چندجدولی کنار هم بیایند، نشانکهای متمایز به آنها بدهید.
تغییر جدول، انتخاب را پاک میکند، و این عمدی است: شناسهٔ یک مخاطب شناسهٔ یک حساب نیست.
چه چیزی ذخیره میشود
دو چیز، در دو ستون: شناسهٔ رکورد، و اینکه در کدام جدول است. اگر جدول را مستقیم کوئری بگیرید ستون
دوم را میبینید — نام ستون شما با _type در انتهایش، که نام منطقی جدول را نگه میدارد.
این همان شکلی است که پلتفرم از قبل برای مالک یک رکورد به کار میبرد، و همین دلیل آن است که این فیلد یک نوع دادهٔ جداگانه است و نه یک جستجوی رکورد با فهرست مقصد بلندتر.
تنها معاوضهٔ واقعی: بدون کلید خارجی
یک جستجوی رکورد معمولی کلید خارجی واقعی میگیرد، پس خودِ پایگاه داده جلوی حذف رکوردی را که به آن ارجاع میدهد میگیرد. یک جستجوی چندجدولی نمیتواند کلید خارجی داشته باشد — یک ستون نمیتواند به چند جدول ارجاع دهد — بنابراین:
- پلتفرم هنوز در هر ذخیره بررسی میکند که رکورد برگزیده وجود دارد.
- اما اگر کسی بعداً آن رکورد را حذف کند، چیزی جلویش را نمیگیرد. فیلد در آن صورت بهجای نام، خود ارجاع خام را نشان میدهد — همان چیزی که یک جستجوی معمولی هنگام از دست رفتن مقصدش نشان میدهد: دیدنی، نه خاموش.
- حذف کل یک جدول همچنان تا وقتی یک جستجوی چندجدولی آن را بهعنوان مقصد فهرست کرده مسدود است، مثل جستجوی معمولی.
اگر فقط به یک جدول نیاز دارید، از جستجوی رکورد ساده استفاده کنید. کلید خارجی را میگیرید، و طراح هم همین را به شما میگوید تا بهاشتباه ستون ضعیفتری نسازید.
زبانههای مرتبط هنوز کار میکنند
هر جدول تیکخورده ارتباط خودش را میگیرد، پس رکوردی در هر یک از آنها زبانهٔ مرتبط خود را دارد که رکوردهای ارجاعدهنده به آن را فهرست میکند. فرم یک حساب مشتریهایش را نشان میدهد؛ فرم یک مخاطب هم همینطور. چیز اضافه ای برای تنظیم نیست.
مالک هم یکی از اینهاست
مالک یک رکورد یک ارجاع چندجدولی است — یک شخص یا یک تیم — و روی هر فرمی که فیلد مالک را جای داده باشد با همین کنترل نمایش داده میشود. برگزیدن مالک تازه در آنجا همان کاری را میکند که فرمان واگذاری میکند و از همان بررسیها میگذرد؛ تغییر مالک یک رکورد را ببینید.
عیبیابی
- «حداقل دو جدول را تیک بزنید.» — با یک مقصد این یک جستجوی رکورد معمولی است که کلید خارجیاش را بیدلیل از دست داده. بهجایش جستجوی رکورد را برگزینید.
- وقتی فیلدی موجود را باز میکنم جدولها غیرفعالاند. — فهرست مقصد پس از ساخت فیلد ثابت است، به همان دلیلی که مقصد یگانهٔ یک جستجوی معمولی ثابت است: رکوردها از قبل ارجاعهایی دارند که در برابر همین فهرست بررسی شده اند، و برداشتن یک جدول برخی از آنها را به چیزی ارجاع میداد که فیلد میگوید نمیتواند به آن برسد. فیلد را حذف کنید و دوباره بسازید.
- انتخابگر نامهای منطقی را نشان میدهد نه نام جدولها. — فهرست جدولهای محیط هنوز بارگذاری نشده. لحظهای بعد حل میشود؛ اگر نشد فرم را ببندید و باز کنید.
- فیلد چیزی مثل
contact:9f2c…نشان میدهد نه یک نام. — رکوردی که به آن ارجاع میدهد حذف شده. یکی دیگر برگزینید. - جدولی که میخواهم در فهرست نیست. — جدولِ خودِ فیلد کنار گذاشته میشود، مثل یک جستجوی معمولی. هر چیز دیگری در محیط پیشنهاد میشود.