کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

معرفی انواع داده ای و آموزش نحوه ی ایجاد جدول

معرفی انواع داده ای و آموزش نحوه ی ایجاد جدول

یک جدول (به انگلیسی table) در واقع ساختاری است که داده ها را در یک پایگاه داده ی رابطه ای (relational database) در خود نگه می دارد. جدول متشکل از دو بخش ستون و سطر می باشد.


آموزش Oracle

جداول در ویرایش 7.3 پایگاه داده ی ORACLE، حداکثر می توانند 255 ستون داشته باشد در این درحالی است که در نسخه ی جدیدتر 8 پایگاه داده ی مذکور، یک جدول به طور حداکثر قابلیت داشتن 1000 ستون را دارا می باشد.
یک جدول می تواند نشانگر یک (تک) موجودیت باشد که شما آن را داخل سیستم خود، برای ذخیره و بازیابی اطلاعات بکار می برید. این جدول همچنین می تواند دربردارنده یا بیانگر فهرستی از کارکنانی باشد که داخل سازمان شما کار می کنند و یا لیستی از تمامی سفارشاتی برای خرید و دریافت محصولات شرکت شما باشد.
یک جدول همچنین می تواند بیانگر روابط بین دو موجودیت (entitiy) باشد. این نوع جدول می تواند نشانگر رابطه ی بین کارکنان و مهارت های شغلی آن ها بوده و یا بیانگر ارتباط بین محصولات و سفارش آن ها باشد. داخل جداول به منظور نمایش ارتباط بین موجودیت ها، از کلیدهای خارجی (foreign keys) استفاده می کنیم.
اگرچه تعدادی جدول (به خوبی طراحی شده) وجود دارند که از آن ها می توان برای نمایش یک موجودیت و نیز توصیف رابطه ی آن موجودیت با موجودیت دیگر بهره جست، اما بیشتر جداول غالبا باید برای نمایش تنها یک موجودیت و یا توصیف یک رابطه (relationship) بکار گرفته شود و نه هر دو.
زیر نحوه ی ایجاد، اصلاح و حذف (drop) جداول را به شما آموزش می دهیم. همچنین تعدادی دستور ساده که حین مدیریت جداول در پایگاه داده ی باید در نظر گرفت شود را برای شما شرح خواهیم داد.


نحوه ی طراحی جدول

دستور العمل های زیر را به هنگام طراحی جدول پایگاه داده ی خود رعایت کنید.


  1. از اسامی توصیفی برای جداول، ستون ها، شاخص ها و خوشه ها (cluster) استفاده کنید.
  2. سعی کنید در استفاده از مخفف ها و صورت های فردی و جمعی اسم برای نام ستون ها و جداول، ثابت قدم باشید.
  3. معنای تک تک جداول و ستون های آن ها را با استفاده از دستور Comment، مستند کنید.
  4. تک تک جدول ها را نرمال سازی کنید.
  5. برای هر ستون سعی کنید از نوع داده ی مناسب و مجاز استفاده کنید.
  6. به منظور صرفه جویی در فضای ذخیره سازی، ستون هایی تعریف کنید که اجازه ی استفاده از null را می دهد.
  7. به منظور بهینه سازی کارایی دستورات 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

نوع داده های عددی

  1. نوع داده های زمان و تاریخ
    • oDATE
    • oINTERVAL DAY TO SECOND
    • oINTERVAL YEAR TO MONTH
    • oTIMESTAMP
    • oTIMESTAMP WITH TIME ZONE
    • oTIMESTAMP WITH LOCAL TIME ZONE
  2. نوع داده های دودویی (Binary)
    • oBLOB
    • oBFILE
    • oRAW
    • oLONG RAW

نوع داده ی دیگری نیز وجود دارد. این نوع داده ROWID است که برای مقادیر موجود در شبه ستون ROWID (pseudocolumn) بکار گرفته شده و نشانگر آدرس منحصر بفرد هر سطر در جدول می باشد.
جدول زیر شرح مختصری از هریک از نوع داده های توکار ORACLE ارائه می دهد.


طول ستون و مقدار پیش فرض
شرح
نوع داده
برای تمامی سطرهای جدول ثابت می باشد، حداکثر حجم (اندازه) به ازای هر سطر 2000 بایت می باشد. اندازه ی پیش فرض 1 بایت به ازای هر سطر می باشد. لازم است پیش از تنظیم و مقداردهی size، مجموعه کاراکتر (تک بایتی یا چند بایتی) را درنظر بگیرید.
اطلاعات نوشتاری (character) که به ازای هر یک کاراکتر یک بایت فضا اخذ می کند.
CHAR (size [BYTE | CHAR])
برای هر سطر متغیر بوده و تا 4000 بایت ویژه ی هر سطر به خود تخصیص می دهد. پیش از تنظیم size مجموعه کاراکتر (تک بایتی یا چند بایتی) را در نظر گرفته و مشخص کنید. یک حداکثر اندازه یا حجم ( (sizeباید تعریف و مشخص شود.
داده ی کاراکتری با طول متغییر، با حداکثر طول و اندازه ی SIZE))
VARCHAR2 (size [BYTE | CHAR])
برای تمامی سطرهای جدول ثابت می باشد. Column size بیانگر تعداد کاراکترها است. (تعداد بایت های لازم برای کدگذاری AL16UTF16 دو برابر این رقم و برای کد گذاری UTF8 سه برابر این عدد می باشد). حد بالا (بیشترین تعداد کاراکتر) به ازای هر سطر 2000 بایت می باشد. پیش فرض 1 کاراکتر است.
اطلاعات نوشتاری که به صورت UNICODE ذخیره می شوند و حداکثر طول آن به اندازه ی (SIZE) می باشد.
NCHAR (size)
برای هر سطر متغیر می باشد. Column size بیانگر تعداد کاراکترها است. (تعداد بایت ها ممکن است برای کدگذاری AL16UTF16 تا دو برابر و برای استاندارد کدگذاری UTF8 سه برابر باشد). سقف (حداکثر تعداد کاراکتر) به ازای هر سطر 4000 بایت می باشد. تعداد کاراکتر پیش فرض، 1 می باشد.
اطلاعات نوشتاری با طول متغیر و به صورت Unicode با حداکثر طول (SIZE) می باشد.
NVARCHAR2 (size)

تا سقف 232 - یک بایت یا 4 گیگابایت.

داده ی کاراکتری تک بایتی
CLOB
تا سقف 232- یک بایت یا 4 گیگابایت.
یک تک کاراکتر Unicode
NCLOB
برای هر سطر در جدول متغیر می باشد، تا سقف1-231 بایت، یا 2 گیگابایت به ازای هر سطر. به منظور سازگاری با ورژن های پیشین ارائه گردیده است.
داده ی کاراکتری با طول متغیر.
LONG
برای هر سطر متغیر می باشد. حداکثر فضای لازم برای یک ستون معین، به ازای هر سطر 21 بایت می باشد.
داده های عددی با طول متغیر. بیشترین دقت اعشار p و/یا مقیاس (sacle) s 38 است.
NUMBER (p، s)
برای هر سطر موجود در جدول روی 7 بایت ثابت می باشد. قالب (format) پیش فرض یک رشته (string) می باشد (مثل DD-MON-RR) که توسط پارامتر NLS_DATE_FORMAT تعیین می گردد.
داده های تاریخی و تاریخی-زمانی که از Jan. 1، 4712 B.C.E. تا تاریخ Dec. 31، 4712 C.E متغیر هستند.
DATE
روی 5 بایت ثابت می باشد.
یک مدت زمان که به صورت سال و ماه نمایش داده می شود. مقدار precision تعداد اعداد یا ارقام مجاز در فیلد YEAR تاریخ را مشخص می کند. Precision (تعداد اعداد) می تواند از 0 تا 9 متغیر باشد. برای سال به صورت پیش فرض روی مقدار 2 تنظیم می شود.
INTERVAL YEAR (precision) TO MONTH
روی 11 بایت ثابت می شود.
یک مدت زمان که در قالب روز، ساعت، دقیقه و ثانیه نمایش داده می شود. مقدار precision تعداد اعدادی که در فیلدهای DAY و fractional SECOND تاریخ مجاز می باشد را تعیین می کند. تعداد اعداد می تواند از 0 تا 9 متغیر باشد. برای روز به صورت پیش فرض روی 2 تنظیم می شود و برای ثانیه به صورت یپش فرض روی 6 قرار می گیرد.
INTERVAL DAY (precision) TO SECOND (precision)
بسته به مقدار precision، از 7 تا 11 بایت متغیر می باشد. پیش فرض توسط پارامتر مقداردهی اولیه (initialization parameter) NLS_TIMESTAMP_FORMAT مشخص می شود.
یک مقدار که نشانگر تاریخ و زمان از جمله کسر ثانیه می باشد. مقدار precision، تعداد اعداد موجود در بخش مربوط به کسر ثانیه ها در فیلد تاریخ SECOND را مشخص می کند. دقت اعداد می تواند از 0 تا 9 متغیر باشد، پیش فرض 6 می باشد.
TIMESTAMP (precision)
روی 13 بایت ثابت می باشد. پیش فرض توسط پارامتر مقداردهی اولیه (initialization parameter) NLS_TIMESTAMP_FORMAT مشخص می شود.
یک مقدار که بیانگر تاریخ، زمان و به همراه آن تنظیمات منطقه ی زمانی جهانی مربوطه می باشد. منطقه ی زمانی می تواند یک افست از UTC باشد مانند '-5:0' و یا اسم یک منطقه باشد همچون.'US/Pacific'
TIMESTAMP (precision) WITH TIME ZONE
بسته به مقدار precision، از 7 تا 11 بایت متغیر می باشد. پیش فرض توسط پارامتر مقداردهی اولیه (initialization parameter) NLS_TIMESTAMP_FORMAT مشخص می شود.
مشابه نوع داده ی TIMESTAMP WITH TIME ZONE می باشد، با این تفاوت که داده به هنگام ذخیره شدن متناسب با منطقه ی زمانی پایگاه داده نرمال سازی (تنظیم) شده و هنگام بازیابی نیز (برای مطابقت) با منطقه ی زمانی (time zone) سرویس گیرنده یا کلاینت، تنظیم می شود.
TIMESTAMP (precision) WITH LOCAL TIME ZONE
تا 232- یک بایت یا 4 گیگابایت.
داده های بدون ساختار دودویی
BLOB
تا 232- یک بایت یا 4 گیگابایت.
داده های دودویی که در فایل خارجی ذخیره شده است
BFILE
برای هر سطر موجود در جدول متغیر می باشد، تا 2000 بایت به ازای هر سطر به خود تخصیص می دهد.یک SIZE حداکثر باید مشخص شود. به منظور سازگاری با نسخه های قبلی فراهم گردیده است.
داده های دودویی خام (raw) با طول متغیر
RAW (size)
برای هر سطر در جدول متغیر می باشد، تا 231- یک بایت یا دو گیگابایت، به ازای هر سطر. به منظور سازگاری با نسخه های قبلی فراهم گردیده است.
داده های دودویی خام (raw) با طول متغیر
LONG RAW
ثابت روی 10 یا 6 بایت برای هر سطر در جدول.
داده های دودویی که نشانگر آدرس سطرها هستند
ROWID

نمایش داده های کاراکتری

  • به منظور ذخیره سازی داده های الفبا عددی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 مشخص نشده باشد، ستون اعداد را همان گونه که ارائه شده اند، ذخیره می کند.


Stored As
Specified As
Input Data
4751132.79
NUMBER
4،751،132.79
4751133
NUMBER (9)
4،751،132.79
4751132.79
NUMBER (9،2)
4،751،132.79
4751132.7
NUMBER (9،1)
4،751،132.79
(not accepted، exceeds precision)
NUMBER (6)
4،751،132.79
4،751100
NUMBER (7، -2)
4،751،132.79

نمایش دادن داده های تاریخی و زمانی

برای ذخیره سازی مقادیر زمانی و تاریخی در یک جدول از نوع داده ای 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;‎
1394/07/27 13626 1677
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...