דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. איחוד טבלאות MSSQL

איחוד טבלאות MSSQL

מתוזמן נעוץ נעול הועבר תכנות
16 פוסטים 4 כותבים 398 צפיות 5 עוקבים
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • שמואל4ש שמואל4

    @by6199 כתב באיחוד טבלאות MSSQL:

    היכן הבעייה? בטבלה אחת יש רשומה תחת id 1000 וגם בטבלה 2 יש רשומה תחת id 1000 מדובר כמובן ברשומות שונות לחלוטין.

    אם לא משנה הid אתה פשוט יכול לעשות insert בלי הid והם יקבלו id חדש באופן אוטומטי.

    WWWW מנותק
    WWWW מנותק
    WWW
    כתב ב נערך לאחרונה על ידי
    #7

    @שמואל4 כתב באיחוד טבלאות MSSQL:

    אם לא משנה הid אתה פשוט יכול לעשות insert בלי הid והם יקבלו id חדש באופן אוטומטי.

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

    WWW.netfree@gmail.com || קשבק! החזר כספי לבנק על רכישות באינטרנט || עונים על סקרים ומרוויחים כסף!

    תגובה 1 תגובה אחרונה
    0
    • WWWW WWW

      @dovid כתב באיחוד טבלאות MSSQL:

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

      אנסה להסביר:
      טבלה-1: סוכנים. טבלה-2: חנויות.

      להלן חלק מהטבלאות ב DB:

      • סוכנים(מזהה, שם)
      • חנויות(מזהה, שם, ועוד)
      • מוצרים1(מזהה, שם, מזהה חנות, ועוד)
      • מוצרים2(מזהה, שם, מזהה סוכן, ועוד)

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

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

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

      dovidD מנותק
      dovidD מנותק
      dovid
      ניהול
      כתב ב נערך לאחרונה על ידי dovid
      #8

      @WWW הפתרון שהצעת הגיוני, ואפשרי בהחלט.
      אני אציע לך את הפתרון שאני הייתי עושה, בלי למחוק ולהוסיך אף עמודה.

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

      1. שמור בצד את מספר המקסימום של הטבלה חנויות, למשל 31512.

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

        UPDATE products2 SET agent_id = agent_id + 31512;

      שאילתה כזו תריץ על כל מזהי הסוכנים בטבלאות הזרות וגם בטבלת הסוכנים עצמה.
      אח"כ תוכל להוסיף את כל שורות הסוכנים לטבלת החנויות ע"י INSERT INTO.

      (בסיום הכל מומלץ להפוך את הID המאוחד למזהה ראשי ולמספור אוטומטי).

      • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
      • בכל נושא אפשר ליצור קשר dovid@tchumim.com
      WWWW תגובה 1 תגובה אחרונה
      1
      • dovidD dovid

        @WWW הפתרון שהצעת הגיוני, ואפשרי בהחלט.
        אני אציע לך את הפתרון שאני הייתי עושה, בלי למחוק ולהוסיך אף עמודה.

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

        1. שמור בצד את מספר המקסימום של הטבלה חנויות, למשל 31512.

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

          UPDATE products2 SET agent_id = agent_id + 31512;

        שאילתה כזו תריץ על כל מזהי הסוכנים בטבלאות הזרות וגם בטבלת הסוכנים עצמה.
        אח"כ תוכל להוסיף את כל שורות הסוכנים לטבלת החנויות ע"י INSERT INTO.

        (בסיום הכל מומלץ להפוך את הID המאוחד למזהה ראשי ולמספור אוטומטי).

        WWWW מנותק
        WWWW מנותק
        WWW
        כתב ב נערך לאחרונה על ידי WWW
        #9

        @dovid כתב באיחוד טבלאות MSSQL:

        (בסיום הכל מומלץ להפוך את הID המאוחד למזהה ראשי ולמספור אוטומטי).

        זה כעת ככה.
        אפשר להסיר את המספור האוטומטי ולהחזיר?

        שאילתה כזו תריץ על כל מזהי הסוכנים בטבלאות הזרות וגם בטבלת הסוכנים עצמה.

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

        WWW.netfree@gmail.com || קשבק! החזר כספי לבנק על רכישות באינטרנט || עונים על סקרים ומרוויחים כסף!

        dovidD תגובה 1 תגובה אחרונה
        0
        • WWWW WWW

          @dovid כתב באיחוד טבלאות MSSQL:

          (בסיום הכל מומלץ להפוך את הID המאוחד למזהה ראשי ולמספור אוטומטי).

          זה כעת ככה.
          אפשר להסיר את המספור האוטומטי ולהחזיר?

          שאילתה כזו תריץ על כל מזהי הסוכנים בטבלאות הזרות וגם בטבלת הסוכנים עצמה.

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

          dovidD מנותק
          dovidD מנותק
          dovid
          ניהול
          כתב ב נערך לאחרונה על ידי
          #10

          @WWW כתב באיחוד טבלאות MSSQL:

          אפשר להסיר את המספור האוטומטי ולהחזיר?

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

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

          שגוי.
          אם זה לא נותן לך זה לא בגלל PK אלא בגלל FOREIGN KEY עם REFERENCES, או בגלל CONSTRAINT.
          אם ידוע לך שעשית כאלו, עליך לבדוק אם קורית שגיאה ואז להגדיר אותם באופן שיאפשרו שורות יתומות, אבל לא נראה לי שהגדרת כאלה, אני טועה?

          • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
          • בכל נושא אפשר ליצור קשר dovid@tchumim.com
          WWWW תגובה 1 תגובה אחרונה
          0
          • dovidD dovid

            @WWW כתב באיחוד טבלאות MSSQL:

            אפשר להסיר את המספור האוטומטי ולהחזיר?

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

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

            שגוי.
            אם זה לא נותן לך זה לא בגלל PK אלא בגלל FOREIGN KEY עם REFERENCES, או בגלל CONSTRAINT.
            אם ידוע לך שעשית כאלו, עליך לבדוק אם קורית שגיאה ואז להגדיר אותם באופן שיאפשרו שורות יתומות, אבל לא נראה לי שהגדרת כאלה, אני טועה?

            WWWW מנותק
            WWWW מנותק
            WWW
            כתב ב נערך לאחרונה על ידי
            #11

            @dovid כתב באיחוד טבלאות MSSQL:

            אם זה לא נותן לך זה לא בגלל PK אלא בגלל FOREIGN KEY עם REFERENCES, או בגלל CONSTRAINT.
            אם ידוע לך שעשית כאלו, עליך לבדוק אם קורית שגיאה ואז להגדיר אותם באופן שיאפשרו שורות יתומות, אבל לא נראה לי שהגדרת כאלה, אני טועה?

            כן הגדרתי FOREIGN KEY עם REFERENCES.
            התבלבלתי בין PK ל FK, התכוונתי ל FK.

            WWW.netfree@gmail.com || קשבק! החזר כספי לבנק על רכישות באינטרנט || עונים על סקרים ומרוויחים כסף!

            dovidD תגובה 1 תגובה אחרונה
            1
            • WWWW WWW

              @dovid כתב באיחוד טבלאות MSSQL:

              אם זה לא נותן לך זה לא בגלל PK אלא בגלל FOREIGN KEY עם REFERENCES, או בגלל CONSTRAINT.
              אם ידוע לך שעשית כאלו, עליך לבדוק אם קורית שגיאה ואז להגדיר אותם באופן שיאפשרו שורות יתומות, אבל לא נראה לי שהגדרת כאלה, אני טועה?

              כן הגדרתי FOREIGN KEY עם REFERENCES.
              התבלבלתי בין PK ל FK, התכוונתי ל FK.

              dovidD מנותק
              dovidD מנותק
              dovid
              ניהול
              כתב ב נערך לאחרונה על ידי dovid
              #12

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

              אם אתה מתפלא למה אין לי משנה סדורה איך לעדכן ID שיש עליו אילוץ של FK, זה בגלל שאני בחיים לא משתמש בקשרים במסד נתונים, כמתכנת שדי סולד המDBA אני מעדיף לקחת עלי את האחריות לשלמות והקשרים ולמחול על טובות המסד בנושא.

              • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
              • בכל נושא אפשר ליצור קשר dovid@tchumim.com
              WWWW 2 תגובות תגובה אחרונה
              1
              • dovidD dovid

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

                אם אתה מתפלא למה אין לי משנה סדורה איך לעדכן ID שיש עליו אילוץ של FK, זה בגלל שאני בחיים לא משתמש בקשרים במסד נתונים, כמתכנת שדי סולד המDBA אני מעדיף לקחת עלי את האחריות לשלמות והקשרים ולמחול על טובות המסד בנושא.

                WWWW מנותק
                WWWW מנותק
                WWW
                כתב ב נערך לאחרונה על ידי
                #13

                @dovid כתב באיחוד טבלאות MSSQL:

                @WWW אוקי, אני מופתע, פעלת ממש לפי הספר.

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

                @dovid כתב באיחוד טבלאות MSSQL:

                אם אתה מתפלא למה אין לי משנה סדורה איך לעדכן ID שיש עליו אילוץ של FK, זה בגלל שאני בחיים לא משתמש בקשרים במסד נתונים, כמתכנת שדי סולד המDBA אני מעדיף לקחת עלי את האחריות לשלמות והקשרים ולמחול על טובות המסד בנושא.

                מה אתה אומר על זה: https://stackoverflow.com/a/69782423/14730780
                אני באמצע לקרא את זה.

                WWW.netfree@gmail.com || קשבק! החזר כספי לבנק על רכישות באינטרנט || עונים על סקרים ומרוויחים כסף!

                תגובה 1 תגובה אחרונה
                1
                • dovidD dovid

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

                  אם אתה מתפלא למה אין לי משנה סדורה איך לעדכן ID שיש עליו אילוץ של FK, זה בגלל שאני בחיים לא משתמש בקשרים במסד נתונים, כמתכנת שדי סולד המDBA אני מעדיף לקחת עלי את האחריות לשלמות והקשרים ולמחול על טובות המסד בנושא.

                  WWWW מנותק
                  WWWW מנותק
                  WWW
                  כתב ב נערך לאחרונה על ידי
                  #14

                  @dovid
                  כאן הוא כותב שאם אשנה ל ON UPDATE CASCADE, כשאני אערוך את המזהה בטבלה הראשית, זה ישתנה גם בצאצאים, רק אני לא מבין איך אפשר לשנות מזהה ראשי?

                  WWW.netfree@gmail.com || קשבק! החזר כספי לבנק על רכישות באינטרנט || עונים על סקרים ומרוויחים כסף!

                  dovidD תגובה 1 תגובה אחרונה
                  0
                  • WWWW WWW

                    @dovid
                    כאן הוא כותב שאם אשנה ל ON UPDATE CASCADE, כשאני אערוך את המזהה בטבלה הראשית, זה ישתנה גם בצאצאים, רק אני לא מבין איך אפשר לשנות מזהה ראשי?

                    dovidD מנותק
                    dovidD מנותק
                    dovid
                    ניהול
                    כתב ב נערך לאחרונה על ידי
                    #15

                    כאן הוא כותב שאם אשנה ל ON UPDATE CASCADE, כשאני אערוך את המזהה בטבלה הראשית, זה ישתנה גם בצאצאים

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

                    רק אני לא מבין איך אפשר לשנות מזהה ראשי?

                    למה שלא יהיה אפשר?

                    • מנטור אישי בתכנות והמסתעף – להתקדם לשלב הבא!
                    • בכל נושא אפשר ליצור קשר dovid@tchumim.com
                    WWWW תגובה 1 תגובה אחרונה
                    1
                    • dovidD dovid

                      כאן הוא כותב שאם אשנה ל ON UPDATE CASCADE, כשאני אערוך את המזהה בטבלה הראשית, זה ישתנה גם בצאצאים

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

                      רק אני לא מבין איך אפשר לשנות מזהה ראשי?

                      למה שלא יהיה אפשר?

                      WWWW מנותק
                      WWWW מנותק
                      WWW
                      כתב ב נערך לאחרונה על ידי
                      #16

                      @dovid כתב באיחוד טבלאות MSSQL:

                      בהחלט ייתכן, אתה אבל צריך לבדוק את זה בזהירות.

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

                      WWW.netfree@gmail.com || קשבק! החזר כספי לבנק על רכישות באינטרנט || עונים על סקרים ומרוויחים כסף!

                      תגובה 1 תגובה אחרונה
                      1
                      תגובה
                      • תגובה כנושא
                      התחברו כדי לפרסם תגובה
                      • מהישן לחדש
                      • מהחדש לישן
                      • הכי הרבה הצבעות


                      בא תתחבר לדף היומי!
                      • התחברות

                      • אין לך חשבון עדיין? הרשמה

                      • התחברו או הירשמו כדי לחפש.
                      • פוסט ראשון
                        פוסט אחרון
                      0
                      • דף הבית
                      • קטגוריות
                      • פוסטים אחרונים
                      • משתמשים
                      • חיפוש
                      • חוקי הפורום