בדיקת קלט-מתחילים

מורןס

New member
בדיקת קלט-מתחילים

שלום.
שואלת עבור משיהי ששלומדת קורס ועדיין בשלב הטבלאות וקשרי הגומלין. היא עוד לא למדה על טפסים ועל שאילתות

היא קבלה בקורס תרגיל לבנות מסד נתונים למשרד תיווך. מצורף תרשים של ה-DB שלה.
ונתקעה בשלב שצריכה לדאוג שאותו שוכר לא יראה את אותה דירה פעמיים.
ז"א במקרה שלה flo_socheimid לא יחזור פעמיים עבור אותו fld_codedira

איך בודקים את זה רק בעיצוב הטבלה (בלי טופס)?

אשמח לכל עזרה.
תודה.
 

AvidaEinav

New member
בהנחה שהבנתי את השאלה.

רק במסגרת הטבלה את יכולה להשתמש באינקס UNIQUE על 2 השדות האלה, ובמידה ותנסי להכניס פעמיים את אותו השוכר עם אותה הדירה, יזרק ERROR.
 

מורןס

New member
אבל מצד שני אותו שוכר יכול לראות דירות אחרות

ככה זה מגביל אותו לאותה דירה ספציפית ראשונה שהוא ראה וזהו. אחרי זה הוא מודיע ששדה flo_socheimid - השוכר UNIQUE
השאלה איך להגביל אותו לאותו שוכר לאותה דירה.
אבל לא להגביל שכר אחר לאותה דירה.
או אותה שוכר לדירה אחרת.

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

AvidaEinav

New member
אז ככה

ה UNIQUE אינדקס הוא על 2 השדות ביחד ולכן אם יש לנו את שוכר 1 ודירות 1,2,3
השילוב שלהם ייתן:
1,1
1,2
1,3
שזה בסדר (שוכר 1 ראה את שלושת הדירות)
בפעם הבאה שתנסי להכניס שוב נגיד 1,2 זה יסתור את התנאי של האינדקס.

על מנת לעשות את הדבר השני שהצעת, תיצטרכי להעזר בשאילתה עם EXISTS לשילוב שאת רוצה להכניס (אבל זה לא במבנה הטבלאי).
 

מורןס

New member
תודה ושאלה

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

2: נגיד וכן אפשר להשתמש בשאילתת IF EXISTS האם ניתן לכתוב אותה בהגדרות השדה איפה שהוא? אם כן איפה? ראיתי שש "ככל אימות" האם שם?

תודה.
 

pitoach

New member
בוקר טוב מורן

* אני מניח לטובת מי שלומד שמדובר בשרת MSSQL ולא עבודה עם תוכנה כמו אקסס והתשובה בהתאם

1. הוספת תנאי על עמודות ברמת הטבלה עצמה (שינוי של הטבלה) מבצעים על ידי השאילתה הבאה למשל:
ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
כאן למשל ייצרנו תנאי ייחודיות על הטורים P_Id,LastName

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

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

השיטה היא להפעיל טריגר על הכנסת נתונים (ועדכון אם רוצים) וככה בכל הכנסה של נתון חדש נעשית מאחורי הקלעים בדיקה. בצורה זו אנחנו כמנהלים יכולים לשנות את הנתונים וכן לבצע
http://webmaster.org.il/articles/plsql-triggers
http://msdn.microsoft.com/en-us/library/ms189799.aspx

דרך נוספת שהוזכרה שימוש בבדיקה ברמת האפליקציה ז"א בדיקה בעזרת שאילתה לפני שמכניסים את הנתון ובדיקה שהנתון לא נמצא או בזמן ההכנסה של הנתון בשאילתה מוסיפים IF NOT EXIST
 

מורןס

New member
תודה

זה בהחלט נותן פתרון לתרגיל. תודה.

מדובר עם קורס באקסס ואת דעתי על מה ששמעתי עליו לא כדאי שאכתוב
 

pitoach

New member
בכיף


 

כלליים

New member
לא אוהב את הגישה של הקורס הזה

עוד לפני שהתלמידים נכנסים לנושא, מעייפים אותם עם "ההרגלים התכנותיים": כל השדות באנגלית, כל שדה צריך להתחיל בfld, ומי יודע מה עוד...

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

pitoach

New member
ואני חייב להגיד שהפעם אני לחלוטין לא מסכים עם

כלליים
עם נסיון של מעל 10 שנים בהוראה/הדרכה ומעל 12 שנים בתחום מסדי נתונים ופיתוח אפליקציות אני יכול להגיד בצורה חד משמעית שתיקון של לימוד גרוע יותר קשה בהרבה מלימוד נכון והכנסת הרגלים מההתחלה!
 
למעלה