שאלה באפיון data base

שאלה באפיון data base

אני יוצר דטהבייס של תרופות: לכל תרופה יש שם גנרי שאותה קובעת היצרנית, דא עקא ששם התרופה בלבד אינו יכול לשמש כמזהה יחודי משום שישנן תרופות בעלות שם זהה אך מינון שונה או צורת הגשה שונה, דוגמא: אקמולי יש בסירופ ויש בפתילות ובשתי הצורות הללו ישנם גם מינונים שונים. גם צירוף של שם גנרי ומינון והגשה לא יכול להיות primary key משום שישנן תרופות שאי אפשר לכתוב אותן כצירוף של שלושת הגורמים כי יש להן יותר ממרכיב פעיל אחד כמו: אקמול צינון שמכיל גם paracetamol וגם pseudoephdrine. השאלה היא איך לאפיין בכל זאת, אם אפשר את הדטה בייס הזה? תודה!!!! (אני מקוה שהשתמשתי במונחים נכונים...)
 

כלליים

New member
הבה ננסה

מה היית עושה אילו היית שר הבריאות? מן הסתם היית מבקש מהמתכנתים שלך להדביק לכל תרופה איזה ID כלשהוא. נראה לי שאכן כך עשה שר הבריאות, כי לכל תרופה, יש "מס' רשיון תרופה", שאני משער שהוא ייחודי.
 

pitoach

New member
את השאלה הזו עלייך להפנות ללקוח!

אפיון נעשה מול הלקוח בצמוד ומול מי שמבין בתחום וישמתמש באפךיקציה. במקרה הנוכחי אני מניח שמדובר ברופאים ועלייך לוודא את הנושא מול מי שאחראי על האפיון מצד הלקוח ובשום מקרה לא לנחש לפי מצב הרוח שלך או שלנו * מינימום באפיון זה לחקור מעט את המשתמשים. אם אין לך לקוח מקצועי ומדובר למשל בתכנון של מוצר מדף עתידי לפוחות הייתי הולך לחקור אנשים מהתחום הקשור: במקרה שלך כאמור רופאים/רוקחים ובודק בחצי שנייה מה הייחודיות שיש לכל תרופה ** אני מנחש שהתשובה היא כמו שכתב כלליים שיש לכל תרופה מספר אישור + מינון = ייחודיות, אבל אני מדגיש שוב שבשום אופן אסור לעבוד לפי ניחוש במקרים כאלה!
 

0 אור 0

New member
ומוסיפה למה שכתבו מעלי

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

כלליים

New member
בשם אחמד הפסיכי

להלן תוכן מסר שקבלתי. הערה: בכל מקום שכתוב create צ.ל. create. שיניתי כדי שהאתר ירשה להעלות את הקוד. אני שולח מסר כי אני לא מצליח לשלוח תגובה. עד שאתה רוצה שאני אהיה שר בריאות אני עצמי יכול לתת מס' זהות שרירותי לכל תרופה העניין הוא שאני רוצה לחסוך בעבודה, כלומר, אני בונה טבלת שמות גנריים שבה כל שם הוא מזהה ייחודי וזו טבלה בת שדה אחד, אתה יודע מה? אני אפרט את התהליך בצורה מסודרת:
creat table generic_name(generic_name varchar(50) primary key generic_name); creat table hagasha (hagasha varchar(10) primary key hagasha); creat table material (material varchar(10) primary key material); creat table medicins(generic_name varchar(50) ,hagasha varchar(10),material varchar(50),minun varchar(10));​
כפי ראות עיניך אני מעוניין שלאחר שמילאתי את כל הפרטים הייחודיים כל אחד בטבלאתו הוא אני אוכל למלא את טבלת הmedicins מתוך הרשומות הקיימות: איך יוצרים תרופה שחלק מהמרכיבים שלה נצרכים להשלף מתוך רשומה אחרת? ועוד, אם נניח אני רוצה ליצור ממשק משתמש שיאפשר לי לשלוף תרופה רלוונטית, אתה לא מצפה שהרופא יזכור את כל הת.ז. של התרופות... איך אצור רשומה לפי רלוונטיות? (ד"א אני לא עובד בזה על אקסס אלא על (mySql ) ולכן אין לי את הממשק של טפסי משנה וכדו' תודה רבה!!!!!!!! (וטוב שנפגשים מידי פעם.....)
 

כלליים

New member
אם אינני טועה

לכל תרופה יש ברקוד, שמן הסתם מכיל את מספרהּ.
 
ראשית כל אתה גדול מהחיים!

שנית, לא הועלת מאומה כי את המספר זהות אין לי בעיה לתת לבד אבל בממשק משתמש כשרופא ירצה לכתוב מרשם הוא לא אמור לשלוף תרופה ע"פ ID אלא לפי הפרמטרים האחרים: השם המסחרי וההגשה והמינון וכו'. בזמן זה כשאני רוצה לעדכן למשל את הקומבובוקסים לפי התרופה הרלוונטית אני לא יכול להשתמש במס' זהות כי ישנם הרבה רלוונטיים. הבעיה תיווצר כשאני ארצה לתת לו לבחור בין רשימה של קבוצת חומר-מינון ואז אני צריך לדעת האם הקבוצה מכילה תרופה חד חומרית או רב חומרית ולפי זה לתזז אותו. אני מקוה שהובנתי כי אני עצמי לא מבין את עצמי מפה (בהתאם לכך אני חושב לשנות את שמי ל: אחמט התורכי [דווטאוגלו...].
 

pitoach

New member
הבעיה ברורה והכיוון לפתרון שנראה לי כרגע הוא

פשוט שימוש בשאילתה פשוטה עם JOIN של בחירה על מנת למצוא את התרופה שעומדת בכל הפרמטרים שמציין המשתמש "הרוקח" * כל הרעיון הבסיסי הוא שהחיפוש לא יעשה לפי הברקוד אלא לפי התכונות הנוספות שיש לברקוד מסויים. הברקוד ישמש אותנו כמפתח הייחודי שלפיו נבחר את שאר הנתונים למשל אם רוצים למצוא תרופה שיש לה תכונה A וגם תוכנה B וגם תכונה C אז למעשה המטרה למצוא את כל הברקודים שמקימים את התנאי ולכן: נכין שאילתה פשוט שעושה שימוש ב JOIN וביאה לנו את כל האפשרויות שיש. בשאילתה זו מוסיפים את הסינון על ידיד WHERE פשוט בהתאם לתכונות שאתה מחפש. שאילתה זו תיארטית יכולה להחזיר יותר מרשומה אחת בהתאם לפרמטרים של החיפוש וזה בסדר. בכל מקרה אם אתה רוצה סינון תמיד לתשובה אחת אז רק מוסיפים TOP 1 (או LIMIT במקרה של MYSQL) בכל מקרה הייתי בונה DDL שונה ככל הנראה בהנחה שכפי שנאמר שלכל תרופה יש מספר ברקוד ולכן: 1. טבלה ראשונה שעליה מתבססים צריכה להיות טבלה המכילה רק את הנתונים הייחודיים לברקוד מסויים. למעשה הייתי שוכח את המילה תרופה שאינה מתאימה כאן מכיוון שאתה לא מכיוון תרופה לפי שם אלא הטרה בסיום למצוא ברקודים שעומדים בפרמטרים של החיפוש. לכן הכל יסתובב המפתח הייחודי המייצג את מה שמחפשים = ברקוד. ייתכן מאוד שטבלה זו תכיל בסופו של דבר רק 2 טורים של "מספר ברקוד" ושל "שם התרופה"... את זה צריך לבדוק לעומק מול האפיון שבונים ולפי הייחודיות של הברקוד המסויים (ייתכן אפילו מצב שיההי רק טור של הברקוד ואפילו השם תחליט להעביר לטבלה התכונות מפני שאחרי הכל השם כול להיות משותף לכמה ברקודים שונים... החלטה שלך האפיון). * אם אתה עובד ב OOP אז ניתן לראות בטבלה זו כטבלה שלמעשה מחזיקה רשומה עבור כל אובייקט/מופע/instance של "ברקוד". זהוא אובייקט האב ממנו נגזור את כל שאר האובייקטים ** מאוד דומה למערכת חנות וירטואלית לכל דבר 2. נייצר טבלאות עבור תכונות נוספות (ניתן לעשות שימוש בטבלה נוספת אחת שמחזיקה את כל התכונות נוספות או מספר טבלאות לפי האפיון) * בהקבלה ל OOP חלק זה מגדיר למעשה רשומות שהן מופעים של מחלקה שנגזרת ממחלקת הברקוד שבנינו קודם. ז"א כל התרופות הן נגזרות של מחלקת ברקוד כאשר לתרופה יש תכונות נוספות בדיוק כמו שבכל ההדגמות כאמור בכל חיפוש הייתי מבצע חיפוש על הברקוד ואליו מצמיד את התכונות האפשריות ככל הנראה בעזרת LEFT JOIN מכל טבלאות התכונות ומבצע סינון כמובן לחיפוש... *** המבנה של ה DDL שלך לא ברור לי לחלוטין וצריך להיות ברור למי שאפיין ובחר במבנה כזה. לא קודם בונים טבלאות ואז מתכננים ומאפיינים אלא הפוך
ואם ה DDL נראה לך טוב כדאי שתסביר את הטבלאות והקשרים בינן כי זה לא מופיע בשאילתת ה DDL שלך (אין לך בכלל קשרים בין הטבלאות מה שהופך את זה למשהו לא ברור וחסר כל הגיון כרגע לטעמי) **** אני מקווה שההסבר הארוך מובן הנקודה המרכזית בכל הדיון היא שחייב להיות לך אלנמט יחודי (למשל "ברקוד") שהוא הבסיס לכל מה שמחפשים לקבל. את החיפוש מבצעים לפי התכונות ואת התוצאות מקבלים לפי הנתון הייחודי
 

כלליים

New member
שתי הערות

א. לא ידוע לי שמינון הוא מאפיין-מזהה של התרופה. בתרופות רבות אין שום מינון מומלץ. ב. לדעתי, המפתח הראשי יכול להיות ההרכב הכימי של התרופה + צורת התרופה. ולמה אני אומר את זה? כי קבלתי מרשם, שבו תחת 'שם התרופה' היה כתוב הרכבה הכימי, ותחת 'שמות החלופות' היו השמות המסחריים. כאשר ההרכב הכימי מורכב מכמה מרכיבים, ניתן לכתוב זאת או באמצעות מחרוזת אחת ארוכה, או באמצעות טבלת 'מרכיבים כימיים' שבינה לטבלת התרופות יהיה יחס של רבים-לרבים.
 
כשאני כותב מינון אני מתכוון

1. לכמות הרכב כימי בכל גלולה\100ML. 2. כנראה שגם אתה מבוטח במכבי.... 3. מחרוזת ארוכה היא דבר לא כ"כ הגיוני אני חושב במיוחד לאור העובדה שאז אתה מפסיד את אחד מהחוקים החשובים של מסד נתונים יחסי והוא: אי תלות בנתונים ובממשק, כאן אתה חייב מפענח מחרוזת שזו בעצם פונקציא מסויימת שעושה את ההפרדה למיני מחרוזות. אני יודע לאיש אקסס מובהק כמוך זה לא כ"כ נוגע כי באקסס הממשק אינו מופרד מהנתונים אבל כבר הדגשתי שאני עובד על MYSQL. 4. שוב פעם תודה לך ולכל המסייעים תבורכו מן השמיים!! (צום קל)
 
למעלה