انواع محدوده انواع داده ها هستند که طیف وسیعی از مقادیر برخی از عناصر را نشان می دهند (به نام زیرگروه دامنه). به عنوان مثال ، ممکن است دامنه Timestamp برای نشان دادن محدوده زمانی که یک اتاق جلسات محفوظ است ، استفاده شود. در این حالت نوع داده TSRANGE است (کوتاه برای "محدوده Timestamp") ، و Timestamp زیرگروه است. زیرگروه باید یک ترتیب کلی داشته باشد تا به خوبی تعریف شود که مقادیر عناصر در آن ، قبل و یا بعد از طیف وسیعی از مقادیر در داخل باشد.
انواع دامنه مفید هستند زیرا آنها مقادیر بسیاری را در یک مقدار محدوده واحد نشان می دهند ، و به دلیل اینکه مفاهیمی مانند دامنه های همپوشانی را می توان به وضوح بیان کرد. استفاده از محدوده زمان و تاریخ برای اهداف برنامه ریزی واضح ترین نمونه است. اما محدوده قیمت ، اندازه گیری از یک ابزار و موارد دیگر نیز می تواند مفید باشد.
هر نوع دامنه دارای یک نوع چند منظوره مربوطه است. Multirange یک لیست سفارش داده شده از دامنه های غیر مبهم ، غیر خالی ، غیر تهی است. بیشتر اپراتورهای دامنه نیز روی چند منظوره کار می کنند و چند کارکرد خاص خود را نیز دارند.
8. 17. 1. محدوده داخلی و انواع چند منظوره
PostgreSQL با انواع داخلی زیر وجود دارد:
int4range - دامنه عدد صحیح ، int4multirange - مربوط به چند منظوره
int8range - دامنه BigInt ، int8multirange - مربوط به چند منظوره
numrange - دامنه عددی ، nummultirange - مربوط به چند منظوره
Tsrange - دامنه Timestamp بدون منطقه زمانی ، tsmultirange - مربوط به چند منظوره
TSTZRANGE - دامنه Timestamp با منطقه زمانی ، TSTZMULTIRANGE - MULTIRANGE مربوطه
Daterange - دامنه تاریخ ، Datemultirange - مربوط به چند منظوره
علاوه بر این ، می توانید انواع دامنه خود را تعریف کنید. برای اطلاعات بیشتر به ایجاد نوع مراجعه کنید.
8. 17. 2. مثال ها
برای لیست های کامل اپراتورها و توابع در مورد انواع محدوده ، جدول 9. 54 و جدول 9. 56 را ببینید.
8. 17. 3. مرزهای فراگیر و انحصاری
هر محدوده غیر خالی دارای دو مرز ، مرز پایین و قسمت بالایی است. تمام نقاط بین این مقادیر در محدوده گنجانده شده است. یک محدوده فراگیر به این معنی است که خود نقطه مرزی در محدوده نیز گنجانده شده است ، در حالی که یک محدوده منحصر به فرد به این معنی است که نقطه مرزی در محدوده گنجانده نشده است.
در شکل متن یک دامنه ، یک محدوده پایین فراگیر توسط "[" نشان داده شده است در حالی که یک محدوده پایین منحصر به فرد توسط "(" نشان داده شده است. توسط " ) " .(برای اطلاعات بیشتر به بخش 8. 17. 5 مراجعه کنید.)
توابع به ترتیب پایین و بالا_ینک به ترتیب شمول مرزهای پایین و بالایی یک مقدار دامنه را آزمایش می کنند.
8. 17. 4. دامنه های بی نهایت (بی حد و مرز)
محدوده پایین یک دامنه می تواند حذف شود ، به این معنی که تمام مقادیر کمتر از حد بالایی در محدوده گنجانده شده اند ، به عنوان مثال ، (، 3]. محدوده پایین در محدوده گنجانده شده است. اگر هر دو مرز پایین و فوقانی حذف شوند ، تمام مقادیر نوع عنصر در محدوده در نظر گرفته می شوند. مشخص کردن یک محدوده گمشده به عنوان فراگیر به طور خودکار به منحصر به فرد تبدیل می شود ، به عنوان مثال ، [،] تبدیل می شود. به (،). شما می توانید از این مقادیر گمشده به عنوان infinity +/- فکر کنید ، اما آنها مقادیر خاصی از نوع هستند و فراتر از مقادیر بی نهایت از هر نوع عنصر محدوده در نظر گرفته می شوند.
انواع عناصر که دارای مفهوم "بی نهایت" هستند می توانند از آنها به عنوان مقادیر محدود محدود استفاده کنند. به عنوان مثال ، با دامنه های Timestamp ، [امروز ، Infinity) مقدار ویژه Timestamp Infinity را حذف نمی کند ، در حالی که [امروز ، بی نهایت] آن را شامل می شود ، مانند امروز ،) و [امروز ،].
توابع به ترتیب آزمایشات پایین و بالا_ینف برای مرزهای پایین و بالایی نامتناهی از یک محدوده.
8. 17. 5. محدوده ورودی/خروجی
ورودی برای یک مقدار دامنه باید یکی از الگوهای زیر را دنبال کند:
پرانتز یا براکت ها نشان می دهد که آیا مرزهای پایین و بالایی منحصر به فرد یا فراگیر هستند ، همانطور که قبلاً توضیح داده شد. توجه کنید که الگوی نهایی خالی است ، که نشان دهنده یک محدوده خالی است (دامنه ای که حاوی هیچ امتیاز نیست).
محدوده پایین ممکن است یا رشته ای باشد که ورودی معتبر برای زیرگروه باشد ، یا خالی باشد تا هیچ محدودیتی پایین نشان نداد. به همین ترتیب ، محدوده فوقانی ممکن است یا رشته ای باشد که ورودی معتبر برای زیرگروه باشد ، یا خالی باشد تا هیچ حد بالایی را نشان دهد.
هر مقدار محدود را می توان با استفاده از "(نقل قول های دو برابر)" نقل کرد. این ضروری است اگر مقدار محدود حاوی پرانتز ، براکت ، کاما ، نقل قول های مضاعف یا پشتی باشد ، زیرا این شخصیت ها در غیر این صورت به عنوان بخشی از نحو دامنه گرفته می شوند. یک نقل قول دوگانه یا پشتی در یک مقدار محدود نقل شده ، قبل از آن با یک backslash پیش بینی کنید. رشته های تحت اللفظی.) از طرف دیگر ، شما می توانید از نقل و استفاده از پشت پرده برای محافظت از همه شخصیت های داده که در غیر این صورت به عنوان نحو دامنه گرفته می شوند ، خودداری کنید. یک محدوده بی نهایت
فضای سفید قبل و بعد از مقدار محدوده مجاز است ، اما هر فضای سفید بین پرانتز یا براکت به عنوان بخشی از مقدار محدود یا بالا بالا گرفته می شود.(بسته به نوع عنصر ، ممکن است یا ممکن است قابل توجه باشد.)
این قوانین بسیار شبیه به مواردی است که برای نوشتن مقادیر فیلد در لفظات از نوع کامپوزیت وجود دارد. برای تفسیر اضافی به بخش 8. 16. 6 مراجعه کنید.
ورودی برای یک Multirange براکت های فرفری است () حاوی دامنه های صفر یا معتبر تر ، از هم جدا شده توسط کاما. فضای سفید در اطراف براکت ها و کاما مجاز است. این در نظر گرفته شده است که یادآور نحو آرایه باشد ، اگرچه چند منظوره بسیار ساده تر هستند: آنها فقط یک بعد دارند و نیازی به نقل قول آنها نیست.(با این حال ممکن است مرزهای دامنه آنها نقل شود.)
8. 17. 6. ساخت محدوده و چند منظوره
هر نوع محدوده دارای یک تابع سازنده با همان نام نوع دامنه است. استفاده از عملکرد سازنده غالباً راحت تر از نوشتن یک دامنه ثابت است ، زیرا از نیاز به نقل قول اضافی از مقادیر محدود جلوگیری می کند. عملکرد سازنده دو یا سه آرگومان را می پذیرد. فرم دو زایی دامنه ای را به صورت استاندارد (محدود به محدوده پایین ، منحصر به فرد محدود) ایجاد می کند ، در حالی که فرم سه قشر دامنه ای را با مرزهای شکل مشخص شده توسط آرگومان سوم ایجاد می کند. استدلال سوم باید یکی از رشته ها "()" ، "(]" ، "[)" یا "[]" باشد. مثلا:
هر نوع محدوده همچنین دارای یک سازنده چند منظوره با همان نام Multirange است. عملکرد سازنده آرگومان های صفر یا بیشتری را می گیرد که همه محدوده از نوع مناسب هستند. مثلا:
8. 17. 7. انواع محدوده گسسته
محدوده گسسته محدوده ای است که نوع عنصر آن دارای یک "گام" کاملاً تعریف شده است، مانند عدد صحیح یا تاریخ. در این نوع دو عنصر می توان گفت که در مجاورت یکدیگر قرار دارند، در صورتی که مقادیر معتبری بین آنها وجود نداشته باشد. این در تضاد با محدوده های پیوسته است، جایی که همیشه (یا تقریباً همیشه) امکان شناسایی سایر مقادیر عنصر بین دو مقدار داده شده وجود دارد. به عنوان مثال، یک محدوده از نوع عددی پیوسته است، همانطور که یک محدوده بیش از مهر زمانی است.(اگرچه مهر زمانی دقت محدودی دارد و بنابراین از نظر تئوری می توان آن را گسسته در نظر گرفت، بهتر است آن را پیوسته در نظر بگیریم زیرا اندازه گام معمولاً مورد توجه نیست.)
راه دیگر برای فکر کردن در مورد یک نوع محدوده گسسته این است که یک ایده واضح از یک مقدار "بعدی" یا "قبلی" برای هر مقدار عنصر وجود دارد. با دانستن این موضوع، می توان بین نمایش های فراگیر و انحصاری محدوده های یک محدوده، با انتخاب مقدار عنصر بعدی یا قبلی به جای مقدار داده شده اولیه، تبدیل کرد. به عنوان مثال، در یک محدوده عدد صحیح، نوع [4،8] و (3،9) مجموعه مقادیر یکسانی را نشان می دهند. اما این برای محدوده بیش از عددی اینطور نیست.
یک نوع محدوده گسسته باید دارای یک تابع متعارف باشد که از اندازه گام مورد نظر برای نوع عنصر آگاه باشد. تابع متعارف سازی با تبدیل مقادیر معادل از نوع محدوده برای داشتن نمایش های یکسان، به ویژه کران های پیوسته شامل یا انحصاری شارژ می شود. اگر یک تابع متعارف مشخص نشده باشد، محدوده هایی با قالب بندی متفاوت همیشه به عنوان نابرابر تلقی می شوند، حتی اگر ممکن است مجموعه مقادیر یکسانی را در واقعیت نشان دهند.
انواع محدوده داخلی int4range، int8range و daterange همگی از یک فرم متعارف استفاده می کنند که کران پایین را شامل می شود و کران بالایی را حذف می کند. به این معنا که، [) . با این حال، انواع محدوده تعریف شده توسط کاربر می توانند از قراردادهای دیگر استفاده کنند.
8. 17. 8. تعریف انواع محدوده جدید
کاربران می توانند انواع محدوده خود را تعریف کنند. رایج ترین دلیل برای انجام این کار استفاده از محدوده ها بر روی زیرگروه هایی است که در بین انواع محدوده داخلی ارائه نشده اند. به عنوان مثال، برای تعریف یک نوع محدوده جدید از زیرنوع float8:
از آنجایی که float8 «گام» معنی داری ندارد، ما در این مثال یک تابع متعارف تعریف نمی کنیم.
هنگامی که محدوده خود را تعریف می کنید، به طور خودکار یک نوع چند دامنه مربوطه را دریافت می کنید.
تعریف نوع محدوده خود همچنین به شما امکان می دهد یک کلاس عملگر درختی یا دسته بندی فرعی دیگری را برای استفاده تعیین کنید تا ترتیب مرتب سازی را که تعیین می کند چه مقادیری در یک محدوده معین قرار می گیرند، تغییر دهید.
اگر زیرگروه به جای مقادیر مداوم گسسته باشد ، دستور ایجاد نوع باید یک عملکرد متعارف را مشخص کند. تابع Canonicalization یک مقدار محدوده ورودی را می گیرد و باید یک مقدار دامنه معادل را برگرداند که ممکن است مرزها و قالب بندی های مختلفی داشته باشد. خروجی متعارف برای دو محدوده که نشان دهنده همان مجموعه مقادیر است ، به عنوان مثال دامنه عدد صحیح [1 ، 7] و [1 ، 8) ، باید یکسان باشد. فرقی نمی کند که کدام نمایندگی را انتخاب کنید که یک شخص متعارف باشد ، تا زمانی که دو مقدار معادل با فرمتی های مختلف همیشه با همان قالب بندی به همان مقدار نقشه برداری شوند. علاوه بر تنظیم فرمت محدود/منحصر به فرد ، یک تابع متعارف ممکن است مقادیر مرزی را دور کند ، در صورتی که اندازه مرحله مورد نظر بزرگتر از آنچه زیرگروه قادر به ذخیره است ، باشد. به عنوان مثال ، می توان یک نوع دامنه نسبت به Timestamp را به اندازه یک ساعت یک ساعت تعریف کرد ، در این صورت عملکرد متعارف نیاز به دور کردن مرزهایی که چند ساعت نبودند ، یا شاید به جای آن خطایی را به وجود آورد.
علاوه بر این ، هر نوع دامنه ای که به معنای استفاده از شاخص های GIST یا SP-gist است باید یک تفاوت زیرگروه یا زیرگروه_دف را تعریف کند.(این فهرست هنوز بدون زیرگروه کار خواهد کرد ، اما به احتمال زیاد آن را به طور قابل توجهی کارآمدتر از آن است که یک عملکرد اختلاف ارائه شود.) عملکرد اختلاف زیرگروه دو مقدار ورودی از زیرگروه را می گیرد و تفاوت آنها را برمی گرداند (یعنی x منهای Y)به عنوان یک مقدار float8 نشان داده شده است. در مثال بالا ، عملکرد float8mi که زیربنای اپراتور معمولی Float8 می تواند استفاده شود. اما برای هر زیر گروه دیگر ، برخی از نوع تبدیل لازم است. برخی از اندیشه های خلاقانه در مورد چگونگی نمایش اختلافات به عنوان اعداد نیز ممکن است. تا حدی ممکن ، عملکرد زیرگروه_DIFF باید با مرتب سازی مرتب شده توسط کلاس و مجموعه اپراتور انتخاب شده موافقت کند. یعنی نتیجه آن باید هر زمان که اولین استدلال آن از دوم آن بیشتر باشد مطابق ترتیب مرتب سازی ، مثبت باشد.
نمونه ای کمتر از یک عملکرد زیرگروه زیر زیر:
برای کسب اطلاعات بیشتر در مورد ایجاد انواع دامنه ، به ایجاد نوع مراجعه کنید.
8. 17. 9. نمایه سازی
شاخص های GIST و SP-Gist را می توان برای ستون های جدول از انواع محدوده ایجاد کرد. شاخص های GIST همچنین می توانند برای ستونهای جدول از انواع چند منظوره ایجاد شوند. به عنوان مثال ، برای ایجاد یک شاخص GIST:
A GiST or SP-GiST index on ranges can accelerate queries involving these range operators: = , && , ,> , -|- , & <, and &>. A GiST index on multiranges can accelerate queries involving the same set of multirange operators. A GiST index on ranges and GiST index on multiranges can also accelerate queries involving these cross-type range to multirange and multirange to range operators correspondingly: && , ,> , -|- , & <, and &>وادبرای اطلاعات بیشتر به جدول 9. 54 مراجعه کنید.
علاوه بر این، B-tree و نمایه های هش را می توان برای ستون های جدول از انواع محدوده ایجاد کرد. برای این انواع شاخص، اساساً تنها عملیات مفید محدوده برابری است. یک ترتیب مرتب سازی درختی B برای مقادیر محدوده تعریف شده است که مربوط به آن استاپراتورها، اما سفارش دادن نسبتاً دلخواه است و معمولاً در دنیای واقعی مفید نیست. پشتیبانی از درخت B و هش انواع محدوده عمدتاً به این منظور است که به جای ایجاد نمایه های واقعی، مرتب سازی و هش کردن داخلی در پرس و جوها را امکان پذیر می کند.
8. 17. 10. محدودیت در محدوده
در حالی که UNIQUE یک محدودیت طبیعی برای مقادیر اسکالر است، معمولا برای انواع محدوده نامناسب است. در عوض، یک محدودیت طرد اغلب مناسب تر است (به ایجاد جدول مراجعه کنید. محدودیت. EXCLUDE). محدودیت های حذف اجازه می دهند تا محدودیت هایی مانند «غیر همپوشانی» را در یک نوع محدوده مشخص کنند. مثلا:
این محدودیت از وجود مقادیر همپوشانی در جدول به طور همزمان جلوگیری می کند:
می توانید از پسوند btree_gist برای تعریف محدودیت های خروج در انواع داده های اسکالر ساده استفاده کنید، که سپس می توانند برای حداکثر انعطاف پذیری با استثناهای محدوده ترکیب شوند. به عنوان مثال، پس از نصب btree_gist، محدودیت زیر فقط در صورتی که اعداد اتاق جلسه برابر باشند، محدوده های همپوشانی را رد می کند:
| قبلی | Up | بعد |
| 8. 16. انواع کامپوزیت | صفحه اصلی | 8. 18. انواع دامنه |
تصحیح را ارسال کنید
اگر چیزی در اسناد می بینید که صحیح نیست، با تجربه شما با ویژگی خاص مطابقت ندارد یا نیاز به توضیح بیشتر دارد، لطفاً از این فرم برای گزارش یک مشکل مستند استفاده کنید.
نرم افزار مفید تریدر...
ما را در سایت نرم افزار مفید تریدر دنبال می کنید
برچسب :
نویسنده : احمد شاملو
بازدید : 50
تاريخ : يکشنبه
27 فروردين
1402 ساعت: 15:29