ווטסאפ - לינוקס, BSD, קוד פתוח ותוכנה חופשית בעברית. Whatsup - Linux, BSD, open source and free software in Hebrew

 
 
  כניסת חברים · רישום · שכחתי סיסמה  
tux the penguin
תגובה לנושא
צפיה בנושא הבא Printable version התחבר כדי לבדוק הודעות פרטיות צפיה בנושא הקודם
ברנשלא בפורום כעת ת.הצטרפות: 25/02/2002 · הודעות: 720 ·
 

הודעה פורסם: 05/12/2018 - 17:05
נושא ההודעה: תכנון טבלא עבור sqlite

יש לי אלמנט כלשהו, שאחד השדות בו הוא מערך.

דוגמה כjson:
קוד:

{
    "id":111,
    "array_field":["aaa","bbb","ccc","ddd"],
    "another_field":"string"
}


אצטרך "לשלוף" את האוביקט מתוך הטבלא, בין השאר ע"י השאלה "האם יש חפיפה בין המערך array_field ובין מערך ערכים שאני מעביר לפונקציה".

מה הדרך הנכונה לתכנן את מבנה הטבלא? ואיך לעזאזל אפשר להגיש כזו שאילתה? (אני יודע שאפשר לפצל את האוביקט לדוגמה, ובסוף לאחד, או להגיש "ערימת שאילתות" כדי למצוא את החפיפה...).
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
eאורח · ·
 

הודעה פורסם: 05/12/2018 - 18:10
נושא ההודעה:

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

בשנים האחרונות נוספו בחלק מבסיסי הנתונים פונקציות שיודעות לטפל ב-JSON ולבצע פעולות כמו שאתה מבקש, הנה מה שיש ב-sqlite
https://www.sqlite.org/json1.html
מבחינת ביצועים לא ממש ברור לי אם באמת יש אינדקסים על המידע וזה לא סתם table walking ענקי ומאוד איטי
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 05/12/2018 - 19:51
נושא ההודעה:

השאלה הנשאלת האם אתה באמת רוצה לשמור json שלא כפוף לסכמה מסויימת (לשמור document) או שאתה יכול לוודא את הסכמה ואז אתה רוצה לשלוף באמצעות שדות ותתי שדות.
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
ברנשלא בפורום כעת ת.הצטרפות: 25/02/2002 · הודעות: 720 ·
 

הודעה פורסם: 06/12/2018 - 09:15
נושא ההודעה:

כמובן שאני מעדיף שזה יתבצע באופן תקני (ואם מחר ירצו שאחליף לDB אחר?)
Anonymous :
השאלה הנשאלת האם אתה באמת רוצה לשמור json שלא כפוף לסכמה מסויימת (לשמור document) או שאתה יכול לוודא את הסכמה ואז אתה רוצה לשלוף באמצעות שדות ותתי שדות.
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 06/12/2018 - 09:20
נושא ההודעה:

ברנש :
כמובן שאני מעדיף שזה יתבצע באופן תקני (ואם מחר ירצו שאחליף לDB אחר?)
Anonymous :
השאלה הנשאלת האם אתה באמת רוצה לשמור json שלא כפוף לסכמה מסויימת (לשמור document) או שאתה יכול לוודא את הסכמה ואז אתה רוצה לשלוף באמצעות שדות ותתי

שדות.


תקני זה לא מוגדר -

או שאתה מחפש RDBMS ואז אתה יכול לעשות פירוק או שאתה מחפש document (ואז תשמור את ה json עצמו).

אתה צריך לעשות החלטה אם אתה מוודא JSON Schema או לא, אם אתה כן מוודא כל לך לבצע את הפירוק לפי הצורך שלך.
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
ברנשלא בפורום כעת ת.הצטרפות: 25/02/2002 · הודעות: 720 ·
 

הודעה פורסם: 06/12/2018 - 10:05
נושא ההודעה:

יתכן שהסברתי לא נכון.
אני מבצע פירוק של הJSON (נתתי אותו בשאלה הראשונה רק כדי להדגים מבנה נתונים).
ברור לי שעבור חלק מהשדות, מבנה הטבלא הוא:

קוד:
REATE TABLE myTable
(
  id serial NOT NULL,
  another_field character varying(512),
  array_field <WTF to put here?
)


אני מחפש פתרון לא לשמירה של המסמך הjsonי, אלא רק לשדה שהוא מערך מחרוזות, כאשר אצטרך בעתיד לבצע חיפוש לפי מערך אחר שאקבל. אני תוהה מה הדרך הנכונה ביותר לבצע את זה. (תיאורטית - להפוך את המערך למחרוזת, ואז להשתמש בlike על כל ערך במערך לפיו מגישים שאילתה. חנק לDB).
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 06/12/2018 - 10:29
נושא ההודעה:

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

את השליפה אתה מבצע עם תנאי JOIN מתאים.
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 06/12/2018 - 10:31
נושא ההודעה:

אני לא יודע אם לך זה יתאים אבל אני משתמש במקרים כאלה במטבלה שנייה עם מפתח :

wtftoputhere יהיה מפתח (אני משתמש ב md5sum בגלל שאני צריך לאחזר את המידע) בצורה :

קוד:

create table lists (
id varchar ,
index int,
value blob)




זה שזה מתאים לצורך שלי, לא אומר שזה יתאים לצורך המדוייק שלך.
שימוש ב Like במקרה כזה הוא כבד
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
ברנשלא בפורום כעת ת.הצטרפות: 25/02/2002 · הודעות: 720 ·
 

הודעה פורסם: 06/12/2018 - 12:27
נושא ההודעה:

ואיך אתה מנסח את שאילתת השליפה? קודם שולף עם in מהטבלא השנייה, ואח"כ join מותנה על הראשונה? זה לא יוצר עומס?

Anonymous :
אני לא יודע אם לך זה יתאים אבל אני משתמש במקרים כאלה במטבלה שנייה עם מפתח :

wtftoputhere יהיה מפתח (אני משתמש ב md5sum בגלל שאני צריך לאחזר את המידע) בצורה :

קוד:

create table lists (
id varchar ,
index int,
value blob)




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

הודעה פורסם: 09/12/2018 - 09:01
נושא ההודעה:

קוד:

select another_field, value from myTable, mt where mt.id = 1000 and mt.id = lists.index


למה? כי יש לך יותר מרשומה אחת, אז יש natural join ולא left join.

אם רוצים אפשר לעשות את זה בשני שאילתות, האחת לשלוף את ה id וanother_field והשניה לשלוף את הרשומות של הרשימה.
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 09/12/2018 - 09:39
נושא ההודעה:

ברנש :
ואיך אתה מנסח את שאילתת השליפה? קודם שולף עם in מהטבלא השנייה, ואח"כ join מותנה על הראשונה? זה לא יוצר עומס?


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

אתה פשוט מבצע שאילתה שמצבעת join מופרש לפי הצורך (רק תזכור שצריך sqlite3 בשביל blob ושאתה יכול להשתמש רק ב left outer join ולא right / full outer join )


נ.ב. index int זה טעות כי המילה index היא מילה שמורה.
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
הצגת הודעות מלפני:     
מעבר אל:  
כל הזמנים הם GMT + 2 שעות
תגובה לנושא
צפיה בנושא הבא Printable version התחבר כדי לבדוק הודעות פרטיות צפיה בנושא הקודם
PNphpBB2 © 2003-2004 

תוכן הדיון

  1. ברנש
  2. אורח [e]
  3. אורח
  4. ברנש
  5. אורח
  6. ברנש
  7. אורח
  8. אורח
  9. ברנש
  10. אורח
  11. אורח

Google Ads