بایگانی برچسب‌ها : operator

پایگاه داده رابطه ای Relational Database

پایگاه داده رابطه ای یا Relational Database چیست؟

پایگاه داده رابطه ای (Relational Database) نوعی پایگاه داده براساس مدل رابطه ای (Relational Model) داده‌هاست. در این مدل، داده‌ها در قالب تعدادی جدول (Table) نگه‌داری می‌شوند. به این جداول، رابطه (Relation) نیز گفته می‌شود. هر جدول شامل تعدادی ستون (Column) و ردیف (Row) می‌باشد. به ستون‌ها، ویژگی (Attribute) و به ردیف‌ها رکورد (Record) یا چندتایی (تاپل یا Tuple) نیز گفته می‌شود.

نمونه جدول یک پایگاه داده رابطه ای relational database table
نمونه جدول اطلاعات دانشجویی از یک پایگاه داده رابطه‌ای

مهم‌ترین مفاهیم پایگاه‌داده‌های رابطه‌ای

معمولا هر جدول (یا رابطه)، مربوط به یک نوع موجودیت (نظیر محصول، کارمند، دانشجو و …) می‌باشد و هر ردیف از آن نمایانگر نمونه‌ای از این نوع موجودیت (نظیر محصولی با نام و مدل مشخص) و ستون‌ها هم مقادیر ویژگی‌ها (نظیر قیمت) را برای نمونه‌های مختلف موجودیت موردنظر نگه‌داری می‌کنند. مقادیر مجاز برای هر ویژگی می‌تواند توسط یک دامنه محدود شود. برای مثال ویژگی جنسیت می‌تواند به مجموعه دامنه {“مرد” و “زن”} محدود شود.

کلید اصلی (Primary Key) به ویژگی یا مجموعه‌ای از ویژگی‌ها در یک رابطه گفته می‌شود که می‌تواند یک رکورد را به صورت منحصربفرد مشخص کند. در واقع مقادیر کلیدهای اصلی هرگز در رکوردهای یک رابطه تکرار نمی‌شوند. برای مثال، کد دانشجویی برای رابطه‌ای که اطلاعات مربوط به دانشجویان را نگه‌داری می‌کند (تصویر فوق) گزینه مناسبی برای کلید اصلی به شمار می‌رود.

کلید خارجی (Foreign Key) فیلدی در یک جدول است که به طور یکتا ردیفی از یک جدول دیگر یا همان جدول را مشخص می‌کند. به عبارت بهتر کلید خارجی به عنوان یک ویژگی در جدولی ثانویه تعریف می‌شود و با کلید اصلی یا کلیدی یکتا (یک ویژگی با مقادیر غیرتکراری) از جدول اولیه منطبق می‌شود و به این ترتیب میان ردیف‌های دو جدول ارتباط ایجاد می‌کند. برای مثال تصور کنید در جدولی به نام People اطلاعات مشتریان یک شرکت با کلید اصلی PID و در جدولی دیگر به نام Order اطلاعات مربوط به کالاهای سفارش داده شده توسط تمام مشتریان با کلید اصلی OID نگه‌داری می‌شود. برای اینکه در جدول Order بتوانیم تشخیص دهیم هر کالا توسط چه فردی سفارش داده شده است کافی است PID فرد سفارش دهنده را نیز به این جدول اضافه کنیم. در این حالت ویژگی PID در جدول دوم یک کلید خارجی است.

رابطه‌هایی که در خود داده‌ها را نگه‌داری می‌کنند در قالب Table پیاده‌سازی می‌شوند و به رابطه‌های اصلی (یا Base Relations) موسوم هستند. در مقابل، رابطه‌هایی نیز وجود دارند که داده‌ای را نگه‌داری نمی‌کنند بلکه آن‌ها را با انجام اعمالی روی رابطه‌های اصلی ایجاد می‌کنند. به این نوع رابطه‌ها، رابطه‌های مشتق شده (یا Derived Relations) گفته می‌شود و در قالب دید (View) ها و پرس و جو (Query) ها پیاده‌سازی می‌شوند. ممکن است رابطه‌های مشتق شده اطلاعات خود را از یک یا چند رابطه دریافت کنند.

عملگرهای رابطه‌ای

پرس و جوهایی که روی پایگاه‌داده‌های رابطه‌ای انجام می‌شود براساس جبر رابطه‌ای (Relational Algebra) شکل گرفته‌اند. در جبر رابطه‌ای هشت عملگر پرکاربرد وجود دارد که حاصل آن‌ها در قالب یک رابطه و به صورت زیر تعریف می‌شود. توجه داشته باشید برای عملگرهای اجتماع، اشتراک و تفاضل نکته قابل توجه در مورد رابطه‌هایی که به عنوان عملوند استفاده می‌شود اینست که این رابطه‌ها باید دارای مجموعه ویژگی‌های یکسانی باشند.

  • عملگر اجتماع (Union): این عملگر دوتایی (باینری یا دو عملوندی) بوده و شامل تمام تاپل‌های موجود در عملوندهایش خواهد بود. در رابطه حاصل، ردیف‌های تکراری حذف می‌شوند.
  • عملگر اشتراک (Intersection): حاصل این عملگر دوتایی شامل مجموعه تاپل‌هایی خواهد بود که در هر دو رابطه مشترک هستند.
  • عملگر تفاضل (Difference): حاصل این عملگر دوتایی شامل تاپل‌هایی از رابطه اول خواهد بود که در رابطه دوم وجود ندارند.
  • عملگر ضرب دکارتی (Cartesian Product): هر تاپل حاصل از این عملگر دوتایی با الحاق یک تاپل از رابطه اول و یک تاپل از رابطه دوم شکل می‌گیرد.
  • عملگر انتخاب (Selection): عملگری یکانی است که تنها تاپل‌هایی از رابطه خود را برمی‌گرداند که شرط یا معیار خاصی را برآورده می‌کنند.
  • عملگر تصویر (Projection): عملگری یکانی است که تنها ویژگی‌های مشخص شده را از تاپل‌های موجود استخراج می‌کند.
  • عملگر پیوند (Join): رایج‌ترین نوع این عملگر به پیوند طبیعی (Natural Join) مشهور است. رابطه حاصل از این عملگر دوتایی شامل تمام ویژگی‌های موجود در رابطه‌های دو عملوندش می‌باشد و با الحاق تاپل‌هایی از دو رابطه که روی ویژگی‌های مشترکشان مقادیر یکسان دارند شکل می‌گیرد.
  • عملگر تقسیم (Division): حاصل این عملگر دوتایی تنها شامل ویژگی‌هایی از رابطه اول خواهد بود که در رابطه دوم وجود ندارند. تاپل‌های رابطه حاصل نیز شامل مقادیر این ویژگی‌ها در تاپل‌هایی از رابطه اول خواهد بود که ترکیب آن‌ها با تمام تاپل‌های رابطه دوم در رابطه اول وجود داشته باشد.

پیوندهای پیشنهادی تک دیک

لینک واژه در ویکیپدیا

انتساب Assignment

انتساب یا Assignment چیست؟

انتساب (Assignment) یا تخصیص در دانش برنامه نویسی عملی است که طی آن مقداری به فضای نگه‌داری متناظر با نام یک متغیر تخصیص داده می‌شود.

رایج‌ترین نمادی که برای انجام این عمل (در قالب یک عملگر کاربردی یا عبارت انتساب) مورد استفاده قرار می‌گیرد نماد تساوی (یا =) می‌باشد. در برخی دیگر از زبان‌ها نیز از نمادهای متفاوتی از جمله := برای عمل انتساب استفاده می‌شود. در سمت چپ دستور انتساب نام متغیر و در سمت راست مقدار یا عبارتی قرار می‌گیرد که قرار است حاصل آن به متغیر اختصاص داده شود:

x = عبارت

در چنین دستوری ابتدا حاصل عبارت ارزیابی و سپس به متغیر تخصیص داده می‌شود (در صورتی که متغیر دارای مقداری باشد، مقدار جدید جایگزین مقدار پیشین خواهد شد).

الگوهای کاربردی مختلفی از عمل Assignment وجود دارد که معمولا به ساده‌سازی کد و کاهش تکرارها می‌انجامد و البته توسط تمامی زبان‌های برنامه‌نویسی پشتیبانی نمی‌شود. از رایج‌ترین انواع این الگوها می‌توان به انتساب افزوده (Augmented Assignment) اشاره نمود. در این نوع تخصیص مقدار جدیدی که قرار است به متغیر اختصاص داده شود به مقدار قبلی آن متغیر نیز بستگی دارد. به عنوان مثال در x += 2 مقدار کنونی متغیر x دو واحد افزایش می‌یابد.

در برخی از زبان‌های برنامه‌نویسی از انتساب زنجیره‌ای (Chained Assignment) نیز پشتیبانی می‌شود. برای مثال در a = b = c = 0 مقدار صفر به هر سه متغیر a و b و c تخصیص داده می‌شود. در برخی از زبان‌ها نیز امکان تخصیص موازی (Parallel Assignment) در نظر گرفته شده است به این شکل که تخصیص مقادیر مختلف به متغیرهای مجزا به صورت همزمان در یک دستور انجام می‌شود.

در بسیاری از زبان‌های برنامه‌نویسی از نماد یکسانی برای انتساب و تساوی مقایسه‌ای استفاده می‌شود. از اینرو در زبان‌هایی نظیر سی و پاسکال برای این دو عملگر از نمادهای متفاوتی استفاده می‌شود که می‌تواند به خوانایی و وضوح سورس کد کمک کند.

پیوندهای پیشنهادی تک دیک

لینک واژه در ویکیپدیا

عملگر کاهش Decrement Operator

عملگر کاهش یا Decrement Operator چیست؟

عملگر کاهش (Decrement Operator) عملگری یکانی است که عملوند خود را یک واحد کاهش می‌دهد. هر چند این عمل به صورت معمولی و از طریق عملگرهای تفریق و انتساب نیز قابل انجام است ولی به دلیل رایج بودن و کاربرد بالای آن در برنامه‌نویسی، توسط اغلب زبان‌های امروزی مورد پشتیبانی قرار می‌گیرد.

معمولا این عملگر با دو علامت خط تیره (یا تفریق) نمایش داده می‌شود. به عنوان مثال در قطعه کد زیر که به زبان C++ نوشته شده است، مقدار متغیر x پس از اجرای خط سوم یک واحد کاهش می‌یابد و برابر با عدد 1 می‌شود:

int x = 2;
int result;
result = x--;

در برخی از زبان‌های برنامه‌نویسی از جمله C++ عملگر کاهش دارای دو مدل می‌باشد که اندکی با یکدیگر تفاوت دارند. در مدل اول که عملگر پس از عملوند قرار می‌گیرد، عملوند یک واحد کاهش می‌یابد اما حاصل عبارت، مقدار اصلی عملوند پیش از کاهش خواهد بود. به عبارت بهتر در این حالت، ابتدا عبارت بدون در نظر گرفتن عملگر کاهش ارزیابی می‌شود و سپس عملوند کاهش می‌یابد. درنتیجه، در مثال فوق مقدار متغیر x برابر با 1 اما مقدار متغیر result برابر با 2 خواهد بود. به این عملگر، عملگر پسا-کاهش (Post-Decrement) یا کاهش پسوندی (Postfix Decrement) نیز گفته می‌شود. می‌توان دستورات فوق را به صورت زیر معادل‌سازی نمود:

int x = 2;
int result;
result = x;
x = x - 1;

اما در مدل دوم، عملگر پیش از عملوند خود قرار می‌گیرد، ابتدا عملوند یک واحد کاهش می‌یابد و همین مقدار کاهش یافته به عنوان حاصل عبارت مورد استفاده قرار می‌گیرد. به این عملگر، عملگر پیش-کاهش (Pre-Decrement) یا کاهش پیشوندی (Prefix Decrement) نیز گفته می‌شود. با اجرای قطعه کد زیر، مقدار هر دو متغیر x و result برابر با 1 خواهد شد:

int x = 2;
int result;
result = --x;

همانند نمونه‌ی قبل، این قطعه کد را نیز می‌توان به صورت زیر معادل‌نویسی کرد:

int x = 2;
int result;
x = x - 1;
result = x;

گفتنی است عملگر افزایش (Increment Operator) که با نماد ++ نشان داده می‌شود نیز عملی مشابه را برای افزایش یک واحدی عملوند خود انجام می‌دهد.

پیوندهای پیشنهادی تک دیک

لینک واژه در ویکیپدیا

عملگر افزایش Increment Operator

عملگر افزایش یا Increment Operator چیست؟

عملگر افزایش (Increment Operator) عملگری یکانی است که یک واحد به عملوند خود اضافه می‌کند. هر چند این عمل به صورت معمولی و از طریق عملگرهای جمع و انتساب نیز قابل انجام است ولی به دلیل رایج بودن و کاربرد بالای آن در برنامه‌نویسی، توسط اغلب زبان‌های امروزی مورد پشتیبانی قرار می‌گیرد.

معمولا این عملگر با نماد ++ نمایش داده می‌شود. به عنوان مثال در قطعه کد زیر که به زبان C++ نوشته شده است، مقدار متغیر x پس از اجرای خط سوم یک واحد افزایش می‌یابد و برابر با 2 می‌شود:

int x = 1;
int result;
result = x++;

در برخی از زبان‌های برنامه‌نویسی از جمله C++ عملگر افزایش دارای دو مدل می‌باشد که اندکی با یکدیگر تفاوت دارند. در مدل اول که عملگر پس از عملوند قرار می‌گیرد، عملوند یک واحد افزایش می‌یابد اما حاصل عبارت، مقدار اصلی عملوند پیش از افزایش خواهد بود. به عبارت بهتر در این حالت، ابتدا عبارت بدون در نظر گرفتن عملگر افزایش ارزیابی می‌شود و سپس عملوند افزایش می‌یابد. درنتیجه، در مثال فوق مقدار متغیر x برابر با 2 اما مقدار متغیر result برابر با 1 خواهد بود. به این عملگر، عملگر پسا-افزایش (Post-Increment) یا افزایش پسوندی (Postfix Increment) نیز گفته می‌شود. می‌توان دستورات فوق را به صورت زیر معادل‌سازی نمود:

int x = 1;
int result;
result = x;
x = x + 1;

اما در مدل دوم، عملگر پیش از عملوند خود قرار می‌گیرد، ابتدا عملوند یک واحد افزایش می‌یابد و همین مقدار افزایش یافته به عنوان حاصل عبارت مورد استفاده قرار می‌گیرد. به این عملگر، عملگر پیش-افزایش (Pre-Increment) یا افزایش پیشوندی (Prefix Increment) نیز گفته می‌شود. با اجرای قطعه کد زیر، مقدار هر دو متغیر x و result برابر با 2 خواهد شد:

int x = 1;
int result;
result = ++x;

همانند نمونه‌ی قبل، این قطعه کد را نیز می‌توان به صورت زیر معادل‌نویسی کرد:

int x = 1;
int result;
x = x + 1;
result = x;

گفتنی است عملگر کاهش (Decrement Operator) نیز عملی مشابه را برای کاهش یک واحدی عملوند خود انجام می‌دهد.

پیوندهای پیشنهادی تک دیک

لینک واژه در ویکیپدیا

عملگر Operator

عملگر یا Operator چیست؟

عملگر (Operator) در برنامه‌نویسی به ساختاری گفته می‌شود که رفتاری مشابه با تابع دارد اما از نظر سازمان گرامری با آن متفاوت می‌باشد. شاید بتوان از نظر معنایی عملگرها را گونه‌ای از توابع دانست که نحوه قرارگیری پارامترهای آن‌ها (که به عملوند یا Operand موسومند) با حالت رایج توابع (که در اغلب زبان‌های برنامه‌نویسی داخل پرانتز قرار می‌گیرند) متفاوت است.

از سوی دیگر در اکثر زبان‌های برنامه نویسی، اجازه تعریف توابع به برنامه نویس داده می‌شود اما ممکن است تنها استفاده از عملگرهای از پیش تعریف شده در کدنویسی مجاز باشد. به علاوه تعداد عملوندها برخلاف تعداد پارامترهای توابع محدود هستند. اغلب عملگرها در زبان‌های برنامه‌نویسی تنها یک یا دو عملوند دارند و تعداد اندکی از عملگرها از تعداد بیشتری عملوند برخوردار هستند (به عنوان مثال عملگر ?: در زبان C یک عملگر سه عملوندی به شمار می‌رود). با وجود این تفاوت‌ها می‌توان بسیاری از عملگرها نظیر عملگر باقی‌مانده‌ی تقسیم یک عدد بر عددی دیگر را با یک تابع دو پارامتری که چنین عملی را انجام می‌دهد معادل دانست.

Operator ها معمولا با استفاده از یک نماد نمایش داده می‌شوند اما استفاده از نام‌هایی همچون div یا AND و Is نیز در زبان‌های امروزی به عنوان Operator مشاهده می‌شود. عملگرهایی که دارای یک، دو یا سه عملوند هستند را به ترتیب عملگرهای یکانی (Unary Operator)، عملگرهای باینری یا دودویی (Binary Operator) و عملگرهای تِرنِری یا سه‌تایی (Ternary Operator) می‌نامند.

محل قرارگیری عملگر در مقایسه با عملوندها می‌تواند مبتنی بر یکی از حالات پیشوندی، میانوندی و یا پسوندی باشد. به عبارت بهتر ممکن است عملگر پیش از عملوند، مابین عملوندها یا پس از عملوند قرار بگیرد. به عنوان مثال عملگرهای یکانی می‌توانند همانند عملگر منفی (-x) به صورت پیشوندی یا مانند عملگر پساافزایش (x++) به صورت پسوندی ظاهر شوند. عملگرهای دودویی همانند جمع نیز به صورت میانوندی (x + y) ظاهر می‌شوند.

علاوه بر اینکه در برخی زبان‌های برنامه‌نویسی امکان تعریف Operator جدید نیز وجود دارد، در برخی از زبان‌ها می‌توان یک Operator را برای نوع داده‌های تعریف شده توسط کاربر هم  سربارگذاری نمود (سربارگذاری عملگر یا Operator Overloading).

انواع رایج عملگرها

از رایج‌ترین انواع عملگرها در زبان‌های برنامه‌نویسی می‌توان به موارد زیر اشاره نمود (نمادهایی که برای برخی از Operator ها در داخل پرانتز ذکر شده است به همین شکل در بسیاری از زبان‌های برنامه‌نویسی مورد استفاده قرار می‌گیرد):

  • عملگرهای حسابی (Arithmetic Operator) نظیر جمع (+)، تفریق (-)، ضرب (*)، تقسیم (/)، باقیمانده (%)، افزایش (دو علامت +) و کاهش (دو علامت -)
  • عملگرهای رابطه‌ای (Relational Operator) یا مقایسه‌ای (Comparison Operator) نظیر <، >، <=، >=، == و !=
  • عملگرهای منطقی (Logical Operator) نظیر “و منطقی” (&&)، “یای منطقی” (||) و نقیض (Not یا !)
  • عملگرهای انتساب (Assignment Operator) نظیر انتساب ساده (= یا :=انتساب افزوده یا مرکب (مانند += و -= و …)
  • عملگرهای بیتی (Bitwise Operator) نظیر AND و OR و XOR، شیفت به راست، شیفت به چپ و …
  • عملگر دسترسی به فیلد در یک رکورد یا آبجکت که در بسیاری از زبان‌ها از نماد نقطه برای آن استفاده می‌شود
  • عملگر الحاق دو رشته
  • و …

پیوندهای پیشنهادی تک دیک

لینک واژه در ویکیپدیا