mssql - איך לנהל/לרשום 'זיהוי לקבוצת רשומות' בצורה נכונה
-
צד לקוח: אנגולר
צד שרת: node.js
מסד נתונים: mssqlרקע:
יש לי מעבדת מחשבים / נגרייה (דוגמא, כן...)
בקומפוננטה להוספת הצעת מחיר לעבודה (כל עבודה הינה מפרט שונה ויחודי בפני עצמה, והינה 'רשומה' בפני עצמה)
מתאפשר לבצע הוספה של הצעת מחיר בודדת או כמה ביחדהיות ואני מעוניין לאפשר הצגה של כל ההצעות מחיר שהתבקשו ביחד (ע"מ לאפשר השוואה בין מפרטים/מחירים)
אני צריך להוסיף עמודה בטבלת ההצעות מחיר
של זיהוי 'הקבוצה' שהגיעה ביחד
(מושכל ראשון, יתכן שלא?)השאלה:
איך לנהל את רישום המזהה היחודי לקבוצה בצורה נכונהאפשרות א:
להוסיף טבלת של 'קבוצת הצעת מחיר' (מזהה, כמות הצעות, תאריך)
וכל פעם להוסיף שם רשומה, ולהכניס את המזהה לטבלת הצעות מחיר
זה נראה לי טיפה מיותר לשמור ולנהל טבלה כזאת שאין לה כל ערך ושימוש מעבר להפקה חד פעמית של מזההאפשרות ב:
להוסיף עמודה פשוטה מסוגINT
בטבלת הצעות מחיר
לבדוק כל פעם מה הערך הכי גבוה בעמודת המזהה קבוצה
ולהוסיף לו 1
(ואז מה יקרה כאשר שני משתמשים מוסיפים הצעות מחיר?
כי הפונקציה בצד שרת היא
קבלת המערך, מעבר בלולאה על המערך, והוספה לטבלה,
כך שאת המזהה קבוצה עלי לקבל לפני הכניסה ללולאה, כי זה גם פעולה יחידה ברמת מערך, וגם אם אבדוק באמצע הלולאה, זה עלול להשתנות)אפשרות ג:
לעשות פונקציה שתחזיר לי מזהה רנדומלי של 16 תווים
ואותו להכניס כמזהה
(מרגיש לי לא נכון, להסביר למה? לא צריך)אפשרות ד:
? -
כל האפשרויות נכונות בהתאם לצורך.
פה, החלק שלא הכי נהיר לי זה הקשר בין ההצעות מחיר. הרי יש מהות לקשר הזה, זה יכול להיות זמן, זה יכול להיות זמן + יוזר, זה יכול להיות בכלל משהו מהותי יותר, ואז יש אפילו מצב שבמשך הזמן יתעורר לך צורך להוסיף מאפיינים נוספים לקבוצה שזה ממש נותן לגיטימציה לאפשרות א.
אם למשל הקשר הוא המציע+הזמן, למה שזו לא תהיה עמודה/ות שיהוו מזהה? אפשר גם להפוך את המידע הזה למזהה באפליקציה, למשל להוציא מזה גיבוב MD5 וכדומה.
אפשרות ב' היא הכי פחות מעניינת. את הבעיה של הבו זמניות ניתן לפתור בקלות על ידי משפט מתאים של SQL (שימוש בטרנזקציה ונעילת טבלה).
אפשרות ג' היא סופר לגיטימית אבל לא עם RANDOM אלא עם GUID. בעוד במספר אקראי יש אפשרות (זניחה עד אפסית) של שני מזהים שונים, בGUID יש גם את התאריך מלבד האקראיות, ולכן זה ייחודי ברמה גבוהה. זה גם מקובל מאוד לשימוש וגם נתמך מובנה בC# וגם בSQL SERVER. -
@dovid
יישמתי את המלצתך
השתמשתי בUUID (כאמור צד שרת: node.js)לגבי הקשר בין ההצעות מחיר
המהות בשלב הראשוני הינה פשוטה
הלקוח אמור לבחור הצעת מחיר אחת מתוך כמה שהוא קיבל
(הלקוח רוצה לרכוש מטבח אחד, מתוך מבחר ההצעות מחיר שהצענו)והצורך הוא גם להציג למזכירה את כל ההצעות הרלוונטיות מול הלקוח,
וגם שכאשר הוא מאשר הצעת אחת, לסמן את השאר כלא רלוונטיותבמידה והלקוח מעוניין בהצעות מחיר נוספות
אני כמובן יכול לשייך אותם לאותו UUID במקום ליצור חדש -
@mekev כתב בmssql - איך לנהל/לרשום 'זיהוי לקבוצת רשומות' בצורה נכונה:
השתמשתי בUUID (כאמור צד שרת: node.js)
כמו שכתוב בדף הספריה, אתה יכול להשתמש ב crypto.randomUUID שמובנה בnodejs