Data Typeها در SQL Server
Data Typeها در SQL Server
بخشی از آموزش جامع SQL Server
محتوای درس Data Typeها در SQL Server
T-SQL | Numeric، String، Date/Time و Binary Types
Data Type بخشی از Contract داده است و روی صحت، Storage، Index، Conversion و Performance اثر مستقیم دارد. انتخاب Type باید از معنای Domain آغاز شود.
متن این فصل با رویکرد مرجع فنی و قابل استفاده در پروژه واقعی تنظیم شده است؛ مثالها در امتداد مدل StoreDb نوشته شدهاند و اصطلاحات اصلی SQL Server و T-SQL بهصورت یکدست بهکار میروند.
1. مفاهیم و قراردادهای اصلی
Data Type بخشی از Contract داده است و روی صحت، Storage، Index، Conversion و Performance اثر مستقیم دارد. انتخاب Type باید از معنای Domain آغاز شود.
در طراحی پایگاه داده، Syntax تنها بخشی از مسئله است. نوع داده، Constraint، الگوی دسترسی، Transaction و هزینه اجرای Query باید همزمان با نیاز Domain در نظر گرفته شوند.
| مفهوم | کارکرد |
|---|---|
| int/bigint | اعداد صحیح |
| decimal | اعداد دقیق مالی |
| nvarchar | متن Unicode |
| datetime2 | تاریخ و زمان دقیق |
| bit | مقدار دوحالتی |
| uniqueidentifier | GUID |
2. ساختار و Syntax پایه
برای قیمت از decimal و برای متن فارسی از nvarchar استفاده میشود. datetime2 نسبت به datetime قدیمیتر دامنه و Precision بهتری دارد. طول String باید بر اساس نیاز واقعی محدود شود.
DECLARE @Price decimal(18,2) = 1250000.75;
DECLARE @Title nvarchar(100) = N'محصول نمونه';
DECLARE @CreatedAt datetime2(3) = SYSDATETIME();
DECLARE @IsActive bit = 1;
SELECT @Price, @Title, @CreatedAt, @IsActive;3. سناریوی StoreDb
در Products، Sku طول محدود، Price از decimal(18,2)، Stock از int و RowVersion از rowversion انتخاب میشوند. هر انتخاب باید با عملیات آینده و Query Pattern سازگار باشد.
نمونههای این فصل بر مدل فروشگاهی StoreDb بنا شدهاند تا ارتباط مفاهیم میان فصلها حفظ شود و Queryها در یک Context یکپارچه قابل بررسی باشند.
CREATE TABLE dbo.TypeSample
(
Id bigint IDENTITY(1,1) NOT NULL,
Sku nvarchar(50) NOT NULL,
Price decimal(18,2) NOT NULL,
CreatedAt datetime2(3) NOT NULL,
ExternalId uniqueidentifier NOT NULL
);4. اصول طراحی و Performance
طراحی پایدار باید هم صحت داده و هم هزینه اجرای عملیات را پوشش دهد. انتخاب سادهتر زمانی ترجیح دارد که Contract داده را روشنتر و رفتار Optimizer را قابل پیشبینیتر نگه دارد.
- برای Money حساس از decimal با Precision/Scale صریح استفاده شود.
- Unicode با nchar/nvarchar و Literal دارای N مدیریت شود.
- MAX فقط برای دادهای استفاده شود که واقعاً طول بزرگ لازم دارد.
- Type Parameter با Type Column هماهنگ بماند.
5. خطاهای رایج و نکات ایمنی
دستورهای SQL میتوانند مستقیماً داده و ساختار را تغییر دهند؛ بنابراین بازبینی Context، تعداد Rowهای هدف و اثر Transaction قبل از اجرای تغییرات اهمیت عملی دارد.
- ذخیره تاریخ در nvarchar.
- استفاده از float برای مبلغ دقیق.
- انتخاب nvarchar(max) برای همه ستونهای متنی.
- Conversion ضمنی در شرطهای Index شده.
6. چکلیست نهایی فصل
- Type هر Column با Domain هماهنگ است.
- Precision و Scale مالی صریحاند.
- متن فارسی Unicode است.
- Date/Time و Time Zone بر اساس سیاست سیستم طراحی شدهاند.
7. جمعبندی
خروجی این فصل باید به تصمیمی قابل اتکا در طراحی یا Query منجر شود؛ صحت داده، قابلیت نگهداری و رفتار Performance سه معیار ثابت برای ارزیابی نمونهها هستند.