معرفی انواع داده ای و آموزش نحوه ی ایجاد جدول
یک جدول (به انگلیسی table) در واقع ساختاری است که داده ها را در یک پایگاه داده ی رابطه ای (relational database) در خود نگه می دارد. جدول متشکل از دو بخش ستون و سطر می باشد.
جداول در ویرایش 7.3 پایگاه داده ی ORACLE، حداکثر می توانند 255 ستون داشته باشد در این درحالی است که در نسخه ی جدیدتر 8 پایگاه داده ی مذکور، یک جدول به طور حداکثر قابلیت داشتن 1000 ستون را دارا می باشد.
یک جدول می تواند نشانگر یک (تک) موجودیت باشد که شما آن را داخل سیستم خود، برای ذخیره و بازیابی اطلاعات بکار می برید. این جدول همچنین می تواند دربردارنده یا بیانگر فهرستی از کارکنانی باشد که داخل سازمان شما کار می کنند و یا لیستی از تمامی سفارشاتی برای خرید و دریافت محصولات شرکت شما
باشد.
یک جدول همچنین می تواند بیانگر روابط بین دو موجودیت (entitiy) باشد. این نوع جدول می تواند نشانگر رابطه ی بین کارکنان و مهارت های شغلی آن ها بوده و یا بیانگر ارتباط بین محصولات و سفارش آن ها باشد. داخل جداول به منظور نمایش ارتباط بین موجودیت ها، از کلیدهای خارجی (foreign
keys) استفاده می کنیم.
اگرچه تعدادی جدول (به خوبی طراحی شده) وجود دارند که از آن ها می توان برای نمایش یک موجودیت و نیز توصیف رابطه ی آن موجودیت با موجودیت دیگر بهره جست، اما بیشتر جداول غالبا باید برای نمایش تنها یک موجودیت و یا توصیف یک رابطه (relationship) بکار گرفته شود و نه هر دو.
زیر نحوه ی ایجاد، اصلاح و حذف (drop) جداول را به شما آموزش می دهیم. همچنین تعدادی دستور ساده که حین مدیریت جداول در پایگاه داده ی باید در نظر گرفت شود را برای شما شرح خواهیم داد.
نحوه ی طراحی جدول
دستور العمل های زیر را به هنگام طراحی جدول پایگاه داده ی خود رعایت کنید.
- از اسامی توصیفی برای جداول، ستون ها، شاخص ها و خوشه ها (cluster) استفاده کنید.
- سعی کنید در استفاده از مخفف ها و صورت های فردی و جمعی اسم برای نام ستون ها و جداول، ثابت قدم باشید.
- معنای تک تک جداول و ستون های آن ها را با استفاده از دستور Comment، مستند کنید.
- تک تک جدول ها را نرمال سازی کنید.
- برای هر ستون سعی کنید از نوع داده ی مناسب و مجاز استفاده کنید.
- به منظور صرفه جویی در فضای ذخیره سازی، ستون هایی تعریف کنید که اجازه ی استفاده از null را می دهد.
- به منظور بهینه سازی کارایی دستورات SQL و صرفه جویی در محل ذخیره سازی، هر زمان که مناسب دانستید، جدول ها را خوشه بندی (cluster) کنید.
پیش از اقدام به ایجاد جدول، باید تصمیم بگیرد که آیا می خواهید از محدودیت های جامعیتی (integrity constraint) استفاده کنید یا خیر. برای اینکه قوانین کاری (business rule) پایگاه داده ی شما به صورت خودکار اجرا و پیاده شوند، می توان محدودیت های جامعیتی را در (بر روی) ستون
های جداول تعریف کرد.
همچنین قبل از ایجاد جدول باید نوع داده ای که قرار است در هر یک از ستون های جدول مورد نظر جای گیرد را مشخص کنید.
حال به تشریح نوع داده های موجود در oracle خواهیم پرداخت.
نوع داده های موجود در ORACLE
یک نوع داده مجموعه ی ثابتی از خواص (property) را به مقادیر معینی متصل می کند که در ستون های یک جدول یا آرگومان های یک رویه (procedure) یا تابع (function) مورد استفاده قرار می گیرد. این خواص باعث می شوند، ORACLE مقادیر یک نوع داده را از مقادیر نوع داده ی دیگر
(متفاوت) تمییز دهد و با آن برخورد متفاوتی داشته باشد. ORACLE قادر است مقادیر نوع داده های Number (عددی) را در هم جمع کند (به هم اضافه کند)، اما اجازه ی انجام این کار را برای نوع داده های RAW (خام) ندارد.
ORACLE نوع داده های توکار زیر ارائه می دهد.
نوع داده های کاراکتری عبارتند از
- oCHAR
- oNCHAR
- oVARCHAR2 and VARCHAR
- oNVARCHAR2
- oCLOB
- oNCLOB
- Olong
نوع داده های عددی
-
نوع داده های زمان و تاریخ
- oDATE
- oINTERVAL DAY TO SECOND
- oINTERVAL YEAR TO MONTH
- oTIMESTAMP
- oTIMESTAMP WITH TIME ZONE
- oTIMESTAMP WITH LOCAL TIME ZONE
- نوع داده های دودویی (Binary)
- oBLOB
- oBFILE
- oRAW
- oLONG RAW
نوع داده ی دیگری نیز وجود دارد. این نوع داده ROWID است که برای مقادیر موجود در شبه ستون ROWID (pseudocolumn) بکار گرفته شده و نشانگر آدرس منحصر بفرد هر سطر در جدول می باشد.
جدول زیر شرح مختصری از هریک از نوع داده های توکار ORACLE ارائه می دهد.
تا سقف 232 - یک بایت یا 4 گیگابایت.
نمایش داده های کاراکتری
- به منظور ذخیره سازی داده های الفبا عددیALPHANUMERIC از نوع داده های کاراکتری استفاده می کنیم.
- نوع داده های CHAR یا NCHAR، رشته های کاراکتری با طول ثابت را در خود ذخیره می کنند.
- انواع داده ای VARCHAR2 یا NVARCHAR2 رشته های کاراکتری با طول متغیر را در خود نگه می دارند (نوع داده ی VARCHAR با VARCHAR2 از نظر کارایی مشابه هستند).
- NCHAR و NVARCHAR2 تنها داده های کاراکتری Unicode را در خود ذخیره می کنند.
- CLOB و NCLOB قادر هستند رشته های کاراکتری تک بایتی و چند بایتی که تا 4 گیگابایت حافظه اشغال می کنند، را در خود ذخیره کنند.
- نوع داده ای LONG رشته های کاراکتری با طول متغیر که تا 2 گیگابایت حافظه به خود تخصیص می دهند را، البته با محدودیت های فراوان ذخیره می کند.
- نوع داده ی LONG به منظور سازگاری برنامه های فعلی با نسخه های پیشین ارائه گردید، به طور کل، برنامه های جدید باید جهت ذخیره سازی مقادیر حجیم داده های کاراکتری از انواع داده ای BLOB و BFILE و به منظور ذخیره سازی حجم بالایی از داده های دودویی از نوع داده ی BFILE استفاده کنند.
هنگامی که که می خواهید نوع داده ای را برای ستون انتخاب کنید که قرار است داده های الفبا عددی (alpha numeric) در جدول ذخیره کند، لازم است به چند نکته ی بسیار مهم توجه کنید.
- به منظور ذخیره سازی بهینه ی داده، توصیه می کنیم از نوع داده ای VARCHAR2 استفاده کنید.
برای مثال اگر empname را به صورت char(20) تعریف کرده و اسمی مثل “Sami” را در آن ذخیره کنید، این اسم 20 بایت را اشغال می کند (6 بایت برای خود اسم و به همراه آن 16 فضای خالی).
حال اگر empname را به صورت varchar2(20) تعریف کرده، سپس اسمی مانند “Sami” را در آن ذخیره کنید، oracle تنها 4 بایت را می گیرد. - هنگامی که در semantic مقایسه ای به سازگاری ANSI نیاز دارید، از نوع داده ای CHAR استفاده کنید (به خصوص زمانی که trailing blank ها (فضاهای خالی اطراف) در رشته های مقایسه ای چندان اهمیتی ندارند). از نوع داده ای VARCHAR2برای زمانی استفاده کنید که trailing blank ها (فضاهای خالی اطراف) در مقایسه ی رشته ای (string comparison) دارای اهمیت هستند.
- دو نوع داده ی CHAR و VARCHAR2 کاملا توسط oracle پشتیبانی می شوند. در حال حاضر، نوع داده ی VARCHAR با VARCHAR2 برابر تلقی می گردد.
نمایش دادن داده های عددی
از نوع داده ی NUMBER برای ذخیره ی اعداد حقیقی به صورت ممیز شناور (floating-point) یا ممیز ثابت (fixed-point) استفاده می شود. اعدادی که از این نوع داده بهره می گیرند، به طور حتم قابلیت استفاده و انتقال در کلیه ی محیط های(platform) oracle را دارند و نیز
توانایی ارائه ی اعدادی با 38 رقم اعشار را دارا می باشند. می توانید اعداد مثبت و منفی که در بازه ی 1 x 10-130 تا 9.99 x10125 قرار می گیرند (علاه بر صفر) در ستون NUMBER ذخیره کنید.
می توان تعیین کرد که در یک ستون تنها یک عدد با ممیز شناور مانند مثال زیر ذخیره گردد.
distance NUMBER
یا می توانید دقت اعداد/precision (تعداد کل اعداد) و مقیاس / scale (تعداد اعدادی که در سمت راست ممیز اعشاری قرار می گیرد) مشخص کنید.
price NUMBER (8، 2)
اگرچه این امر کاملا اختیاری است، اما مشخص کردن scale و precision در شناسایی مقادیر ورودی نامناسب به شما کمک می کند. در صورتی که precision مشخص نشده باشد، ستون اعداد را همان گونه که ارائه شده اند، ذخیره می کند.
نمایش دادن داده های تاریخی و زمانی
برای ذخیره سازی مقادیر زمانی و تاریخی در یک جدول از نوع داده ای DATE بهره می گیریم. نوع داده ی مذکور قادر است قرن، سال، ماه، روز، ساعت، دقیقه و حتی ثانیه را در خود ذخیره کند.
از نوع داده ی TIMESTAMP به منظور ذخیره کردن مقادیر دقیق که حتی کسر ثانیه را نیز نشان می دهد، استفاده می شود. به عنوان مثال می توان به برنامه ای اشاره کرد که باید با استفاده از نوع داده ی TIMESTAMP تصمیم گرفته و مشخص کند کدام یک از دو event (رخداد) پیش از دیگری روی داده است یا
برنامه ای که باید با استفاده از نوع داده ی DATE زمان اجرای کار (job) معین را مشخص کند.
فرمت date
برای ورودی و خروجی تاریخ، فرمت استاندارد و پیش فرض oracle، DD-MON-RR می باشد.
مثال:
'13-NOV-1992'
به منظور تغییر این نوع فرمت پیش فرض تاریخ به صورت گسترده برای تمامی نمونه ها، کافی است از پارامتر NLS_DATE_FORMAT استفاده کنید. جهت اصلاح فرمت در طی یک session، لازم است از دستور ALTER SESSION استفاده کنید. برای وارد کردن تاریخ هایی که در فرمت پیش فرض ( جاری) تاریخ موجود نمی باشند، می توان از تابع TO_DATE با یک format mask بهره جست.
مثال:
TO_DATE ('November 13، 1992'، 'MONTH DD، YYYY')
در استفاده از فرمت های مربوط به تاریخ همچون DD-MON-YY دقت داشته باشید. YYنشانگر سال در قرن جاری می باشد. برای مثال منظور از 31-DEC-92، تاریخ December 31، 2092 می باشد و نه آنچه که شما ممکن است انتظار داشته باشید (سال 1992). اگر می خواهید سال معینی را در هر قرنی به جز قرن جاری نشان دهید، در آن صورت باید از format mask دیگری مانند RR استفاده کنید.
فرمت time
زمان در oracle با فرمت 24 ساعته ذخیره می شود،.HH24:MI:SS اگر زمان معینی در فیلد تاریخ مشخص نشده باشد، مقدار فیلد به صورت پیش فرض 12:00:00 A.M. خواهد بود. در یک time-only entry، بخش تاریخ به صورت پیش فرض روی اولین روز ماه جاری قرار می گیرد. به منظور وارد کردن قسمت مربوط به زمان یک تاریخ از تابع TO_DATE به همراه یک format mask که به زمان اشاره دارد، استفاده کنید، مانند مثال زیر
INSERT INTO Birthdays_tab (bname، bday) VALUES
('ANNIE'،TO_DATE('13-NOV-92 10:56 A.M.'،'DD-MON-YY HH:MI A.M.'));
ایجاد جدول در oracle
پس از پایان طراحی جدول و انتخاب نوع داده ی مناسب، می توانید از دستورات SQL زیر برای ساخت جدول خود استفاده کنید.
به عنوان مثال، دستور زیر جدولی به نام Emp را ایجاد می کند.
CREATE TABLE Emp (
Empno NUMBER(5)،
Ename VARCHAR2(15)،
Hiredate DATE،
Sal NUMBER(7،2)
);
به منظور درج سطر جدید در جدول خود می توانید از دستور INSERTاستفاده کنید.
دستور زیر سطر جدیدی در جدول مثال بالا، ایجاد می کند.
SQL>insert into emp values (101،’Sami’،3400);
اگر بخواهید به صورت مداوم سطر جدید در SQL Plus درج کنید، باید از دستور زیر استفاده کنید.
SQL>insert into emp values (&empno،’&name’،&sal);
&Empno، &nameو &salتحت عنوان متغیر جایگزینی (substitution variable) شناخته می شوند، بدین معنا که SQL Plus از شما این مقادیر را درخواست کرده، سپس دستورات را با مقادیر ارائه شده بازنویسی می کند.
برای مشاهده ی سطرهای وارد شده، از دستور زیر استفاده کنید.
SQL> Select * from emp;
جهت مشاهده ی ساختار جدول
اعم از اسم ستون ها، نوع داده های درون ستون ها و همچنین عرض (width) جدول، فرمان (دستور) زیر را بدهید.
SQL>desc emp
برای مشاهده ی اینکه چه تعداد جدول در schema (طرح کلی) بکار رفته از دستور زیر استفاده کنید.
SQL> select * from cat;
یا
SQL>select * from tab;