MySql תכנון טבלה לשליפה על פי שתי עמודות
-
מסד שמורכב מטבלת יוזרים, וטבלה של אינטרקציה בין היוזרים.
הטבלה של האינטרקציה נראית כך:ID UserID UserSideBID Type ENUN('sale','buy','question','interest')
ה Type מכיל מידע על סוג האינטרקציה, ועל פיו אמור להיקבע האם השורה הזו נוגעת לשני הצדדים או רק לצד א.
לדוגמה אם צד א ביצע מכירה או קניה, הפעילות הזו אמורה להרשם עבור שני הצדדים, כי פעילות כזו מחייבת אינטרקציה דו צידית, אבל אם צד א רק התעניין במוצר של צד ב לא היתה כאן תקשורת הדדית, ולכן פעילות כזו תרשם רק על שם צד א.
הנתון הזה חשוב ובא לידי שימוש ברבה וריאציות ברחבי האפליקציה, בדוחות שימוש וכדומה.
כרגע כשאני רוצה דוח עבור יוזר, אני מבצע שאילתה שבודקת האם המזהה שלו מופיע בצד א, או שמופיע בצד ב וה Type מכיל את המידע שנוגע לשני הצדדים, משהו כזהWHERE UserID=123 OR (UserSideBID=123 AND Type IN('sale', 'buy'))
אבל השאילתות מורכבות לתחזוקה ולא אינטואיטיביות
נפשי בשאלתי מהי הדרך הנכונה לתחזק טבלה שכזו, כל הצעה תתקבל בברכה
-
אין לי רעיון פצצה, סבורני שלאור עניות דעתי הייתי עושה אותו דבר גם אחרי הרבה מחשבה.
אני מנחש שמדובר במשל, והנמשל מסובך בהרבה, אחרת לא היית אומר שזה מורכב וקשה לתחזוקה.
אם מדובר בנמשל מסובך, סביר להניח גם שיש מידע נוסף על צד א' וצד' ב', בעמודות נוספות או בטבלה נוספת.
אם הספקולציות שלי נכונות, יכולה להיות הצעה לעשות טבלה שמכילה רק צד בודד, ככה:InteractionID, UserID, Type, Role
הType נדרש רק אם אין מקום אחר שמכיל מידע על האינטראקציה,
הRole יהיה הסאבטייפ של הצד, למשל במכירה יהיה מוכר מוכר או קונה וכן הלאה.
מבחינת מסד נתונים זה נראה לי מנורמל יותר.