آموزش جامع SQL Server (جلسه ۱۴: Data Typeهای SQL Server - بخش ۱)
1398/03/18 15:43 , میلاد صاحب نظر

آموزش جامع SQL Server (جلسه ۱۴: Data Typeهای SQL Server - بخش ۱)

سلام به جلسه چهاردهم آموزش جامع SQL Server خوش‌آمدید. در این جلسه به یکی از پایه‌ای‌ترین و مهم‌ترین مباحث SQL Server یعنی Data Typeها خواهیم پرداخت. در ادامه به معرفی، تعریف و حل مسئله‌های کوچک Data Typeها خواهیم پرداخت.

۱- نصب و آشنایی با SQL Server

۱۰-عملگرهای SET وCTEوPIVOT

۱۹-indexها بخش۱

۲۸-توابع تاریخ یا date بخش۲

۲-نوشتن query

۱۱-تغییر داده‌ها

۲۰-indexها بخش۲

۲۹-توابع رشته‌ای بخش۱

۳-محدود کردن ردیف‌ها

۱۲-تعریف داده‌ها بخش۱

۲۱-stored procedureها بخش۱

۳۰- توابع رشته‌ای بخش۲

۴-فیلتر کردن داده‌ها بخش ۱

۱۳-تعریف داده‌ها بخش۲

۲۲- stored procedureها بخش۲

۳۱- توابع رشته‌ای بخش۳

۵-فیلتر کردن داده‌ها بخش۲

۱۴-data typeهای بخش۱

۲۳- stored procedureها بخش۳

۳۲-توابع سیستمی بخش ۱

۶-اتصال جداول بخش۱

۱۵-data typeها بخش۲

۲۴-توابع تعریف شده توسط کاربر

۳۳-توابع سیستمی بخش۲

۷-اتصال جداول بخش۲

۱۶-ویژگی‌ها

۲۵-triggerها

۳۴-window functionها بخش۱

۸-گروه‌بندی داده‌ها

۱۷-expressionها

۲۶-توابع تجمعی

۳۵-window functionها بخش ۲

۹-subquery

۱۸-viewها

۲۷-توابع تاریخ یا date بخش۱

 

مباحثی که در این جلسه پوشش داده خواهند شد عبارت‌اند از:

  • Data typeهای SQL Server: یک بررسی کلی از Data typeهای SQL Server انجام می‌شود.

  • BIT: داده‌های بیتی مانند 0 و 1 یا NULL را در پایگاه داده با data type یا نوع داده BIT ذخیره می‌کند.

  • INT: راجع به نوع‌های عددی مختلفی در SQL Server خواهید آموخت، از جمله SMALLINT، INT، BIGINT و TINYINT.

  • DECIMAL: چگونگی ذخیره کردن مقادیر عددی دقیق در پایگاه داده با استفاده از data type‌یا نوع داده DECIMAL یا NUMERIC را نشان می‌دهد.

  • CHAR: چگونگی ذخیره رشته حروف با طول ثابت و غیر Unicode در پایگاه داده را نشان می‌دهد.

  • NCHAR: چگونگی ذخیره رشته‌های حروف طول ثابت و Unicode را نشان می‌دهد و تفاوت‌های بین data typeهای CHAR و NCHAR را توضیح می‌دهد.

  • VARCHAR: داده‌های رشته‌ای با طول متغیر و غیر Unicode را در پایگاه داده ذخیره می‌کند.

  • NVARCHAR: چگونگی ذخیره داده‌های رشته‌ای با طول متغیر و Unicode در یک جدول را آموزش خواهید دید و تفاوت‌های اصلی بین VARCHAR و NVARCHAR را درک خواهید کرد.

  • DATETIME2: چگونگی ذخیره date و time date در یک پایگاه داده را نمایش می‌دهد.

  • DATE: در مورد date type یا نوع داده date و چگونگی ذخیره تاریخ‌ها در جدول صحبت می‌کند.

  • TIME: چگونگی ذخیره داده‌های زمانی در پایگاه داده با استفاده از Data type‌ یا نوع داده TIME را نشان می‌دهد.

  • DATETIMEOFFSET: چگونگی دست‌کاری datetime با محدوده زمانی را نمایش می‌دهد.

  • GUID: راجع به GUID و چگونگی استفاده از تابع ()NEWID برای تولید مقادیر GUID آموزش می‌بینید.

Data Typeهای SQL Server

در این قسمت در مورد Data Typeهای SQL Server از جمله نوع‌های عددی، رشته‌های حروف، رشته‌های باینری، تاریخ و زمان‌ها و دیگر نوع‌های داده‌ای یا همان Data Type خواهید آموخت.

بررسی Date Typeها در SQL Server

در SQL Server، یک ستون، متغیر و پارامتر، مقداری را نگه می‌دارند که این مقدار مرتبط با یک نوع است که همچنین به آن date type یا نوع داده نیز گفته می‌شود. یک Data type در واقع یک اتریبیوت است که نوع داده‌ای که شیء می‌تواند ذخیره کند را مشخص می‌کند.

این نوع می‌تواند یک عدد، رشته حروف، واحد پول، تاریخ و زمان و غیره باشد.

SQL Server لیستی از data typeها فراهم کرده است که تمام نوع‌های داده‌ای که می‌توانید استفاده کنید را تعریف کرده است، یعنی در واقع روش تعریف یک ستون یا تعریف یک متغیر را نشان داده است.

تصویر زیر سیستم data typeهای SQL Server را نشان می‌دهد:

توجه کنید که SQL Server نوع‌های داده‌ای text، ntext و image را در نسخه‌های آینده قرار است حذف کند. از این رو، باید از استفاده از این Data typeها پرهیز کنید و در عوض از (data typeهای varchar(max)، nvarchar(max و (varbinary(max استفاده کنید.

Data typeهای عددی دقیق

Data typeهای عددی دقیق، اعداد صحیح و دقیق مانند Decimal، integer یا monetary را ذخیره می‌کنند.

  • Bit یکی از سه مقادیر 1، 0 و Null را ذخیره می‌کند.

  • Data typeهای smallint، bigint، int و tinyint داده‌های عدد صحیح یا integer را ذخیره می‌کنند.

  • Data typeهای Decimal و numeric اعدادی که دارای دقت و مقیاس ثابت هستند را ذخیره می‌کنند. توجه کنید که decimal و numeric هم‌ معنا هستند.

  • Data typeهای money و smallmoney مقادیر واحد پول را ذخیره می‌کنند.

جدول زیر مشخصات مقادیر داده‌ای عددی دقیق را نمایش می‌دهد:

مشخصات مقادیر داده‌ای عددی دقیق

Data typeهای عددی تقریبی

Data type عددی تقریبی داده‌های عددی اعشاری یا float را ذخیره می‌کند. معمولاً از این Data typeها در محاسبات علمی استفاده می‌شود.

نوع داده یا Data Type

حد پایین

حد بالا

حافظه

دقت

(float(n

1.79E+308−

1.79E+308

بستگی به مقدار n دارد

۷ رقم اعشار

real

3.40E+38−

3.40E+38

۴ بایت

۱۵ رقم اعشار

 

Data typeهای تاریخ و زمان

Data typeهای تاریخ و زمان، داده‌های تاریخ و زمان و افست تاریخ زمان را ذخیره می‌کنند.

Data Type

سایز ذخیره

دقت

حد پایین

حد بالا

datetime

۸ بایت

به رقم بالاتر 0.003، 0.000 و 0.007 گرد می‌شود

1753-01-01

9999-12-31

smalldatetime

۴ بایت، ثابت

۱ دقیقه

1900-01-01

2079-06-06

date

۳ بایت، ثابت

۱ روز

0001-01-01

9999-12-31

time

۵ بایت

۱۰۰ نانو ثانیه

00:00:00.0000000

23:59:59.9999999

datetimeoffset

۱۰ بایت

۱۰۰ نانو ثانیه

0001-01-01

9999-12-31

datetime2

۶ بایت

۱۰۰ نانو ثانیه

0001-01-01

9999-12-31

 

اگر در حال نوشتن یک برنامه جدید هستید، حتماً باید از Data typeهای datetime2، time و datetimeoffset استفاده کنید. چون این نوع‌ها با استاندارد SQL همخوانی داشته و قابل حمل هستند.

علاوه بر این، Data typeهای datetime2، time و Datetimeoffset دقت ثانیه بیشتری دارند و Datetimeoffset  از منطقه زمانی پشتیبانی می‌کند.

Data typeهای رشته‌های حروف

Data typeهای رشته‌های حروف برای شما امکان ذخیره داده‌های طول ثابت (char) یا داده‌های طول متغیر (varchar) را فراهم می‌کنند. نوع داده متنی یا text می‌تواند داده‌های غیر Unicode را در صفحه کد سرور ذخیره کند.

نوع داده یا Data Type

حد پایین

حد بالا

حافظه

char

0 حرف

8000 حرف

n بایت

varchar

0 حرف

8000 حرف

N بایت + 2 بایت

(varchar (max

0 حرف

2^31 حرف

N بایت + 2 بایت

text

0 حرف

2,147,483,647  حرف

N بایت + 4 بایت

 

Data typeهای رشته حروف Unicode

Data typeهای رشته حروف Unicode یا داده‌های حروف Unicode طول ثابت (nchar) یا طول متغیر (nvarchar) را ذخیره می‌کنند.

نوع داده یا Data Type

حد پایین

حد بالا

حافظه

nchar

0 حرف

4000 حرف

2 برابر N بایت

nvarchar

0 حرف

4000 حرف

2 برابر N بایت + 2 بایت

ntext

0 حرف

1,073,741,823  حرف

2 برابر طول رشته

 

Data typeهای رشته باینری

Data typeهای باینری، داده‌های باینری طول ثابت و متغیر را ذخیره می‌کنند.

نوع داده یا Data Type

حد پایین

حد بالا

حافظه

binary

0 بایت

8000 بایت

N بایت

varbinary

0 بایت

8000 بایت

طول واقعی داده وارد شده + ۲ بایت

image

0 بایت

2,147,483,647  بایت

 

 

Data typeهای دیگر

نوع داده یا Data Type

توضیح

cursor

برای متغیرها یا stored procedureهای پارامتر OUTPUT که شامل یک رفرنس به سمت یک cursor است.

rowversion

اعداد باینری منحصر به فردی که به صورت خودکار درون یک پایگاه داده به وجود آمدند را نمایش می‌دهد.

hierarchyid

یک موقعیت درختی در یک سلسله مراتب درختی را نشان می‌دهد.

uniqueidentifier

GUID ۱۶ بایتی

sql_variant

مقادیر Data typeهای دیگر را ذخیره می‌کند.

XML

داده‌های XML را در یک ستون یا یک متغیر از نوع XML ذخیره می‌کند.

Spatial Geometry type

داده‌ها را در یک سیستم مختصات صاف و مستقیم نمایش می‌دهد

Spatial Geography type

داده‌‌های بیضوی (گردی زمین) مانند مختصات طول و عرض جغرافیایی را ذخیره می‌کند.

table

یک مجموعه نتایج را به صورت موقت برای پردازش در آینده ذخیره می‌کند

 

در نتیجه به این شکل، بررسی مختصری برای Data typeهای SQL Server انجام دادیم. در قسمت‌های بعدی هر کدام از Data typeها را به صورت دقیق‌تر بررسی خواهیم کرد.

BIT در SQL Server

نوع داده BIT یک نوع داده عددی است که می‌تواند مقادیر 1، 0 یا NULL را بگیرد.

کد زیر syntax نوع داده BIT را نشان می‌دهد:

BIT

SQL Server حافظه یا ذخیره‌سازی ستون‌های BIT را بهینه‌سازی می‌کند. اگر یک جدول دارای ستون‌های ۸ بیتی یا کمتر باشد، آنگاه SQL Server آن‌ها را به عنوان ۱ بایت ذخیره می‌کند.

اگر یک جدول دارای ستون‌های ۹ الی ۱۶ بیتی باشد، SQL Server آن‌ها را به عنوان ۲ بایت ذخیره می‌کند و الی آخر.

SQL Server یک مقدار رشته‌ای TRUE را به ۱ و FALSE را به 0 تبدیل می‌کند. همچنین همه مقادیر غیر صفر را به 1 تبدیل می‌کند.

مثال‌های BIT در SQL Server

کد زیر یک جدول جدید با یک ستون BIT می‌سازد:

CREATE TABLE test.sql_server_bit (
    bit_col BIT
);

برای وارد کردن ۱ بیت به ستون bit، باید از دستور زیر استفاده کنید:

INSERT INTO test.sql_server_bit (bit_col)
OUTPUT inserted.bit_col
VALUES
    (1);

خروجی به این شکل است:

bit_col
-------
1
 
(1 row affected)

برای وارد کردن 0 بیت به ستون bit، از کد زیر استفاده می‌شود:

INSERT INTO test.sql_server_bit (bit_col)
OUTPUT inserted.bit_col
VALUES
    (0);

خروجی به این شکل است:

bit_col
-------
0
 
(1 row affected)

اگر یک مقدار رشته‌ای True را به ستون bit وارد کنید، SQL Server آن را به ۱ بیت تبدیل می‌کند:

INSERT INTO test.sql_server_bit (bit_col)
OUTPUT inserted.bit_col
VALUES
    ('True');

کد زیر نتیجه یا خروجی را نشان می‌دهد:

bit_col
-------
1
 
(1 row affected)

به طور مشابه، SQL Server یک مقدار رشته‌ای false را به 0 بیت تبدیل می‌کند:

INSERT INTO test.sql_server_bit (bit_col)
OUTPUT inserted.bit_col
VALUES
    ('False');

کد زیر خروجی را نشان می‌دهد:

bit_col
-------
0
 
(1 row affected)

SQL Server همه مقادیر غیر صفر را به 0 بیت تبدیل می‌کند:

INSERT INTO test.sql_server_bit (bit_col)
OUTPUT inserted.bit_col
VALUES
    (0.5); 

خروجی به این شکل است:

bit_col
-------
1
 
(1 row affected)

به این شکل، در مورد استفاده از نوع داده BIT در SQL Server برای ذخیره داده‌های بیتی در یک جدول همه چیز را آموختید.

INT در SQL Server

SQL Server از نوع‌های عددی استاندارد SQL از جمله SMALLINT، INT، BIGINT و TINYINT پشتیبانی می‌کند. جدول زیر بازه و حافظه هر نوع عددی را نشان می‌دهد:

بازه و حافظه هر نوع عددی 

استفاده از کوچک‌ترین نوع داده عددی که می‌تواند حتماً شامل تمام مقادیر ممکنه باشد، بهترین کار است. برای مثال، برای ذخیره تعداد کودکان در یک خانواده، TINYINT کافی است چون این روزها هیچ‌کس نمی‌تواند بیشتر از 255 فرزند داشته باشد.

به هر حال، TINYINT برای ذخیره واحد‌های یک ساختمان کافی نیست، چون یک ساختمان ممکن است بیش از ۲۵۵ واحد مسکونی داشته باشد.

مثال Integerها در SQL Server

کد زیر یک جدول جدید ایجاد می‌کند که شامل ۴ ستون عددی است:

CREATE TABLE test.sql_server_integers (
 bigint_col bigint,
 int_col INT,
 smallint_col SMALLINT,
 tinyint_col tinyint
);

کد INSERT عددهای حداکثر SMALLINT، INT، BIGINT و TINYINT را در ستون‌های مناسب جدول اضافه می‌کند:

INSERT INTO test.sql_server_integers (
 bigint_col,
 int_col,
 smallint_col,
 tinyint_col
)
VALUES
 (
 9223372036854775807,
 2147483647,
 32767,
 255
 );

برای نمایش دادن مقادیر ذخیره شده در جدول test.sql_server_integers، از کد SELECT زیر استفاده می‌کنیم:

SELECT
 bigint_col,
 int_col,
 smallint_col,
 tinyint_col
FROM
 test.sql_server_integers;

تبدیل داده‌های عددی

SQL Server ثابت عددی بزرگ‌تر از 2,147,483,647 را به نوع داده DECIMAL تبدیل می‌کند، نه به نوع داده BIGINT، که در کد زیر مشاهده می‌کنید:

SELECT 2147483647 / 3 AS r1, 
    2147483649 / 3 AS r2;

مثال query نشان نشان می‌دهد که وقتی عددی از مقدار آستانه بیشتر می‌شود، نوع داده نتیجه از INT به DECIMAL تغییر می‌کند.

به این صورت، نوع‌های داده‌ای مختلف  Integer‌یا عددی در SQL Server و چگونگی استفاده از آن‌ها برای ذخیره اعداد در پایگاه داده را آموختید.

DECIMAL در SQL Server

برای ذخیره اعدادی که دارای دقت و مقیاس ثابت هستند، از نوع داده DECIMAL استفاده می‌کنیم.

کد زیر syntax نوع داده DECIMAL را نشان می‌دهد:

DECIMAL(p,s)

در این syntax:

  • P دقت است که در واقع تعداد کل حداکثر ارقام اعشاری‌ای است که در هر دو طرف چپ و راست نقطه اعشار ذخیره می‌شوند. دقت دارای بازه 1 تا 38 است. دقت پیش‌فرض 38 است.

  • S مقیاس است که تعداد ارقام اعشاری است که در سمت راست نقطه اعشار ذخیره می‌شوند. این مقیاس دارای بازه از 0 تا p (دقت) است. مقیاس فقط در صورتی که دقت مشخص شده باشد، قابل تعیین است. به صورت پیش‌فرض، مقیاس برابر با صفر است.

حداکثر سایزهای حافظ متفاوت هستند و به دقت بستگی دارند که در جدول زیر مشاهده می‌کنید:

دقت

بایت‌های حافظه

1 – 9

5

10 – 19

9

20 – 28

13

29 – 38

17

 

NUMERIC و DECIMAL هم معنی هستند، در نتیجه می‌توانید از آن‌ها به جای یکدیگر استفاده کنید.

تعریف‌های زیر با هم برابر هستند:

DECIMAL(10,2)
NUMERIC(10,2)

چون هم معنی‌های ISO برای DECIMAL عبارت‌اند از DEC و (DEC(p,s، می‌توانید از یکی از نوع‌های داده DECIMAL یا DEC استفاده کنید:

DECIMAL(10,2)
DEC(10,2)

مثال DECIMAL در SQL Server

اجازه دهید یک مثال استفاده از نوع‌های داده DECIMAL و NUMERIC حل کنیم.

ابتدا، یک جدول جدید که شامل دو ستون است ایجاد می‌کنیم: یک ستون decimal و یک ستون numeric.

CREATE TABLE test.sql_server_decimal (
    dec_col DECIMAL (4, 2),
    num_col NUMERIC (4, 2)
);

دوم، یک ردیف جدید به جدول test.sql_server_decimal اضافه می‌کنیم:

INSERT INTO test.sql_server_decimal (dec_col, num_col)
VALUES
    (10.05, 20.05);

سوم، داده را از جدول می‌خوانیم:

SELECT
    dec_col,
    num_col
FROM
    test.sql_server_decimal;

چهارم، مثال زیر تلاش می‌کند یک ردیف جدید با مقادیری که از دقت و مقیاس تعیین شده در تعریف ستون بیشتر هستند، به جدول اضافه کند:

INSERT INTO test.sql_server_decimal (dec_col, num_col)
VALUES
    (99.999, 12.345);

SQL Server یک ارور می‌دهد و اجرا را متوقف می‌کند:

Arithmetic overflow error converting numeric to data type numeric.
The statement has been terminated

در این قسمت، چگونگی استفاده از نوع داده DECIMAL در SQL Server برای ذخیره مقادیر عددی دقیق را آموختید.

نوع داده CHAR در SQL Server

اگر می‌خواهید داده‌های رشته‌ای با طول ثابت و غیر Unicode را ذخیره کنید، باید از نوع داده‌ CHAR استفاده کنید:

CHAR(n)

در این syntax، مقدار n طول رشته را مشخص می‌کند که بازه آن از 1 تا 8000 است.

چون استفاده از n اجباری نیست، اگر آن را در یک تعریف داده یا تعریف متغیر مشخص نکنید، مقدار پیش‌فرض آن برابر با 1 خواهد بود.

فقط زمانی که سایزهای مقادیر در ستون ثابت هستند، می‌توانید از نوع داده CHAR استفاده کنید.

وقتی یک مقدار رشته‌ای به ستون CHAR اضافه می‌کنید، اگر طول مقدار رشته‌ای کمتر از طول مشخص شده در ستون باشد، SQL Server در مقدار رشته‌ای فضاهای خالی ایجاد می‌کند تا طول آن با طول تعریف شده در ستون برابر شود.

به هر حال، وقتی این مقدار رشته‌ای را انتخاب می‌کنید، SQL Server آن فضاهای خالی را قبل از بازگرداندن مقدار، حذف می‌کند.

از طرف دیگر، اگر مقداری وارد کنید که طول آن بیشتر از طول ستون باشد، SQL Server یک پیغام ارور می‌دهد.

توجه کنید که هم معنی ISO برای CHAR برابر با CHARACTER است. بنابراین می‌توانید از آن‌ها به جای یکدیگر استفاده کنید.

مثال نوع داده CHAR در SQL Server

کد زیر یک جدول جدید ایجاد می‌کند که شامل یک ستون CHAR است:

CREATE TABLE test.sql_server_char (
    val CHAR(3)
);

توجه کنید که اگر شمای Test در پایگاه داده شما موجود نباشد، می‌توانید آن را با استفاده از کد زیر قبل از ایجاد جدول sql_server_char ایجاد کنید:

CREATE SCHEMA test; 
GO

برای وارد کردن یک رشته حروف با طول ثابت به ستون CHAR، از دستور INSERT به شکل زیر استفاده می‌کنیم:

INSERT INTO test.sql_server_char (val)
VALUES
    ('ABC');

کد نوشته شده همان‌طور که انتظار می‌رفت اجرا شد.

کد زیر سعی می‌کند یک رشته حروف جدید که طول آن بیشتر از طول ستون است را وارد کند:

INSERT INTO test.sql_server_char (val)
VALUES
    ('XYZ1');

SQL Server پیغام ارور زیر را می‌دهد:

String or binary data would be truncated.
The statement has been terminated.

کد زیر یک حرف به ستون Val از جدول test.sql_server_char اضافه می‌کند:

INSERT INTO test.sql_server_char (val)
VALUES
    ('A');

در SQL Server، تابع LEN تعداد حروف در یک ستون مشخص شده را بازمی‌گرداند و فضاهای خالی را در نتیجه نمی‌آورد. همچنین تابع DATALENGTH تعداد بایت‌ها را بازمی‌گرداند.

کد زیر را مشاهده کنید:

SELECT
    val,
    LEN(val) len,
    DATALENGTH(val) data_length
FROM
    sql_server_char;

نتایج

اگرچه حرف ‘A’ فقط یک حرف است، اما تعداد بایت‌های ستون ثابت و برابر با ۳ است.

در نتیجه، در این قسمت چگونگی استفاده از نوع داده CHAR در SQL Server برای ذخیره رشته‌های حروف با طول ثابت و غیر Unicode در پایگاه داده را آموختید.

خلاصه

در این جلسه به یکی از مهم‌ترین موضوعات SQL Server به نام نوع‌های داده یا Data Types پرداختیم و برخی از دستورات آن را به طور کامل و مثال محور بررسی کردیم. در جلسه آینده به تکمیل این موضوع و توضیح بقیه دستورات خواهیم پرداخت.

با MUG همراه باشید!

منبع: sqlservertutorial

 مطالب مرتبط

۱۳ دستور مهم SQL که هر برنامه‌نویس باید بداند
چگونه از حملات نفوذ کننده به SQL جلوگیری کنیم؟
 طبقه بندی زبان های برنامه نویسی
روش‌های هوشمندانه برای استفاده از "تلفیق" در SQL
 LINQ(زبان جستجوی یکپارچه)
برنامه نویسی شیءگرا چیست؟

 

از آخرین دوره های آموزشی و تخفیف ها مطلع شوید

با تکمیل فرم زیر ، از اخبار و اطلاعات به روز برنامه نویسی و تکنولوژی عقب نمانید

آخرین مطالب

آموزش جامع SQL Server (جلسه ۱۲)
آموزش جامع SQL Server (جلسه ۱۲)

دستور UPDATE در SQL Server برای تغییر داده‌های موجود در یک جدول، از دستور UPDATE به شکل زیر استفاده ...

آموزش جامع SQL Server (جلسه ۱۵)
آموزش جامع SQL Server (جلسه ۱۵)

دستور DROP TABLE در SQL Server گاهی، لازم است یک جدول که دیگر استفاده‌ای ندارد را حذف کنید. برای ...

آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)
آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)

بخش اول از آخرین مبحث دوره جامع آموزش SQL Server در جلسه قبلی بررسی شد. این مبحث که ...

آخرین دیدگاه ها

دیدگاه خود را درباره این پست بنویسید

فرم ارسال نظرات