לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #1  
ישן 08-12-2008, 14:38
  hila_fresh hila_fresh אינו מחובר  
 
חבר מתאריך: 16.11.04
הודעות: 79
מאגר עובדים - התייעצות

שלום
נתבקשתי להכין מאגר ניהול עובדים עבור מחלקת משאבי אנוש.

מדובר בלמעלה מ-300 איש, עד כמה שאני מבינה כדאי להשתמש בתוכנת האקסס לשם כך ולא באקסל, נכון?

המנהל מעוניין שיהיה לו מאגר מידע על כל עובד:
ת"ז
שם פרטי
שם משפחה
תאריך לידה
טלפון בבית
סלולרי
מקום עבודה נוכחי - אם לא עובד אז יהיה רשום ' לא עובד' / השדה ישאר ריק
תחילת העבודה (באיזו שנה התחיל לעבוד)
היקף משרה (מלאה, חלקית וכו'..)
עבודות קודמות
הערות כלליות

הוא מעוניין לבצע סינונים/שאילתות כגון: מי האנשים שלא עובדים כרגע או אנשים שעובדים רק חצי משרה או אנשים שנולדו בשנה מסויימת וכו'....

השאלה שלי היא האם טבלה אחת כמו שכתבתי למעלה מספיקה או שנחוצה טבלה נוספת או מספר טבלאות?

תודה על כל תשובה

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #2  
ישן 08-12-2008, 14:45
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,775
בתגובה להודעה מספר 1 שנכתבה על ידי hila_fresh שמתחילה ב "מאגר עובדים - התייעצות"

כדאי תמיד להשתמש ב DB אמיתי (ואקסס הוא לא אחד כזה, לדעת רבים...)

על פי חוקי הנירמול, כדאי לנרמל כל דבר שרק אפשר. כלומר - ליצור מפתח משותף לכל עובד שיהיה ייחודי ומוחלט (מספר ת"ז יכול להיות טוב, בהנחה שכל העובדים ישראלים) - ואז בכל טבלה לשמור נתונים עם שני טורים - מזהה עובד, והנתון. כשרוצים לשלוף נתון מסויים לאחר מכן ורוצים להצמיד אותו לשם, פשוט מבצעים את השליפה לפי מזהה העובד, ועושים JOIN שמצרף את שמו מטבלת השמות.

יתרון נוסף שיש לעבודה בצורה כזו - אפשר לציין על כל עובד יותר מנתון אחד מאותו סוג (למשל - שני טלפונים בבית - אם כל הנתונים על כל העובדים היו בטבלה אחת, מה היו עושים? שתי שורות בטבלה עם כל הפרטים? לא הגיוני...)

וכשרוצים לחפש, מחפשים לפי הקריטריון (טבלה מתאימה), ומסננים על פי ערכים רצויים, מקבלים את ה id, ושוב, עם JOIN מצמידים לו שם...
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
נמאס לכם לזכור סיסמאות? לחצו כאן!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #4  
ישן 08-12-2008, 16:15
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,775
בתגובה להודעה מספר 3 שנכתבה על ידי hila_fresh שמתחילה ב "איבדתי אותך ב"נירמול". מה זה נירמול?"

JOIN זה אחד הדברים הבסיסיים ב SQL... כדאי להכיר אותו לפני שכותבים אפליקציה שמשתמשת במסד נתונים. הוא מאפשר למשוך נתונים מטבלאות שונות בהתאם לנתון משותף. השאלה היא מה המטרה כאן - זבנג וגמרנו (המקרים שבהם בד"כ גם אקסס מתאים, ואז יושבים וכותבים את הכל מחדש במועד מאוחר יותר כשזה כבר לא מסתדר עם העומס/ריבוי משתמשים בו זמנית במערכת - שני דברים שאקסס ממש, אבל ממש לא מסתדר איתם כמו שצריך...)

לגבי העולים - אם רוצים לסמן בנפרד ת"ז או מספר דרכון (לא באותו שדה), אזי המספר הזה כבר לא יכול להיות משותף לצורכי זיהוי בטבלה, ועדיף שזה יהיה סתם מספר עובד סידורי עולה (auto increment, איך שזה לא נקרא באקסס...)

אם עובד ואשתו עובדים באותה חברה ולא רוצים להתחיל להגדיר תלות בין עובדים (כמו "חי עם עובד X"), אין מנוס מלהכניס את הפרטים כמה פעמים.

הטבלה מספיקה עבור הנתונים (חוץ מתאריך לידה ששכחת) - אבל היא לא הדרך הנכונה לבנות מסד נתונים. שוב, השאלה היא מה המטרה...
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
נמאס לכם לזכור סיסמאות? לחצו כאן!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #5  
ישן 08-12-2008, 19:39
  hila_fresh hila_fresh אינו מחובר  
 
חבר מתאריך: 16.11.04
הודעות: 79
המטרה
בתגובה להודעה מספר 4 שנכתבה על ידי שימי שמתחילה ב "JOIN זה אחד הדברים הבסיסיים ב..."

ציטוט:
במקור נכתב על ידי שימי
JOIN זה אחד הדברים הבסיסיים ב SQL... כדאי להכיר אותו לפני שכותבים אפליקציה שמשתמשת במסד נתונים. הוא מאפשר למשוך נתונים מטבלאות שונות בהתאם לנתון משותף. השאלה היא מה המטרה כאן - זבנג וגמרנו (המקרים שבהם בד"כ גם אקסס מתאים, ואז יושבים וכותבים את הכל מחדש במועד מאוחר יותר כשזה כבר לא מסתדר עם העומס/ריבוי משתמשים בו זמנית במערכת - שני דברים שאקסס ממש, אבל ממש לא מסתדר איתם כמו שצריך...)

לגבי העולים - אם רוצים לסמן בנפרד ת"ז או מספר דרכון (לא באותו שדה), אזי המספר הזה כבר לא יכול להיות משותף לצורכי זיהוי בטבלה, ועדיף שזה יהיה סתם מספר עובד סידורי עולה (auto increment, איך שזה לא נקרא באקסס...)

אם עובד ואשתו עובדים באותה חברה ולא רוצים להתחיל להגדיר תלות בין עובדים (כמו "חי עם עובד X"), אין מנוס מלהכניס את הפרטים כמה פעמים.

הטבלה מספיקה עבור הנתונים (חוץ מתאריך לידה ששכחת) - אבל היא לא הדרך הנכונה לבנות מסד נתונים. שוב, השאלה היא מה המטרה...


לשימי,
אז ככה, קצת תיקונים ממקודם (ככה זה כשכותבים מהר...)
* המטרה היא לבנות מאגר מידע עבור אחראי משאבי אנוש שיוכל לראות מה באיזו עבודה עובד דני ,לדוגמא, ומהו היקף המשרה ואם הוא עובד במקום נוסף נניח. (מדובר במושב וזוגות רבים עובדים יחד באותו מקום ).

האחראי מעוניין לראות קשר בין בני זוג, אבל מכיוון שיש המון אנשים מאותה משפחה הוא לא יכול לדעת אם חדוה היא הבת של דני או אשתו, לכן אני רוצה שיהיה שדה של 'שם בן/בת הזוג' בטופס של כל אחד.
כמו כן הוא יצרך לסנן מי מאנשי המושב הם כבר בפנסיה לדוגמא.

אני לא מעוניינת לעשות לו טבלה ענקית ומסורבלת באקסל עם כמות כזו של אנשים, כי הוא לא ייצא מזה ויסתבך. זה גם לא הייעוד של אקסל ולדעתי, תוכנת האקסס יותר מתאימה לזה.
אני רוצה שתהיה לו האפשרות לעשות חיתוכים וסינונים בהתאם למה שהוא צריך ולהפיק דוחות ולשם כך אשתמש באקסס.

- ביררתי ולכולם יש מספר ת"ז כך שאוכל להשתמש בו כמפתח ראשי.
- צודק. שכחתי לרשום תאריך לידה. :-)

לגבי הטבלאות:
חשבתי על זה, והגעתי למסקנה שצריך לפחות 2 טבלאות.
טבלת "עובדים" וטבלת "מקומות העבודה" (מזכירות המושב, הנהלת החשבונות, גידולי פרחים, מטעים, חממות, מי עובד בעיר וכו' )

האם לדעתך שתי הטבלאות האלו עונות על המטרה? אשמח לשמוע הערות /הצעות נוספות ממך ומכל מי שיענה.

תודה רבה :-)
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #6  
ישן 08-12-2008, 19:46
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,775
בתגובה להודעה מספר 5 שנכתבה על ידי hila_fresh שמתחילה ב "המטרה"

פתאום אני קולט שכתבת תאריך לידה. מוזר, חיפשתי כמה פעמים... אני כנראה נורא עייף :\

כמו שאמרתי מלכתחילה - ראוי שלכל נתון תהיה טבלה משלו, במערכת אידאלית.

אם החלטת שאת לא מעוניינת לעשות את זה, לא הבנתי מדוע דווקא המקום של העבודה שלו, הוא הזוכה לטבלה נפרדת, ולדוגמא, הטלפון שלו בבית, לא. מה ההבדל?

בכל אחד מהמקרים אפשר לסרוק את הטבלה ולבדוק עבור ערכים מסויימים בטור מסויים (כמו גם לציין את שלל האפשרויות השונות בכל אחד מהערכים בטור, באמצעות פונקצית GROUP BY ב SQL)...

ת'אכלס את עושה בדיוק את הטבלה הענקית והמסורבלת באקסס, ברגע שאת שמה את כל הפרטים בטבלה אחת...

לגבי קרובי משפחה, זה פשוט, צריכים שיהיו שני שדות עבור זה: 1) יחס אל השדה השני 2) מזהה משתמש של השדה השני. כלומר נניח: 1) בן 2) 58. אז העובד הזה הוא הבן של עובד מספר 58, ואז אפשר לבדוק מי זה.
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
נמאס לכם לזכור סיסמאות? לחצו כאן!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #7  
ישן 08-12-2008, 20:02
  hila_fresh hila_fresh אינו מחובר  
 
חבר מתאריך: 16.11.04
הודעות: 79
אבל שימי,
בתגובה להודעה מספר 6 שנכתבה על ידי שימי שמתחילה ב "פתאום אני קולט שכתבת תאריך..."

ציטוט:
במקור נכתב על ידי שימי
פתאום אני קולט שכתבת תאריך לידה. מוזר, חיפשתי כמה פעמים... אני כנראה נורא עייף :\

כמו שאמרתי מלכתחילה - ראוי שלכל נתון תהיה טבלה משלו, במערכת אידאלית.

אם החלטת שאת לא מעוניינת לעשות את זה, לא הבנתי מדוע דווקא המקום של העבודה שלו, הוא הזוכה לטבלה נפרדת, ולדוגמא, הטלפון שלו בבית, לא. מה ההבדל?

בכל אחד מהמקרים אפשר לסרוק את הטבלה ולבדוק עבור ערכים מסויימים בטור מסויים (כמו גם לציין את שלל האפשרויות השונות בכל אחד מהערכים בטור, באמצעות פונקצית GROUP BY ב SQL)...

ת'אכלס את עושה בדיוק את הטבלה הענקית והמסורבלת באקסס, ברגע שאת שמה את כל הפרטים בטבלה אחת...

לגבי קרובי משפחה, זה פשוט, צריכים שיהיו שני שדות עבור זה: 1) יחס אל השדה השני 2) מזהה משתמש של השדה השני. כלומר נניח: 1) בן 2) 58. אז העובד הזה הוא הבן של עובד מספר 58, ואז אפשר לבדוק מי זה.


לשימי,
חח נכון, באמת כתבתי את התאריך.... אני גם כן עייפה.

לא הבנתי למה כתבת שתהיה טבלה אחת אם אני יוצרת למעשה 2 טבלאות כמו שכתבתי (טבלת עובדים וטבלת מקומות עבודה), כך אם הוא רוצה לראות מי עובד במטעים הוא עושה סינון רואה בקלות.

אני אנסה להסביר קצת יותר בפירוט לגבי מה הדרישות:
בעקרון אותו מנהל רוצה לראות מה קורה עם דני אז המטרה שלי היא שיהיה לו טופס ובו הוא לוחץ על טבלת עובדים, יחפש את 'דני' ויוכל לראות את כל הפרטים של דני , אם דני עובד בכלל או שהוא מחוסר עבודה. אם דני עובד - יראו שדני עובד חצי משרה בחממות וחצי משרה בעיר - לדוגמא.
(לכן חשבתי לעשות בטבלת עובדים שדה 'מקום עבודה נוכחי' | 'היקף משרה' | 'מקום עבודה נוסף (במידה ויש) | 'היקף משרה שניה' ) - האם זה כיוון נכון?

ובנוסף שבטופס של דני יהיה רשום שאשתו היא חדוה ויהיה כפתור לכרטיס עובד שלה.

(זו המטרה שהוא יראה מה המצב התעסוקתי של כל תושב)

תודה !
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #8  
ישן 08-12-2008, 22:34
  שימיadmin שימי אינו מחובר  
מנהל פורומי "תכנות ובניית אתרים" ו"חומרה ורשתות"
 
חבר מתאריך: 25.10.01
הודעות: 42,775
בתגובה להודעה מספר 7 שנכתבה על ידי hila_fresh שמתחילה ב "אבל שימי,"

יהיו שתי טבלאות בדוגמא שאת נתת. לא זו הייתה השאלה שלי. אני ניסיתי להבין למה את כל הנתונים החלטת לשים בטבלה אחת, ודווקא שדה מסויים, מקום העבודה, החלטת לעשות לו טבלה מיוחדת.

אני אמרתי, שבהתאם לכללי הנירמול, כל שדה ושדה אמור להיות בטבלה משלו, ונכון לעשות כך מהרבה סיבות. באם החלטת שלא לעשות את זה, אלא לשים את כל הנתונים ביחד, אז בסך הכל שאלתי למה מקום העבודה, שונה, לצורך העניין, מהשם של הבנאדם. למה הוא צריך טבלה משלו?

אם את חושבת שככה צריך לעשות את זה כדי לשלוף מידע מסויים, אז זה לא נכון - כששולפים מטבלה, בוחרים איזה שדות (טורים) רוצים שיוצגו, וניתן להגביל על פי ערך מסויים (או יותר) בכל שורה ושורה...

אבל כל זה - זה סתם עיצוב של טבלאות, ובפועל, כל דבר יעבוד (חוץ מהעובדה שתהיה לך בעייה לשים יותר מנתון אחד מכל סוג על כל בנאדם, אלא אם כן תעשי כמה טורים מאותו סוג, כלומר טלפון1, טלפון2, וכו')

עיצוב של אפליקציה באקסס (שאולי על זה את מדברת) - בכלל לא קשור למסדי נתונים (ולכן לפורום זה) - אלא לאקסס כתוכנה, שיודעת לקרוא ממסד נתונים...
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
נמאס לכם לזכור סיסמאות? לחצו כאן!

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #9  
ישן 09-12-2008, 10:13
  hila_fresh hila_fresh אינו מחובר  
 
חבר מתאריך: 16.11.04
הודעות: 79
צהריים טובים
בתגובה להודעה מספר 8 שנכתבה על ידי שימי שמתחילה ב "יהיו שתי טבלאות בדוגמא שאת..."

ציטוט:
במקור נכתב על ידי שימי
יהיו שתי טבלאות בדוגמא שאת נתת. לא זו הייתה השאלה שלי. אני ניסיתי להבין למה את כל הנתונים החלטת לשים בטבלה אחת, ודווקא שדה מסויים, מקום העבודה, החלטת לעשות לו טבלה מיוחדת.

אני אמרתי, שבהתאם לכללי הנירמול, כל שדה ושדה אמור להיות בטבלה משלו, ונכון לעשות כך מהרבה סיבות. באם החלטת שלא לעשות את זה, אלא לשים את כל הנתונים ביחד, אז בסך הכל שאלתי למה מקום העבודה, שונה, לצורך העניין, מהשם של הבנאדם. למה הוא צריך טבלה משלו?

אם את חושבת שככה צריך לעשות את זה כדי לשלוף מידע מסויים, אז זה לא נכון - כששולפים מטבלה, בוחרים איזה שדות (טורים) רוצים שיוצגו, וניתן להגביל על פי ערך מסויים (או יותר) בכל שורה ושורה...

אבל כל זה - זה סתם עיצוב של טבלאות, ובפועל, כל דבר יעבוד (חוץ מהעובדה שתהיה לך בעייה לשים יותר מנתון אחד מכל סוג על כל בנאדם, אלא אם כן תעשי כמה טורים מאותו סוג, כלומר טלפון1, טלפון2, וכו')

עיצוב של אפליקציה באקסס (שאולי על זה את מדברת) - בכלל לא קשור למסדי נתונים (ולכן לפורום זה) - אלא לאקסס כתוכנה, שיודעת לקרוא ממסד נתונים...


הגדרתי את מקום העבודה בטבלה נפרדת כי זה הקשר בין שתי הטבלאות. החיבור בין העובדים למקומות העבודה שלהם. - זה מה שהמנהל שלי רוצה לראות.
כל השדות האחרים בטבלת 'עובדים' הם למעשה הפרטים האישיים של העובד (שם שם משפחה טלפונים..).

כמו שיש טבלת מרצים באוני' לדוגמא וכל אחד גר במקום אחר, אז יוצרים גם טבלת 'ערים בארץ' וכך משייכים כל מרצה לעיר שלו.
אז, לדעתי עד כמה שאני מבינה, זה בדיוק המצב במקרה שלי עם העובדים ומקומות העבודה שלהם.
כל מקום עבודה מקבל 'קוד' ואז אפשר לראות מי עובד איפה.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #11  
ישן 09-12-2008, 11:14
  hila_fresh hila_fresh אינו מחובר  
 
חבר מתאריך: 16.11.04
הודעות: 79
מממ...
בתגובה להודעה מספר 10 שנכתבה על ידי שימי שמתחילה ב "אבל באותה מידה אם היית כותבת..."

ציטוט:
במקור נכתב על ידי שימי
אבל באותה מידה אם היית כותבת את מקום העבודה באותה שורה בדיוק שבה כתבת את הטלפון, הכתובת, השם הפרטי, השם המשפחה - גם אז היה אפשר למצוא את מקום העבודה על פי העובד, בלי קודים.

לצורך העניין:
קוד:
SELECT firstname,lastname,workplace FROM employees WHERE firstname='hila' AND lastname='fresh'

אני לא אומר שהשיטה שלך לא נכונה - היא כן - אבל היא צריכה להיות לגבי כל הפרטים - לא רק לגבי מקום העבודה.


יש משהו במה שאתה אומר...
אני מבינה שאני צריכה לחלק את זה לעוד טבלאות אבל קצת הסתבכתי עם זה...
ניסיתי להגיד לי מה המטרה של מסד הנתונים ועל מה הוא יענה - על אילו שאלות ואילו דוחות יוכלו להפיק ממנו , ככה כדי לארגן לי במסודר ואני בבעיה...

אני 'רואה' בראש שלי תמונה של איך זה ייראה בסוף אבל לא מצליחה להעביר את זה , להכין את זה.

תוכל לכוון אותי קצת לגבי החלוקה של כל הפרטים?
(ממה שניסיתי בעצמי לא הולך לי. לדוגמא, אני צריכה לכתוב מקום עבודה נוכחי ומהו היקף המשרה לעובד מסויים אבל אם הוא עובד בעוד מקום ומהו היקף המשרה במקום השני אני צריכה לציין את זה ולא יודעת איך... ז"א יוצא לי פעמיים 'מקום עבודה' ו'היקף משרה')

אז איך החלוקה צריכה להיות?
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #12  
ישן 09-12-2008, 11:58
  משתמש זכר dorM dorM אינו מחובר  
מנהל
 
חבר מתאריך: 26.07.08
הודעות: 6,473
בתגובה להודעה מספר 1 שנכתבה על ידי hila_fresh שמתחילה ב "מאגר עובדים - התייעצות"

לא קראתי את התגובות, מקוה שלא אחזור על הנאמר.

אני הייתי עושה את זה באופן הבא:

טבלה ראשית - מכילה את המידע האישי על העובדים.
טבלה משנית - מכילה את המידע על העובדים בנושא העבודה, כלומר תאריך התחלת העבודה, מקום העבודה וכו'.

הטבלאות וסוגי הטורים (סוגי הטורים כתבתי באופן בסיסי, לא כתבתי את הגודל שלהם וכד'):

טבלה ראשית- employees:

e_id - שדה מסוג INT ו- Auto_Increment
ת"ז - שדה מסוג INT (או BIGINT וכד', תלוי בגודל של המספר... בדקי בדוקומנטציה)
שם פרטי - מסוג CHAR
שם משפחה - CHAR
תאריך לידה - DATE ; אולי INT שמכיל את ה- Unix time (ראי כאן: http://en.wikipedia.org/wiki/Unix_time) . תלוי בצורך...
טלפון בבית - CHAR
סלולרי - CHAR
מקום עבודה נוכחי - Boolean (אמת או שקר)
הערות כלליות - CHAR

טבלה משנית - employees_jobs:

ej_id - שדה מסוג INT ו- Auto_Increment
e_id - שדה מסוג INT, בדומה לגודל של השדה e_id שבטבלה הראשית. זהו השדה המקשר בין הטבלאות.
מקום העבודה - CHAR כנראה...
תחילת העבודה (באיזו שנה התחיל לעבוד) - DATE או YEAR או INT ... שוב, תלוי בצורך.
היקף משרה (מלאה, חלקית וכו'..) - TINYINT - קטן מאוד כיוון שכמות האפשרויות לשדה זה מוגבל.


--- SOF ---

בנוגע לשדה של "עבודות קודמות" - לא צריך אותו.
הסיבה היא שהטבלה המשנית משמשת אותך לרשימה של עבודות קודמות, כאשר כל עבודה מיוצגת בתור רשומה אחת בטבלה. תוכלי להיעזר בפיסקת INNER JOIN על מנת לקשר בין הטבלה הראשית ולמשנית.

בטבלה הראשית יש את השדה "מקום עבודה נוכחי" כדי שיהיה אפשר לבדוק בקלות ובמהירות אם העובד הספציפי מובטל או עובד. יש 2 אפשרויות כאן עד כמה שהבנתי, ולכן זה מסוג BOOLEAN.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #13  
ישן 09-12-2008, 12:48
  hila_fresh hila_fresh אינו מחובר  
 
חבר מתאריך: 16.11.04
הודעות: 79
קודם כל תודה רבה :-)
בתגובה להודעה מספר 12 שנכתבה על ידי dorM שמתחילה ב "לא קראתי את התגובות, מקוה שלא..."

ציטוט:
במקור נכתב על ידי dorM
לא קראתי את התגובות, מקוה שלא אחזור על הנאמר.

אני הייתי עושה את זה באופן הבא:

טבלה ראשית - מכילה את המידע האישי על העובדים.
טבלה משנית - מכילה את המידע על העובדים בנושא העבודה, כלומר תאריך התחלת העבודה, מקום העבודה וכו'.

הטבלאות וסוגי הטורים (סוגי הטורים כתבתי באופן בסיסי, לא כתבתי את הגודל שלהם וכד'):

טבלה ראשית- employees:

e_id - שדה מסוג INT ו- Auto_Increment
ת"ז - שדה מסוג INT (או BIGINT וכד', תלוי בגודל של המספר... בדקי בדוקומנטציה)
שם פרטי - מסוג CHAR
שם משפחה - CHAR
תאריך לידה - DATE ; אולי INT שמכיל את ה- Unix time (ראי כאן: http://en.wikipedia.org/wiki/Unix_time) . תלוי בצורך...
טלפון בבית - CHAR
סלולרי - CHAR
מקום עבודה נוכחי - Boolean (אמת או שקר)
הערות כלליות - CHAR

טבלה משנית - employees_jobs:

ej_id - שדה מסוג INT ו- Auto_Increment
e_id - שדה מסוג INT, בדומה לגודל של השדה e_id שבטבלה הראשית. זהו השדה המקשר בין הטבלאות.
מקום העבודה - CHAR כנראה...
תחילת העבודה (באיזו שנה התחיל לעבוד) - DATE או YEAR או INT ... שוב, תלוי בצורך.
היקף משרה (מלאה, חלקית וכו'..) - TINYINT - קטן מאוד כיוון שכמות האפשרויות לשדה זה מוגבל.


--- SOF ---

בנוגע לשדה של "עבודות קודמות" - לא צריך אותו.
הסיבה היא שהטבלה המשנית משמשת אותך לרשימה של עבודות קודמות, כאשר כל עבודה מיוצגת בתור רשומה אחת בטבלה. תוכלי להיעזר בפיסקת INNER JOIN על מנת לקשר בין הטבלה הראשית ולמשנית.

בטבלה הראשית יש את השדה "מקום עבודה נוכחי" כדי שיהיה אפשר לבדוק בקלות ובמהירות אם העובד הספציפי מובטל או עובד. יש 2 אפשרויות כאן עד כמה שהבנתי, ולכן זה מסוג BOOLEAN.


לדור,
קראתי את מה שכתבת. אני חושבת שהבנתי עכשיו את החלוקה של הטבלאות.
הייתי צריכה להפריד בין הפרטים של האנשים למידע על העבודה.
אבל, לא הבנתי כל כך למה התכוונת כשכתבת: "בנוגע לשדה עבודות קודמות - לא צריך אותו. הסיבה היא שהטבלה המשנית משמשת אותך לרשימה של עבודות קודמות, כאשר כל עבודה מיוצגת בתור רשומה אחת בטבלה. תוכלי להיעזר בפיסקת INNER JOIN על מנת לקשר בין הטבלה הראשית ולמשנית".

ועוד שאלה, שעדיין לא ברורה לי כל כך, אם יש אדם שעובד חצי משרה במקום מסויים וחצי משרה במקום אחר אני רוצה שכשהמנהל יוכל לראות את זה בטופס של אותו עובד.
* אם אדם בא למנהל משאבי אנוש הוא יעלה את הטופס ויראה את 'כרטיס העובד' שלו ויראה שהוא עובד חצי משרה במקום X וחצי משרה במקום Y.
איך אני צריכה לרשום את השדות האלה?

אם תוכל לתת לי דוגמא זה יהיה הכי טוב.

ושוב המון המון תודה
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #14  
ישן 09-12-2008, 13:53
  משתמש זכר dorM dorM אינו מחובר  
מנהל
 
חבר מתאריך: 26.07.08
הודעות: 6,473
בתגובה להודעה מספר 13 שנכתבה על ידי hila_fresh שמתחילה ב "קודם כל תודה רבה :-)"

ציטוט:
אבל, לא הבנתי כל כך למה התכוונת כשכתבת: "בנוגע לשדה עבודות קודמות - לא צריך אותו. הסיבה היא שהטבלה המשנית משמשת אותך לרשימה של עבודות קודמות, כאשר כל עבודה מיוצגת בתור רשומה אחת בטבלה. תוכלי להיעזר בפיסקת INNER JOIN על מנת לקשר בין הטבלה הראשית ולמשנית".


לאדם אחד יכול להיות X עבודות מלפני העבודה הנוכחית שלו.
X הוא מספר משתנה, בין 0 לאינסוף באופן תיאורטי...
מה שאת רצית הוא ליצור טור של "עבודות קודמות". טור זה אמור להכיל לפי הגדרתו את כל (כלומר, X) העבודות הקודמות של אותו העובד. בדר"כ אם דבר כזה מיושם, הוא יהיה מיושם ע"י טור מסוג CHAR, כך שכל ערך יהיה מופרד, לדוגמא, בפסיק. כפי כנראה הספקת להבין, שיטת העבודה הזו מאוד לא נוחה, ואם אני לא טועה, היא נוגדת את חוקי הנירמול של מסדי הנתונים. יהיה בעיה להפריד את הנתונים השונים בתוך השדה היחידי מסוג ה-CHAR בשאילתות ה-SQL.

לכן, הפיתרון הטוב ביותר הוא ליצור טבלה חדשה.
בטבלה זו, כל רשומה תכיל פרטים שונים על העבודות הקודמות של העובד(ים).
באופן זה יהיה אפשר להוסיף את כל X העבודות הקודמות של העובד, כאשר כל רשומה תהיה 1 מתוך X העבודות הקודמות שלו.
בעזרת פיסקת INNER JOIN תקבלי מכפלה קרטזית ( ראי כאן: http://he.wikipedia.org/wiki/%D7%9E...%96%D7%99%D7%AA ) של הפרטים האישיים של העובד ופרטי העבודות הקודמות שלו. התוצאות יתקבלו בצורה נפרדת לכל עובד (אם תכתבי את השאילתא בצורה נכונה כמובן).

שימי לב שבעזרת שדה של תאריך תוכלי לדעת מהי העבודה האחרונה (או - העבודה הנוכחית) של העובד, בעזרת פיסקת ORDER BY.

ציטוט:
ועוד שאלה, שעדיין לא ברורה לי כל כך, אם יש אדם שעובד חצי משרה במקום מסויים וחצי משרה במקום אחר אני רוצה שכשהמנהל יוכל לראות את זה בטופס של אותו עובד.
* אם אדם בא למנהל משאבי אנוש הוא יעלה את הטופס ויראה את 'כרטיס העובד' שלו ויראה שהוא עובד חצי משרה במקום X וחצי משרה במקום Y.
איך אני צריכה לרשום את השדות האלה?


זה ניתן ליישום בפשטות בצורת אירגון הטבלאות שהצגתי למעלה.
השדה הרלונטי הוא "היקף משרה", והוא נמצא בטבלה המשנית.
בשאילתא תצטרכי לכתוב משהו כמו:

קוד:
SELECT e.*, ej.* FROM employees e INNER JOIN employees_jobs ej ON ( e.e_id=ej.e_id AND job_scope=2 ) WHERE e.e_id=70


בפיסקת ה-WHERE, המספר 70 מיצג את מספר הזהות של העובד.
בפיסקת ה-ON השייכת לפיסקת ה-INNER JOIN, טור ה-"job_scope" הוא למעשה טור "היקף משרה", והמספר 2 מייצג את "חצי משרה".

נערך לאחרונה ע"י dorM בתאריך 09-12-2008 בשעה 14:00.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 16:25

הדף נוצר ב 0.08 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר