none
חסימת ערך בעמודה - המשך... RRS feed

  • דיון כללי

  • השרשור הקודם הפך להיות כבר שרשורפלצת, אז הנה נמשיך כאן.

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

    1. בתכנון הקיים, מבלי לבצע אף שינוי, ניתן להחליט שטור ה IsDefault יכיל 1 עבור תשובת ברירת המחדל ו NULL עבור השאר. על פי ANSI, טור המוגדר כ UNIQUE יכול להכיל אין סוף ערכי NULL מכיוון ש NULL הוא ערך לא ידוע ולכן NULL אחד אינו שווה ל NULL שני והופעתם אינה מפרה את ה UNIQUE CONSTRAINT. במקרה דנן, מייצרים UNIQUE CONSTRAINT על QuestionID ו IsDefault וניתן יהיה להכניס לכל שאלה רק תשובת ברירת מחדל אחת. לצערנו, SQL Server לא עומד כאן בתקן ומאפשר לטור UNIQUE רק מופע אחד של NULL ולכן זה לא אפשרי. זו דוגמא מצויינת למגבלה שאי עמידה בתקן מציבה בפנינו.

    2. לגבי הפתרונות שהציעו להוסיף טבלה עבור ברירת המחדל, ושבהם טענתי כי ניתן להכניס תשובת ברירת מחדל שאינה קשורה כלל לשאלה, הפתרון פשוט מאוד. במקום לייצר 2 מפתחות זרים נפרדים, יש לייצר מפתח זר COMPOSITE בין טבלת Default Answers לטבלת Answers על שני הטורים גם יחד - QuestionID ו AnswerID ואז מובטח שהזוגות "שאלה-תשובה" המוגדרים כברירת מחדל אכן קשורים זה לזה.

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


    Ami Levin, SQL Server MVP. CTO, DBSophic LTD. - http://www.dbsophic.com/ --Performance is the most significant driver in maintaining data and service availability.--

    יום ראשון 03 יוני 2012 15:03