ארכיון יומי: 28 מאי, 2010

מפתחות זרים ללא מפתחות

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

אם אתם זוכרים, כתבתי בעבר על כך שבלזרוס יש סדרת מחלקות אשר נקראות בשם הכולל TDataSet, והן בעצם משהו באמצע בין ORM לבין כלי כדוגמת Perl DBI. עכשיו תוכלו לראות עוד דוגמא לכך.

כאשר צריך לפתח סביבה גרפית המשתמשת במפתחות זרים (או פשוט לייבא מידע מטבלה אחרת), אז TDataSet וכמו כן TDBLookupXXXXX נחלצים לעזרתנו ומספקים עבורינו את היכולת הזו ללא קשר אם יש לנו תמיכה ב foreign key או לא, וכאמור גם אם מדובר ב2 מסדי נתונים לגמרי שונים, למשל אחד SQL Server והשני PostgreSQL זה עדיין יעבוד.

לצורך ההדגמה, בואו נבנה באמצעות SQLite3 טבלאות:

DROP TABLE IF EXISTS "Authors";
CREATE TABLE Authors (ID AUTOINC_INT , Author VARCHAR(255));
DROP TABLE IF EXISTS "Comments";
CREATE TABLE Comments (ID AUTOINC_INT , Author INTEGER , Comment TEXT);

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

אז יצרנו 2 טבלאות:

  1. טבלת יוצרים
  2. טבלת הערות

עכשיו נבנה ממשק פשוט מאוד ל 3 חלונות: להמשיך לקרוא