BD עדיפות למבנה טבלאות
-
שלום.
אני בונה כעת דאטה בייס (POSTGRESQL supabase)
יש לי טבלה של כתובות שמקושרים לטבלה של ערים.
אני רוצה לבנות קבוצות ערים (למשל גוש דן, מכיל בני ברק וכו' ) בטבלה שנקראת "קבוצות ערים"
השאלה איך עדיף לעשות את זה :
האם בתוך הטבלה של "ערים" להוסיף עמודה , ולשים את הID של הקבוצה .
או טבלה שלישית שתקרא "חברים בקבוצות ערים" עם עמודה של ID עיר , ועמודה של DI קבוצת ערים ?
אין לי נסיון בבניה ולכן אני רוצה לדעת, איך זה הכי טוב לעכשיו ולעתיד . -
הכי נכון מצד הספר זה טבלה שלישית, כי עלולות להיות קבוצות חופפות.
מצד הפרקטיקה, עמודה בטבלת הערים זה בסדר גמור וגם לא יהיה קשה אחרי זה להוציא את זה החוצה.
האמצע של שני הדרכים האלו הוא טבלה אחת במקום השניים, עם ID עיר, ושם קבוצה (ולא ID קבוצה+טבלת קבוצות). -
הכי נכון מצד הספר זה טבלה שלישית, כי עלולות להיות קבוצות חופפות.
מצד הפרקטיקה, עמודה בטבלת הערים זה בסדר גמור וגם לא יהיה קשה אחרי זה להוציא את זה החוצה.
האמצע של שני הדרכים האלו הוא טבלה אחת במקום השניים, עם ID עיר, ושם קבוצה (ולא ID קבוצה+טבלת קבוצות).@dovid
לא חשבתי באמת על קבוצות חופפות
תודה
אבל לגבי הדרך השניה של ID עיר, ושם קבוצה
אם אני רוצה שיהיה ENUM אז כל פעם שאני מוסיף קבוצה אני צריך להוסיף את זה להגדרות של הENUM בשונה מאם יש טבלה של קבוצות שאז אני רק נותן לקשר לקבוצה קיימת -
נכון, אני לשיטתי שלא להשתמש בENUM, בטח בכזה מקרה.
זה מצויין בשביל לאכוף שלמות, עקביות וכל המילים האלה,
אבל אני כיום מסתכל על מסד נתונים יותר כעל טכניקת שמירה מאשר כעל פרוטוקול אבטחת תוכנה,
ולכן אני חושב שכל מה שמקשה על פיתוח מרכזי של האפלקיציה בקוד, הוא הגדרה "מרגיזה".
ENUM גורם לכך שיצטרכו לשנות במסד גם כשאין שינוי בעיצוב ההתנהגות, ולכן אני פוסל את השימוש בו.
כמו כן לעיתים קרובות במקביל למסד יש התייחסות קשיחה גם בקוד (שהרי הוא צריך לוודא וגם למלא את הנתון)
וממילא יש פה גם פיזור שעומד בסתירה לDRY ולעוד פרנציפ בשם Single Source of Truth.