איחוד טבלאות MSSQL
-
@WWW הפתרון שהצעת הגיוני, ואפשרי בהחלט.
אני אציע לך את הפתרון שאני הייתי עושה, בלי למחוק ולהוסיך אף עמודה.קודם נחליט איזה טבלה למחוק, למשל נחליט למחוק את טבלת הסוכנים.
אז תעשה ככה:-
שמור בצד את מספר המקסימום של הטבלה חנויות, למשל 31512.
-
כתוב שאילתת עדכון עבור כל אחד מהטבלאות שמצביעות על מזהה סוכן, שאילתת העדכון אמורה לקחת את הID, לחבר אותו ל31512. למשל ככה לטבלת מוצרים2:
UPDATE products2 SET agent_id = agent_id + 31512;
שאילתה כזו תריץ על כל מזהי הסוכנים בטבלאות הזרות וגם בטבלת הסוכנים עצמה.
אח"כ תוכל להוסיף את כל שורות הסוכנים לטבלת החנויות ע"י INSERT INTO.(בסיום הכל מומלץ להפוך את הID המאוחד למזהה ראשי ולמספור אוטומטי).
-
-
@dovid כתב באיחוד טבלאות MSSQL:
(בסיום הכל מומלץ להפוך את הID המאוחד למזהה ראשי ולמספור אוטומטי).
זה כעת ככה.
אפשר להסיר את המספור האוטומטי ולהחזיר?שאילתה כזו תריץ על כל מזהי הסוכנים בטבלאות הזרות וגם בטבלת הסוכנים עצמה.
אני מבין שאצטרך להסיר גם את כל ה PKים, אחרת הוא לא ייתן לי לשנות למזהה לא קיים.
אין אפשרות לערוך ישירות את המזהה בטבלת החנויות ושזה ישפיע על כל התלויים בו? -
@WWW כתב באיחוד טבלאות MSSQL:
אפשר להסיר את המספור האוטומטי ולהחזיר?
אתה יכול להשאיר אותו, הוא לא אמור להפריע. מספור אוטומטי זה רק הגדרה מה להכניס כשלא צויין מספר.
אני מבין שאצטרך להסיר גם את כל ה PKים, אחרת הוא לא ייתן לי לשנות למזהה לא קיים.
שגוי.
אם זה לא נותן לך זה לא בגלל PK אלא בגלל FOREIGN KEY עם REFERENCES, או בגלל CONSTRAINT.
אם ידוע לך שעשית כאלו, עליך לבדוק אם קורית שגיאה ואז להגדיר אותם באופן שיאפשרו שורות יתומות, אבל לא נראה לי שהגדרת כאלה, אני טועה? -
@dovid כתב באיחוד טבלאות MSSQL:
אם זה לא נותן לך זה לא בגלל PK אלא בגלל FOREIGN KEY עם REFERENCES, או בגלל CONSTRAINT.
אם ידוע לך שעשית כאלו, עליך לבדוק אם קורית שגיאה ואז להגדיר אותם באופן שיאפשרו שורות יתומות, אבל לא נראה לי שהגדרת כאלה, אני טועה?כן הגדרתי FOREIGN KEY עם REFERENCES.
התבלבלתי בין PK ל FK, התכוונתי ל FK. -
@WWW אוקי, אני מופתע, פעלת ממש לפי הספר.
טוב, קודם תבדוק שאתה צודק שהוא לא מאפשר לך לשנות.
גם אם הוא לא מאפשר ישירות בטבלת הסוכנים, ייתכן שהוא מאפשר לך לשנות בכל טבלאות המשנה, ואז ממילא תוכל לשנות בטבלת הסוכנים.
אם הצרות נמשכות והוא מתעקש לספק שגיאות על העדכון, תוכל למחוק את הFK (ואם לא מתחשק לך אתה לא חייב להחזיר אותו לעולם, כל תפקידו זה רק לגעור בקוד שגוי שמוסיף שורה יתומה וכדומה).אם אתה מתפלא למה אין לי משנה סדורה איך לעדכן ID שיש עליו אילוץ של FK, זה בגלל שאני בחיים לא משתמש בקשרים במסד נתונים, כמתכנת שדי סולד המDBA אני מעדיף לקחת עלי את האחריות לשלמות והקשרים ולמחול על טובות המסד בנושא.
-
@dovid כתב באיחוד טבלאות MSSQL:
@WWW אוקי, אני מופתע, פעלת ממש לפי הספר.
ח ח ח... יש לזה סיבה, זה פרויקט סרניטי שהגנרטור שלו בונה מודולים אוטומטי על בסיס FOREIGN KEY, (אם יש בטבלת מוצרים עמודה עם FOREIGN KEY לסוכנים, אוטומטית יהיה לי בטבלה את כל הנתונים מטבלת סוכנים וכו').
@dovid כתב באיחוד טבלאות MSSQL:
אם אתה מתפלא למה אין לי משנה סדורה איך לעדכן ID שיש עליו אילוץ של FK, זה בגלל שאני בחיים לא משתמש בקשרים במסד נתונים, כמתכנת שדי סולד המDBA אני מעדיף לקחת עלי את האחריות לשלמות והקשרים ולמחול על טובות המסד בנושא.
מה אתה אומר על זה: https://stackoverflow.com/a/69782423/14730780
אני באמצע לקרא את זה. -
כאן הוא כותב שאם אשנה ל ON UPDATE CASCADE, כשאני אערוך את המזהה בטבלה הראשית, זה ישתנה גם בצאצאים
בהחלט ייתכן, אתה אבל צריך לבדוק את זה בזהירות.
אני מצידי בכל מקרה הייתי מעיף את הFK כי שכבת התוכנה שלי בטוחה מבחינתי.רק אני לא מבין איך אפשר לשנות מזהה ראשי?
למה שלא יהיה אפשר?