אני אומנם רחוק מלהיות DBA אבל תמיד אני חושב על מה הדרך הכי נוחה עם הכי פחות וויתורים על אופטימיזציה כדי לתחזק את הנתונים שלי.במקרה שלך יש לך פה יחס שרחוב x יכול להיות ביותר מעיר אחת, וזה מתחלק למספר פתרונות, אחד מהם
city_id
city_title
street_id
street_city_id
street_title
זה גם יכול להיות אחלה אם אתה מחזיק נקודות ציון של כל רחוב (קורדינאטות או כל מיני מידע שספציפי לאותו רחוב) אז רשומה נפרדת לכל רחוב יכולה להיות מצויינת.
פתרון אחר יכול להיות להחזיק שדה במקום street_city_id קבוצה של איברים מופרדים בפסיק שיכילו באיזה ערים אותו רחוב מופיע ואז באמצעות IN/NOT IN אתה מבצע שליפות.
חסרון עיקרי הוא עדכון/מחיקה של איבר מהשדה הזה, לא אופטימלי בכלל.
פתרון נוסף הוא להחזיק טבלה שלישית, שתהיה סוג של טבלה מקשרת בין עיר לרחוב, זה שדרוג של הפתרון הראשון, אתה מחזיק טבלה מהסוג הזה:
city_related_streets
ומחזיק שם את הרשומות הכפולות של עיר->רחוב (רק לפי המפתחות).