סוגי שדות (Columns) במאגר נתונים MySQL
פתיחה
המאגר נתונים הוא חלק מרכזי בבניית כל תוכנה, ובמיוחד לאתרי אינטרנט. צריך להקדיש מחשבה לאיפיון של טבלאות הנתונים.חלק מתהליך בניית הטבלאות הוא בחירת סוגי השדות של הטבלאות. בחירה נכונה של הסוגים יכולה לתרום רבות ליעילות של השאילתות ולנוחיות של עבודה עם נתונים הנשלפים מ- MYSQL.
סוגי השדות המצויינים כאן הם של MySQL 4.1 ומעלה, בד"כ יש שוני משמעותי בין סוגי שרתי Database. כמו-כן, יש מספר שדות חדשים בגרסת MySQL 5.
כתבה זאת תעסוק רק בסוגי השדות הבסיסיים. לכל שדה יש אפשרויות הגדרה נוספות, כמו הגדרת קידוד לטקסט (UTF8, hebrew), שחשובה מאוד בגרסאות האחרונות של MySQL.
כמו כן, על מנת לקבל מידע שלם ומפורט אפשר להכנס לתיעוד הרשמי של MYSQL. התיעוד כולל פירוט נרחב של האופציות הנוספות שיש להגדיר יחד עם הבחירה של סוגי השדה, כמו תוכן אפסי (NULL), מספר UNSIGNED או SIGNED ועוד.
MySQL כולל מספר סוגי שדות, המתחלקים לשלושה קבוצות:
בעזרת שלושת הקבוצות האלו ניתן לבטא כמעט כל מה שצריך. אני לא בעד ההגיון של הכנסת תמונות ומסמכים למאגר נתונים, כי קבצים יותר קשורים למערכת ההפעלה.
שדות מספריים (שלמים)
יש הרבה סוגי שדות מספרים שלמים. ההבדל המרכזי הוא טווח המספרים.סוג | Bytes | ערך מינימלי | ערך מקסימלי |
---|---|---|---|
TINYINT | 1 | -128 | 127 |
TINYINT UNSIGNED | 1 | 0 | 255 |
SMALLINT | 2 | -32768 | 32767 |
SMALLINT UNSIGNED | 2 | 0 | 65535 |
MEDIUMINT | 2 | -8388608 | 8388607 |
MEDIUMINT UNSIGNED | 3 | 0 | 16777215 |
INT | 4 | -2147483648 | 2147483647 |
INT UNSIGNED | 4 | 0 | 4294967295 |
BIGINT | 4 | -9223372036854775808 | 9223372036854775807 |
BIGINT UNSIGNED | 4 | 0 | 18446744073709551615 |
שימוש חשוב בשדה מספרית הוא מפתח ראשי לכל טבלה. מספור זה ממספר את עצמו אוטומטית.
1
2
3
4
5
6
7 CREATE TABLE `articles` ( `articleId` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT , `name` VARCHAR( 255 ) NOT NULL , PRIMARY KEY ( `articleId` ) ); INSERT INTO `articles` (`name` ) VALUES ('First Article');
שדות מספריים (לא שלמים)
יש רק שני סוגים של מספרים לא שלמים. ההבדל בניהם הוא רמת הדיוק של המספר אחרי הנקודה העשרונית.דוגמאות
1
2
3
4 ALTER TABLE `articles` ADD `score1` FLOAT NULL ;ALTER TABLE `articles` ADD `score2` DOUBLE NULL ;INSERT INTO `articles` (`name` , `score1` , `score2` ) VALUES ('Second Articles', '1234.1234', '1234.1234');
שדות תאריך וזמן
עמודת DATEמאפשרת לשמור תאריך (יום, חודש, שנה). הייצוג הפנימי של התאריך הוא הפוך.
1
2
3 ALTER TABLE `articles` ADD `date` DATE NOT NULL ;INSERT INTO `articles` (`date`) VALUES ('2005-03-21');
עמודת TIME
מאפשרת לשמור זמן (שעה, דקה, שנייה). התבנית המועדפת להכנסת נתונים היא HH:MM:SS. כמו כן, צריך לזכור שהזמן יישמר בתבנית 24 שעות, אז אם מישהו מכניס 2:30 בצהריים, אז ייחשב שעת בוקר אם לא הופכים את זה לפורמט 24H.
1
2
3 ALTER TABLE `articles` ADD `date` TIME NOT NULL ;INSERT INTO `articles` (`date`) VALUES ('16:30:00');
עמודת DATETIME
שדה זאת כוללת תאריך וזמן ביחד, כאשר שני סימני רווח מפרידים בין התאריך לזמן. התבנית היא צירוף של התבניות הקודמות YYYY-MM-DD HH:MM:SS.
1
2
3 ALTER TABLE `articles` ADD `date` DATETIME NOT NULL ;INSERT INTO `articles` (`date`) VALUES ('2005-03-21 16:30:00');
עמודת YEAR
מאפשרת לשמור שנה בלבד. טווח: 1901 עד 2155
עמודת TIMESTAMP
מאפשרת לשמור "חותמת תאריך" בתבנית UNIX.
אני משתמש בשדה DATETIME, כי נוח להשתמש בשאיתות דרך phpMyAdmin בעזרת השדה DATETIME.
שדות טקסט
עמודת VARCHARבשדה זאת אפשר לשמור טקסט עד 255 תווים.
1
2
3 ALTER TABLE `articles` ADD `writer` VARCHAR(5) DEFAULT 'None' NOT NULL;INSERT INTO `articles` (`writer`) VALUES ('ABCDE 12345 ABCDE');
עמודת CHAR
אותו דבר כמו VARCHAR, אבל הייצוג הפנימי של הטקסט שונה. בשדה זאת, יתווספו רווחים על מנת להשלים את הטקסט לגודל המירבי שלו.
אם השדה הוא קטן וקבוע, אז רצוי להשתמש בשדה הזה, אבל כמעט בכל המקרים האחרים VARCHAR יהיה יעיל ומהיר יותר לשימוש.
שדות BINARY, VARBINARY
אותו גודל והתנהגות כמו VARCHAR, אבל שדות אלו שומרות טקסט בצורה בינארית. זאת אומרת, שאין לשדות הגדרת קידוד והמיון שלהם נעשה לפי הערך המספרי של התווים.
שדות TEXT
שדות אלו מאפשרות לשמור קטעי טקסט גדולים.
סוג | גודל |
---|---|
TINYTEXT | עד 255 תווים |
TEXT | עד 65,553 תווים |
MEDIUMTEXT | עד 16,777,215 תווים |
LONGTEXT | עד 4,294,967,295 תווים |
שדות BLOB
אותו גודל והתנהגות כמו שדות TEXT, אבל שמירת הטקסט יהיה בצורה בינארית.
אפשר להשתמש בשדה זה לאחסון קבצים כמו תמונות ומסמכים.
עמודת ENUM
מאפשרת לשמור ערך יחיד מתוך רשימה מוגדרת מראש של ערכים. כל ערך צריך להיות בתוך סימני ', וערכים רבים צריכים להיות מופרדים באמצעות פסיק אחד מהשני.
1
2
3 ALTER TABLE `articles` ADD `category` ENUM( 'cat1', 'cat2', 'cat3' ) NOT NULL ;INSERT INTO `articles` (`category`) VALUES ('cat2');
עמודת SET
דומה מאוד אל ENUM, אבל מאפשרת לשמור מספר ערכים.
1
2
3 ALTER TABLE `articles` ADD `categories` SET( 'cat1', 'cat2', 'cat3' ) NOT NULL ;INSERT INTO `articles` (`categories`) VALUES ('cat2,cat3');
תזכרו שזה חשוב להשתמש בשדות מתאימים. מאגר נתונים מבזבז משאבים של השרת מהר מאוד אם לא משתמשים בו כראוי.
אם הגדרתם שדה קטן מדיי, תמיד תוכלו לשנות אותו ע"י שאילתת ALTER בלי לאבד נתונים.
על המחבר:
הדר פורת הוא מתכנת חברת Keynetik המספקת שירותי בניית אתרי אינטרנט ופיתוח תוכנות לסביבת האינטרנט בטכנולגיות מתקדמות, כולל PHP5, AJAX, מאגרי נתונים וכדומה.
תגובות בפייסבוק