1 236363 מערכות מסדי נתונים 4. התחשיב הרלציוני שקפים:אלדר...
Post on 20-Dec-2015
250 views
TRANSCRIPT
1
236363מערכות מסדי נתונים
. התחשיב הרלציוני4
אלדר פישרשקפים:
2
אלגברה רלציונית ותחשיב רלציונישאילתות הנתונות באלגברה רלציונית הן נוחות יחסית למימוש כתוכנית מחשב, אולם התרגום של שאילתה הנתונה בשפה
( לאלגברה רלציונית אינו אינטואיטיבי.SQLטבעית )או בשפת
DRC )Domain Relational בשפת התחשיב הרלציוניCalculus( ובווריאנט שלה TRC )Tuple Relational Calculus( תנאי השאילתה ניתנים כביטוי בלוגיקה מסדר ,
ראשון, הדומה יותר לצורת החשיבה האנושית בכל הנוגע לניסוחן של שאילתות )בניגוד לאופי ה"אלגוריתמי" של
האלגברה הרלציונית(.
3
הרעיון הכלליתחשיב רלציוני מאפשר ליצור (DRCהתחשיב הרלציוני מבוסס התחומים )
ביטויים המתארים תכונות של ישויות. לכל ביטוי כזה יהיו משתנים חופשיים )הדרך לזיהוים תוגדר בהמשך( המייצגים
יתאר ))x1,...,xnאת הקשר שלו עם העולם מסביבו. הסימון בהתאמה.x1,...,xn שמשתניו החופשיים הם ביטוי
מתארים תכונות של ישות. לכל המשתנים החופשיים של , x1,...,xn עבור המשתנים 1,...,nסדרת ערכים אפשרית
מתקיים", או ))1,..., n או " מחזיר ערך אמת הביטוי ")1,..., n(."אינו מתקיים
R[A1,...,An] = {<x1,...,xn> : )x1,...,xn(} הסימוןמסמן את הרלציה המכילה בדיוק את כל האוביקטים האפשריים אשר סדרות הערכים שלהם מקיימות את
)x1,...,xn(.
4
DRCנוסחאות אטומיות ב- כל נוסחת הנוסחאות הבאות הן הנוסחאות הפשוטות ביותר בשפה
DRC.מורכבת מביטוי לוגי המשתמש בנוסחאות אלו
רלציה השמורה במסד R[A1,...,An] אם נוסחאות שייכות: n" היא נוסחא אטומית עם )R)x1,...,xnהנתונים, אז הנוסחא "
)R)1,...,n של ערכים, 1,...,nמשתנים חופשיים. לכל סדרה מתקיימת אם ורק אם יש אובייקט ברלציה שאלו הן התכונות שלו.
נעשית באמצעות השוואה בין משתנים או בין קבועים ומשתנים:". המשתנים z = 2" או "x < yסימני היחס הרגילים. למשל "
החופשיים של נוסחא כזו הם אלו המופעים בהשוואה.
"( עבור לפעמים נאפשר שימוש בסימני יחס נוספים )למשל "משתנים בעלי תחומים מתאימים )למשל קבוצות(.
5
פעולות בוליאניותהרכבת ביטויים הוא ביטוי חוקי עם המשתנים החופשים ))x1,...,xn אם שלילה:
x1,...,xn אז גם הביטוי , המוגדר ע"י )x1,...,xn(=)x1,...,xn( הוא ביטוי חוקי עם אותם משתנים חופשיים.
מתקיים אם ))1,..., nמשמעותו: לכל סדרת ערכים אפשרית, אינו מתקיים.))1,..., nורק אם
הם ביטויים )x1,...,xn(2 ו- )1)x1,...,xn אם (:disjunctionאיחוד ) הוא ביטוי ))x1,...,xn(=1)x1,...,xn(2)x1,...,xnחוקיים, אז
מתקיים 2 מתקיים או 1המתקיים לכל סדרת ערכים שעבורה )או שניהם מתקיימים(.
הם משתנים חופשיים בו. x1,...,xn רק חלק מ-2 או 1יתכן שעבור ניתן "להצהיר" עבור ביטוי על משתנים חופשיים שאינם מופיעים
בו במפורש, כך שדבר זה אינו מהווה בעיה עבור האיחוד.
6
פעולות בוליאניות נוספות מתקיים )1)x1,...,xn(2)x1,...,xn הביטוי (:conjunctionחיתוך )
אם ורק אם גם x1,...,xnעבור סדרת ערכים של המשתנים 1)x1,...,xn( וגם 2)x1,...,xn(.מתקיימים עבורה
)))))1)x1,...,xn(()2)x1,...,xnשקול לביטוי: הסוגריים בביטוי מתארים את סדר הרכבת הביטוי כאשר זה
אינו ברור מראש.
. שקול לביטוי)1)x1,...,xn(2)x1,...,xn הביטוי גרירה:((1)x1,...,xn())2)x1,...,xn(().
. שקול לביטוי)1)x1,...,xn(2)x1,...,xn הביטוי שקילות: )2)x1,...,xn(1)x1,...,xn(())1)x1,...,xn(2)x1,...,xn(.
7
(existential הכמת הקיומי )כמתים המוגדר ע"י הוא ביטוי חוקי, אז הביטוי ))x1,...,xnאם
)x2,...,xn(=x1 )x1,...,xn( הוא ביטוי חוקי בעל המשתנים . x2,...,xnהחופשיים
x1 אינו משתנה חופשי של למופעים אפשריים של .x1 מחוץ .))x1,...,xn בתוך x1 אין קשר עם המופע של ל-
מתקיים אם ורק אם קיים ערך ))2,...,nמשמעות הביטוי: 1 עבור המשתנה x1כך ש ,- )1,...,n( .מתקיים
דוגמה: עבור תכונות שתחומיהן הן מספרים טבעיים, הביטוי )x2,x3(=x1 ))x2 > x1( )x1 > x3( יתקיים אם ורק אם x2,x3
הם זוג יורד של מספרים לא-עוקבים.
8
הכמת האוניברסלי כמתים (universal)
המוגדר ע"י, הביטוי ))x1,...,xnעבור ביטוי )x2,...,xn(=x1 )x1,...,xn( הוא בעל המשמעות הבאה: לכל
מתקיים אם ורק אם ))2,...,n, הביטוי 2,...,nסדרת ערכים .))1,...,n, יתקיים x1 אפשרי עבור המשתנה 1לכל ערך
" היא בעלת x1השאלה מהי "קבוצת כל הערכים האפשריים של חשיבות מכרעת באשר לפירוש הביטוי, וכן באשר לשאלות
מימושו של ביטוי כזה במסד נתונים )שהרי בדיקתה של קבוצה יכולה להיות בעייתית למדי(. כרגע x1אין-סופית של ערכים עבור
נניח שמדובר בקבוצת כל הערכים בתחום התכונה המתאימה לאותו משתנה. אם תחום זה אינו ברור מהנוסחא עצמה אז
נצטרך לציין אותו במפורש.
, בגלל האפשרות בעיה דומה מתקיימת גם עבור הכמת הקיומי שקול )x1 )x1,...,xnלשימוש בסימני שלילה. למעשה הביטוי
.)x1 )x1,...,xnלביטוי
9
דוגמאמשתנים חופשים ומכומתים )))y,z(=)x 1)x,y(()x 2)x,zנסתכל בנוסחא הבאה:
.z ו-yהמשתנים החופשיים של הנוסחא הם ?xמה המעמד של
מופיע פעמיים, מופע אחד שלו מוגבל לאיבר משמאל xהמשתנה . ומכומת שם, ומופע שני מוגבל לאיבר מימין ל- לסימן ה-
מהי משמעות הנוסחא ?
, ולמעשה xאין קשר בין הערכים של שני המופעים של המשתנה .))1)y,z(=)x1 1)x1,y(()x2 2)x2,zהנוסחא שקולה לנוסחא
הרלציה R2[A,C], ו-1 הרלציה המוגדרת ע"י R1[A,B]אם , אז הביטוי ניתן לתרגום לאלגברה רלציונית 2המוגדרת ע"י . ))CR2(BR1)באופן הבא:
, יש לבצע משני צידי סימן ה- xעל מנת לאכוף "תיאום" בין ערכי . ביטוי זה ))1)y,z(=x )1)x,y( 2)x,zאת הכימות באופן הבא:
.)B,C ) R1 ⋈ R2מניב את הרלציה
10
הפעולות הבסיסיות האונריות DRCמימוש ב-
.T[A1,...,An] הוא הביטוי המייצג של ))x1,...,xnנניח ש-
A1,...,Amהרלציה T[A1,...,An] עבור( m < n:תתקבל באופן הבא )
{ <x1,...,xm> : xm+1,...,xn )x1,...,xm,xm+1,...,xn( }
מתאים, ראשית עבור ביטוי T[A1,...,An]על מנת לקבל את
ע"י החלפת את הביטוי המתקבל מ- ))x1,...,xnנסמן ב-
. עתה נשים לב i n 1 לכל xi במשתנה Aiמזהה השדה
שהביטוי המתקבל כך הוא ביטוי בלוגיקה מסדר ראשון,
ושמתקיים:
T = { <x1,...,xn> : )x1,...,xn( )x1,...,xn( }
11
DRCמימוש מכפלה קרטזית ב-
, T1[A1,...,An] הוא הביטוי המייצג של )1)x1,...,xnאם
, T2[B1,...,Bm] הוא הביטוי המייצג של )2)x1,...,xmו-
באופן הבא:DRC ב-T1T2אז אפשר לייצג את
T1T2= { <x1,...,xn,xn+1,...,xn+m> : 1)x1,...,xn(2)xn+1,...,xn+m( }
. 2 ו-1שימו לב שיש להשתמש בקבוצות משתנים זרות עבור
12
DRC מימוש ב-חיסור, איחוד וחיתוך
, T1[A1,...,An] הוא הביטוי המייצג של )1)x1,...,xnאם
, T2[A1,...,An] הביטוי המייצג של )2)x1,...,xnו-
אז ניתן לייצג את פעולות החיסור, האיחוד והחיתוך באופן
הבא:
T1 \ T2 = { <x1,...,xn> : 1)x1,...,xn( 2)x1,...,xn( }
T1T2 = { <x1,...,xn> : 1)x1,...,xn( 2)x1,...,xn( }
T1T2 = { <x1,...,xn> : 1)x1,...,xn( 2)x1,...,xn( }
13
DRCפעולות מרוכבות ו-לפעולות המרוכבות שהוגדרו באלגברה רלציונית על מנת לפשט את
התרגום של שאילתות טבעיות יש גם ביטויים פשוטים יחסית . לדוגמא:DRCב-
, T1[A1,...,An,B1,...,Bm] הביטוי המייצג של )1)x1,...,xn,y1,...,ymאם , T2[B1,...,Bm,C1,...,Ck] הביטוי המייצג של )2)y1,...,ym,z1,...,zkו-
באופן הבא:T2 ו-T1אז ניתן לייצג את הצירוף הטבעי של
T1 ⋈ T2 = { <x1,...,xn,y1,...,ym,z1,...,zk> : 1)x1,...,xn,y1,...,ym( 2)y1,...,ym,z1,...,zk( }
תחת אותן הנחות, את חצי-הצירוף ניתן להציג באופן זה:
T1 ⋉ T2 = { <x1,...,xn,y1,...,ym> : z1,...,zk ) 1)x1,...,xn,y1,...,ym( 2)y1,...,ym,z1,...,zk( ( }
14
הוכחה פורמלית של שקילותנוכיח עתה באופן פורמלי )על מנת להמחיש איך הוכחה כזו
)1)x1,...,xn,y1,...,ym הרלציה המתאימה ל- T1מתבצעת(, שאם , )2)y1,...,ym,z1,...,zkהרלציה המתאימה ל- T2ו-
אז אכן עבור הביטוי
)x1,...,xn,y1,...,ym,z1,...,zk( =1)x1,...,xn,y1,...,ym( 2)y1,...,ym,z1,...,zk(
T1 ⋈ T2 = { <x1,...,zk> : )x1,...,zk( }מתקיים השוויון :
אפשריות, T1,T2לשם כך צריך להראות עבור כל שתי רלציות שמתקיימים שני התנאים הבאים עבור כל סדרת ערכים
t = )1,...,n,1,...,m,1,...,k(
.) ) t אז מתקיים t T1 ⋈ T2אם –
.t T1 ⋈ T2 אז בהכרח ) ) tאם מתקיים –
15
כיוון ראשון
t = )1,...,n,1,...,m,1,...,k( T1 ⋈ T2אם
אז לפי הגדרת הצירוף הטבעי נובע מכך שמתקיים
(1,...,n,1,...,m ) T1 ולכן מתקיים ,1)1,...,n,1,...,m(.
, T2( 1,...,m,1,...,k)כמו כן, מתקיים גם
מתקיים. )2)1,...,m,1,...,kולכן גם
מאלו נובע שמתקיים :
1)1,...,n,1,...,m( 2)1,...,m,1,...,k( =
)1,...,n,1,...,m,1,...,k(
כנדרש.
16
כיוון שני ))t(=1)1,...,n,1,...,m(2)1,...,m,1,...,kאם מתקיים
)1)1,...,n,1,...,m( מתקיים לפי הגדרת סימן ה- (אז
. T1( 1,...,n,1,...,m)ולכן
) 2)1,...,m,1,...,kבדומה לכך מתקיים
. T2( 1,...,m,1,...,k)ולכן
T1 ⋈ T2מקיום השיוכים הנ"ל נובע לפי הגדרת הצירוף הטבעי
שמתקיים
t = )1,...,n,1,...,m,1,...,k( T1 ⋈ T2
כנדרש.
17
שאילתות בוליאניות ללא משתנים חופשיים כלל )אבל DRC הוא ביטוי אם
" יש }{ <> : שמשתמש ברלציות המאגר(, אז לשאילתה "עדיין משמעות.
תוצאת השאילתה תהיה רלציה חסרת תכונות. רלציה זו תהיה אינה מתקיימת עבור תוכן המאגר שלנו, ותכיל את ריקה אם
מתקיימת.השורה הריקה )כשורה יחידה( אם
" לציון שאילתה זו.בד"כ נשתמש בסימון המקוצר "
האם S ו-R השאילתה הבאה בודקת עבור הרלציות דוגמא::R⊆Sמתקיים
x1,...,xn ) R)x1,...,xn( → S)x1,...,xn( (
18
ביטויים בעייתים בתחשיב הרלציוני, נסתכל על הביטוי הבא:R[A]עבור רלציה נתונה
{ <x> : R)x( }
?RAהאם ניתן לכתוב אותו ב-
האם ניתן בכלל לממש אותו כטבלא במסד נתונים ?
ומה ניתן לעשות עם הביטוי הבא ?
{ <x,y> : x=y }
עלינו למצוא דרך להימנע מטבלאות אין-סופיות. הדבר נכון גם לביטויי שאילתות, וגם לתתי הביטויים שלהם.
19
התחשיב הרלציוני הבטוח
נועד להבטיח (Safe-DRCהתחשיב מבוסס התחומים הבטוח )
יכולת מימוש של הביטויים בצורה שאינה נזקקת לסריקה של
תחומים אין-סופיים )לצורך כתיבת הקלט או לצורך חישוב
תוצאה של ביטוי עם כמת(.
אם המבנה שלו מקיים תנאים נוספים בטוח יקרא DRCביטוי
אשר מבטיחים שתוצאתו תהיה תלויה אך ורק בתוכן הרלציות
של המסד, ולא בתחומי הערכים האפשריים של התכונות. לא
השקול לו. Safe-DRC קיים ביטוי DRCלכל ביטוי
ההגדרות והפרטים המלאים הם חומר רשות בסמסטר זה.
20
דוגמא מסכמתתחשיב רלציוני נשווה עתה מספר שאילתות בתחשיב הרלציוני עם השאילתות
המקבילות להן באלגברה הרלציונית.
Arrives
Platform
A_Time D_Time
Station
Height
S_Name
S_Type
ServesKm
Line
Direction
L_Num
L_Type
Train
T_Num
Days
Service
Gives
Food
Class
T_Category
21
הרלציות המשתתפות
מכיוון שבצורת הכתיבה של שאילתות בתחשיב הרלציוני, סדר
המשתנים יכול לשנות את התוצאה המתקבלת, ראשית נקבע
את סדר התכונות לכל רלציה:
Station[S_Name,S_Type,Height] Line[L_Num,Direction,L_Type]
Serves[S_Name,L_Num,Direction,Km]
Train[T_Num,Days] Service[T_Category,Class,Food]
Gives[T_Num,T_Category,Class]
Arrives[T_Num,S_Name,L_Num,Direction,A_Time,D_Time,Platform]
22
DRCדוגמאות לשאילתות ב--דרום ?1אלו תחנות נמצאות על הקו
, נוציא את המידע הנ"ל מתוך הרלציה RAגם כאן, בדומה ל-Serves:השאילתה .
{ <x> : y,z,w ) Serves)x,y,z,w( y=1 z=“south” ( }
לא קשה לראות שבמקרה פשוט זה הביטוי זהה למה שהיה ,RAמתקבל מתרגום ישיר של ביטוי ה-
S_Name ))L_Num=1( )Direction=“south”( )Serves((
עבור ביטויים כאלו נהוג לעיתים להשתמש בסימון מקוצר:
{ <x> : w Serves)x,1,“south”,w( }
23
דוגמא שניהלאלו קווים יש תחנות מתחת לפני הים ?
המהווים זיהוי קו y,zעבור כל זוג ערכים למשתנים (L_Num,Direction שקיימות עבורו תחנות, נדע את זהויות )
כך שמתקיים w עבורם קיים xהתחנות לפי ערכי המשתנה Serves)x,y,z,w(לכן הביטוי המבוקש הוא מהצורה .
{ <y,z> : x,w )Serves)x,y,z,w( )x(( } הוא זיהוי של x הוא הביטוי המתקיים אם ורק אם ))xכאשר
תחנה הנמצאת מתחת לפני הים.
בעל התכונה הנ"ל עבור ערכי האמת שלו הוא:))xביטוי )x( = u,v )Station)x,u,v( )v < 0 ((
ביטוי השאילתה המלא:{ <y,z> : x,w)Serves)x,y,z,w( u,v)Station)x,u,v()v<0((( }
24
דוגמא בכיוון ההפוךמהי משמעות השאילתה הבאה ?
{ <x> : y1,y2,y3 ) Station)y1,y2,y3( z1,z2,z3,z4,z5 )Arrives)x,y1,z1,z2,z3,z4,z5(( ( }
מציין שהרכבת שמספרה z1,z2,z3,z4,z5תת הביטוי עם הכמתים על x עוצרת בתחנה ששמה y1.במסגרת קו, שעות, וכו', כל שהם ,
( מציין y1,y2,y3" )ללא הכמתים על תת הביטוי סביב סימן ה-" היא רכבת העוצרת x מציינים תחנה כל שהיא, אז y1,y2,y3שאם
בה.
הביטוי המלא ייתן את מספרי הרכבות העוצרות בכל התחנות.
איך נכתוב את הביטוי כך שיתחשב רק בתחנות תרגיל למחשבה שיש רכבות העוצרות בהן ?
25
דוגמא מורכבת יותרמהם זוגות הקווים שיש ביניהם תחנת חילוף ?
ראשית נכתוב ביטוי עבור שמות תחנות החילוף:
1)x( = y,z )Station)x,y,z( “change” y(
עם אותה תחנת ”Serves“עתה נתאר זוגות של קווים המופיעים ב-חילוף:
2)u1,v1,u2,v2( = x,w1,w2 )1)x( Serves)x,u1,v1,w1( Serves)x,u2,v2,w2( (
אם נרצה גם לדעת את סוגי הקווים, אז השאילתה המלאה נראית כך:
{ <u1,v1,t1,u2,v2,t2> : Line)u1,v1,t1( Line)u2,v2,t2( 2)u1,v1,u2,v2( }
26
החוזק היחסי של התחשיב הרלציוניהתחשיב הרלציוני הוא חזק לפחות כמו האלגברה הרלציונית,
TRC )והדבר נכון גם עבור DRCמכיוון שכפי שראינו עבור אשר אינו נלמד כחומר חובה בסמסטר זה(, ניתן לתרגם כל
ביטוי באלגברה רלציונית לביטוי בתחשיב הרלציוני.
התחשיב הרלציוני כולל גם ביטויים שאין להם מקבילה באלגברה הרלציונית, אולם ניתן באמצעותו גם לכתוב ביטויים
שאין יכולת לממשם במסד נתונים.
( הם Safe-TRC ,Safe-DRCהתחשיבים הרלציונים הבטוחים )בעלי יכולת ביטוי זהה לזו של האלגברה הרלציונית.
גם בתחשיבים הרלציונים )בטוחים או לא(, לא ניתן לכתוב שאילתות של סגור טרנזיטיבי, כגון "בין אלו תחנות רכבת ניתן
להגיע עם מספר לא מוגבל של חילופים".
27
תחשיב מבוסס שורות – חומר רשות (Tuple Relational Calculusהתחשיב הרלציוני מבוסס השורות )
( בכך שהמשתנים כאן DRCשונה מהתחשיב מבוסס התחומים )מקבלים אוביקט שלם כערך, ולא רק ערך של תכונה בודדת.
בפרט על מנת להגדיר שאילתה המחזירה רלציה, דרוש לנו ביטוי )t( אשר יש לו משתנה חופשי אחד בדיוק )לתתי-ביטויים של
יכולים להיות עוד משתנים חופשיים המכומתים מחוץ לתת הביטוי(.
תחשיב זה הינו חומר רשות בסמסטר זה.
. })t[A1,...,An] : )t{ המבנה הכללי של שאילתה:
, המכיל את כל A1,...,Anשאילתה זו מחזירה יחס עם התכונות
האוביקטים האפשריים מהטיפוס המתואר ע"י תכונות אלו, מתקיים. שעבורם
28
TRCנוסחאות אטומיות ב-עקב ההבדל בהתייחסות למשתנים, הגדרת הנוסחאות האטומיות
.DRC שונה מזו של TRCשל
מהטיפוס של t ומשתנה R[A1,...,An] עבור רלציה שייכות:
היא נוסחא המתקיימת אם ”tR“הרלציה, הנוסחא האטומית .R הוא אוביקט השייך לרלציה tורק אם ערכו של
באופן כללי נשתמש השוואות וסימני יחס אחרים בין תכונות: עבור הישות A על מנת לציין את ערך התכונה ”t[A]“בסימון
מתקיים אם ערך ”t[A]=2“. למשל: tהמהווה את ערכו של מתקיים אם מתקיים היחס ”r[B]<s[C]“. 2 הוא t של Aהתכונה
המתאים בין התכונות המתאימות של ערכי שני המשתנים.
29
TRCנוסחאות מרוכבות ב- TRC )שלילה, חיתוך, גרירה, וכו'( נכתבות ב-הפעולות הבוליאניות
, ויש להן אותו פירוש. לדוגמא, הביטוי DRCבאופן זהה לזה של
1)t1,...,tk( 2)t1,...,tk( מתקיים אם ורק אם גם 1 וגם 2
.t1,...,tkמתקיימים ביחס ל-
מתקיים אם )t1 )t1,...,tkגם נכתבים באופן הצפוי. למשל, כמתים
)בלי קשר לשאלת קיומו באחת t1ורק אם קיים אוביקט אפשרי
הם t2,...,tk )כאשר ))t1,...,tkמרלציות המסד( כך שמתקיים עבורו
המשתנים החופשיים של הביטוי(. עם זאת, יש לזכור שכאן הכימות
הוא על אוביקטים, "שורות שלמות ברלציה", ולא על תכונות
בודדות. כאשר הדבר אינו ברור מההקשר נציין גם את תכונות
)t1[A1,…,An] )t1,...,tkהמשתנה המכומת:
30
TRCדוגמאות לשאילתות ב- השאילתה "אלו TRCעבור דוגמת מפעיל הרכבות, איך תיראה ב-
-דרום " ?1תחנות נמצאות על הקו
{ t[S_Name] : s[S_Name,L_Num,Direction,Km] ) sServes t[S_Name]=s[S_Name] s[L_Num]=1 s[Direction]=“south” ( }
והשאילתה "לאלו קווים יש תחנות מתחת לפני הים" ?
{ t[L_Num,Direction] : r,s )rStation sServes s[L_Num]=t[L_Num] s[Direction]=t[Direction] r[S_Name]=s[S_Name] r[Height]<0 ( }
31
TRC ו-DRCיכולת הביטוי של
, TRC יכולה להיכתב גם ב-DRCכל שאילתה שיכולה להיכתב ב-
קיימת הבעיה של קיום שאילתות TRCולהיפך. בפרט, גם ב-
שלא ניתן לממשן במסד נתונים.
, שאת Safe-TRC יש גרסא מוגבלת, TRC, גם ל-DRCכמו ב-
-Safeהשאילתות שלה מובטח שניתן לממש במסד נתונים. ל-
DRC-ול Safe-TRC אותה יכולת ביטוי כל שאילתה שניתנת
לכתיבה באחת משפות אלו, ניתנת לכתיבה גם בשפה השנייה.