none
מציאת חלופה ליצירת FK על VIEW RRS feed

  • שאלה

  • הי.

    אנחנו עושים רפליקציה של טבלה מסוימת משני Databases ל- DB שלישי בשרת אחר (לטבלה יש אותה סכימה בשני שרתי המקור. רק ה- DATA שונה).

    לצורך כך, נאלצנו להתחכם ולרפלק את המידע לשתי טבלאות שונות בשרת היעד, למשל: Table1,Table2 ולאחד ביניהן תחת View.

    הדבר עובד מצוין, מלבד בעיה אחת - אנחנו לא יכולים ליצור FK מול ה- view הזה...

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

    יום ראשון 05 מאי 2013 14:42

תשובות

  • הי,

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

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

    1. להוסיף עוד עמודה שתכיל את קוד/שם שרת המקור ולהוסיף את העמודה הזאת למפתח. זה יבטיח שבשרת היעד לא יהיו ערכי מפתח כפולים.

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

    3. להשתמש ב-GUID כמפתח.

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

    בכל אופן, זה לדעתי צריך להיות הכיוון.

    מקווה שעזרתי...

    -----------------------------
    גיא גלנצר
    יועץ ומדריך SQL Server
    Madeira - SQL Server Services
    http://www.madeira.co.il

    • הוצע כתשובה על-ידי pituachMVP, Editor יום שני 20 מאי 2013 17:15
    • סומן כתשובה על-ידי pituachMVP, Editor יום רביעי 22 מאי 2013 13:13
    יום שני 06 מאי 2013 19:46
    מנחה דיון

כל התגובות

  • הי,

    למה לרפלק את המידע לשתי טבלאות שונות בשרת היעד?

    למה לא לאותה טבלה?

    -----------------------------
    גיא גלנצר
    יועץ ומדריך SQL Server
    Madeira - SQL Server Services
    http://www.madeira.co.il

    יום ראשון 05 מאי 2013 19:10
    מנחה דיון
  • את יכולה להשתמש ב Merge Replication ולחבר את הטבלאות משרתים שונים לשרת אחד וטבלה אחת

    תבדקי אם הקישור הבא עוזר: http://msdn.microsoft.com/en-us/library/ms152746.aspx

    והנה מדריך בסרטון של צעד אחרי צעד (פרוייקטים בהודו ושלושה חודשים רצופים ועדיין המבטא משגע אותי... המלצה: בהודו לעולם אל תתייחסו למילה כן במובן החיובי של המילה אלא במובן של "אני מקשיב" גם כשהתשובה לא אתם תקבלו תשובה כן... יש לי סיפור ארוך שלמדתי את זה על בשרי): http://www.youtube.com/watch?v=8XDfIBGY2fE

    * לא ראיתי את כל הסרטון אלא רק כמה דקות ראשונות לבדוק שהוא קשור לנושא והוא נראה טוב


    signature

    יום ראשון 05 מאי 2013 22:16
    מנחה דיון
  • לא ניתן לשים FK על VIEW.

    למה אתם צריכים FK?

    והאם ע"י בניית trigger בטבלאות השונות זה יכול לפתור לכם את הבעיה.

    יום שני 06 מאי 2013 06:33
  • בנינו transactional replication בין שתי טבלאות בשני instances שונים על אותו שרת לטבלת יעד אחת בשרת אחר.

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

    לכן פיצלנו את זה לשתי טבלאות שונות.

    יום שני 06 מאי 2013 08:21
  • הי,

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

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

    1. להוסיף עוד עמודה שתכיל את קוד/שם שרת המקור ולהוסיף את העמודה הזאת למפתח. זה יבטיח שבשרת היעד לא יהיו ערכי מפתח כפולים.

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

    3. להשתמש ב-GUID כמפתח.

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

    בכל אופן, זה לדעתי צריך להיות הכיוון.

    מקווה שעזרתי...

    -----------------------------
    גיא גלנצר
    יועץ ומדריך SQL Server
    Madeira - SQL Server Services
    http://www.madeira.co.il

    • הוצע כתשובה על-ידי pituachMVP, Editor יום שני 20 מאי 2013 17:15
    • סומן כתשובה על-ידי pituachMVP, Editor יום רביעי 22 מאי 2013 13:13
    יום שני 06 מאי 2013 19:46
    מנחה דיון
  • שלום Hilayo,

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

    תודה!

    -----------------------------
    גיא גלנצר
    יועץ ומדריך SQL Server
    Madeira - SQL Server Services
    http://www.madeira.co.il
    יום שלישי 14 מאי 2013 04:23
    מנחה דיון