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

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

הודעה פורסם: 17/05/2009 - 23:45
נושא ההודעה: עבודה עם שדות computed by ב firebird sql

ל firebird sql יש תכונה שאני לפחות, לא מכיר באף מסד נתונים קוד פתוח וזה יצירת שדות computed by.

שדה שהוא computed by הוא שדה שהוא read only ובעצם מחבר תוכן משדות אחרים בטבלה ו כן כל תוכן אחר או נוסף שנרצה לספק לו.

הגדרת שדה כזה פותרת לנו הרבה קוד בשאילתות select למשל.

דוגמה להגדרת טבלאות עם שדה computed by:

קוד:
create table use_computed_by (
  id integer primary key not null,
  Title varchar(10) not null default '',
  First_Name varchar(50) not null,
  Middle_Name varchar(50) default '',
  Last_Name varchar(50) default '',
  Full_Name Computed By (First_Name || ' ' || Middle_Name || ' ' || Last_Name),
  Name_With_Title Computed By (Title || ' ' || Last_Name)
);


עכשיו כאשר נזין את הערכים הבאים:

קוד:
Title: Dr.
First_Name: Theodor
Middle_Name: Seuss
Last_Name: Geisel


ונעשה select על Full_Name, נקבל את הפלט הבא:

קוד:
select Full_Name from use_computed_by;

Full_Name
=======
Theodor Seuss Geisel


כאשר נעשה select על Name_With_Title נקבל את התוצאה הבאה:

קוד:
select Name_With_Title from use_computed_by;

Name_With_Title
===========
Dr. Geisel


במקרה הזה לפחות יש טעות, כי היינו צריכים לקבל את שם העת שלו: ד"ר סוס Smile
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית ביקור באתר המפרסם  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 18/05/2009 - 07:54
נושא ההודעה:

הגזמת זה קיים בכל database שהוא כולל הלא חופשיים שביניהם.

אסף ש.
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
ik_5לא בפורום כעת ת.הצטרפות: 16/04/2002 · הודעות: 3025 · מיקום: ישראל
 

הודעה פורסם: 18/05/2009 - 09:33
נושא ההודעה:

Anonymous :
הגזמת זה קיים בכל database שהוא כולל הלא חופשיים שביניהם.

אסף ש.


לא בתור שדה כחלק מטבלה.

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

ב MySQL (וב PostgreSQL) זה יראה ככה:

קוד:
select concat(First_Name, ' ', Middle_Name, ' ', Last_Name) as Full_Name from use_computed_by;


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

הודעה פורסם: 18/05/2009 - 15:24
נושא ההודעה:

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

אסף ש.
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
ozzyboyלא בפורום כעת ת.הצטרפות: 20/06/2003 · הודעות: 437 ·
 

הודעה פורסם: 18/05/2009 - 16:46
נושא ההודעה:

או לחילופין ליצור trigger על insert\update שמאכלס את השדה החדש. השליפה תהיה מהירה כמו מכל טבלה אך האיכלוס/שינוי של של הטבלה יואט.

מעניין בכמה שליפה מטבלה עם computed by איטית משליפה מטבלה מקבילה ללא שדה כזה בfirebird.
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית ביקור באתר המפרסם  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
ik_5לא בפורום כעת ת.הצטרפות: 16/04/2002 · הודעות: 3025 · מיקום: ישראל
 

הודעה פורסם: 18/05/2009 - 17:24
נושא ההודעה:

ozzyboy :
או לחילופין ליצור trigger על insert\update שמאכלס את השדה החדש. השליפה תהיה מהירה כמו מכל טבלה אך האיכלוס/שינוי של של הטבלה יואט.

מעניין בכמה שליפה מטבלה עם computed by איטית משליפה מטבלה מקבילה ללא שדה כזה בfirebird.


לא כזו איטית. הוא שומר את הערך פעם אחת עד כמה שאני יודע. בגלל זה זה שדה שהוא read only. לעשות את פעולת ה concat ב select או באמצעות שדה, אז הפעולת concat לוקחת יותר זמן ב firebird. ופעולות select רגילה בלי שדה שהוא computed by אלא על שדה שהוזן לבד לוקח זמן זהה (הבדל של פחות מרבע מילי שנייה) לשאוב את הנתונים מהשדה של ה computed by. לפחות בבדיקות שאני עשיתי.

אם אתה ממש לא רוצה לשתמש בזה, אתה יכול לעבוד עם טריגר, stored procedure, uml, view ועוד כמה כלים שיש ולייצר את זה בעצמך, אבל למה לעבוד קשה כשאפשר לא ?
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית ביקור באתר המפרסם  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
ik_5לא בפורום כעת ת.הצטרפות: 16/04/2002 · הודעות: 3025 · מיקום: ישראל
 

הודעה פורסם: 18/05/2009 - 17:37
נושא ההודעה:

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

הודעה פורסם: 14/06/2009 - 14:21
נושא ההודעה: יש דבר הרבה יותר פשוט שאפשר לעשות ב MY ו POSTGRES

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

הודעה פורסם: 14/06/2009 - 15:28
נושא ההודעה: Re: יש דבר הרבה יותר פשוט שאפשר לעשות ב MY ו POSTGRES

shlomisderot :
פשוט מגדירים VIEW ששולף את השם המלא וזה מקל על השליפה יותר בטוח וקל...
אגב, אחת ההגדרות הראשונות של קבוצת ה 4 להגדרת טבלה בצורה נכונה זה שלא יהיו קשרים ואילוצים בין השדות בטבלה, למען האמת הדיון שם הוא על פעולות חשבוניות כגון חישוב ואיכלוס שדה "גיל" ע"פ שדה "תאריך לידה" אבל עדיין, הייתי נמנע מלעשות פעולות כגון אלו


הבעיה ב view היא שהוא לא מהודר ל byte code כלשהו בניגוד ל stored procedure או trigger ולכן אין לך כל רווח בשימוש ב view, לעומת זאת, בפתרון שאני מציג, החישוב מתבצע פעם אחת וזה ב insert, והוא מגיע כבר משלב יצירת הטבלה ככה שלא צריך לעשות משהו יותר מזה, אחרי שיצאת את הטבלה, ולכן לדעתי לפחות זה חוסך לך הרבה כאבי ראש של קוד ושגיאות למינהם, ולכן הוא יותר יעיל לדעתי.
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
הצגת הודעות מלפני:     
מעבר אל:  
כל הזמנים הם GMT + 2 שעות
תגובה לנושא
צפיה בנושא הבא Printable version התחבר כדי לבדוק הודעות פרטיות צפיה בנושא הקודם
PNphpBB2 © 2003-2004 

תוכן הדיון

  1. ik_5
  2. אורח
  3. ik_5
  4. אורח
  5. ozzyboy
  6. ik_5
  7. ik_5
  8. אורח [shlomisderot]
  9. אורח [ik לא מחובר]