2 שאלות על DB בSQL SERVER
היי,
אני מנסה ללמוד התעסקות עם DB בSQL SERVER..נתקלתי ב2 בעיות ואולי תוכלו לסייע לי.
1. יש לי קשר כפול בין 2 טבלאות. אחד הקשרים הוא יחיד לרבים (יש מפתח זר בצד של היחיד) והקשר השני רבים לרבים, שיוצר טבלת קשר עם 2 המפתחות.
אני אביא פה דוגמא קטנה יותר שתמחיש את הבעיה. למשל קיימת טבלת Persons , Class ,Students . בכל כיתה יש מפתח זר של 'מורה' , ובנוסף נוצרת טבלת קשר של סטודנטים בכיתה עם 2 המפתחות.
עכשיו הבעיה היא שאני מעוניין לבצע On Update Cascade גם על המורה , וגם על הסטודנטים. כלומר שעדכון ת.ז של Person יגרור עידכון של שניהם אם צריך.(בפועל הת.ז לא תופיע ב2 הטבלאות במקביל..אבל עדיין אני צריך בשני המקרים Cascade).
ושאני מנסה להריץ את זה אני מקבל שגיאה שקיים מעגל בין הCascades ..איך בכל זאת אפשרי לגרום לעדכון המפתח בשתי הטבלאות?
הנה צרפתי את הקוד ובתחתית מופיעה השגיאה:
CREATE DATABASE [TRYShemen];
GO
USE [TRYShemen]
GO
CREATE TABLE Persons(
ID VARCHAR(50) PRIMARY KEY,
FullName VARCHAR(50) NOT NULL
);
CREATE TABLE Class(
ClassNum VARCHAR(30) PRIMARY KEY,
Teacher VARCHAR(50) NOT NULL,
constraint Class_FK foreign key (Teacher) references Persons (ID) ON DELETE NO ACTION ON UPDATE CASCADE,
);
CREATE TABLE Students(
StudentID VARCHAR(50) ,
ClassNum VARCHAR(30)
constraint Students_PK PRIMARY KEY (StudentID, ClassNum),
constraint Students_FK foreign key (StudentID) references Persons(ID) ON DELETE NO ACTION ON UPDATE CASCADE ,
constraint Students_FK1 foreign key (ClassNum) references Class(ClassNum) ON DELETE NO ACTION ON UPDATE CASCADE
);
Introducing FOREIGN KEY constraint 'Students_FK1' on table 'Students' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
2. שאלה לא קשורה ל1, אבל נניח ויש לי מערכת ואני מעוניין לתת למשתמשים אפשרות לפתוח 'קריאה' ולצרף לה קובץ WORD\PDF ששוקלים בממוצע 1MB. בDB איך כדאי לשמור זאת? האם בתור VARCHAR שמכיל רק את שם הקובץ , ולאחסן אותו בשרת? או שהבנתי שקיימת אפשרות לשמור את הקובץ ישירות בDB משהו עם BLOB.. מה היתרונות /חסרונות של כל אחת מהאופציות?
תודה רבה !!!
היי,
אני מנסה ללמוד התעסקות עם DB בSQL SERVER..נתקלתי ב2 בעיות ואולי תוכלו לסייע לי.
1. יש לי קשר כפול בין 2 טבלאות. אחד הקשרים הוא יחיד לרבים (יש מפתח זר בצד של היחיד) והקשר השני רבים לרבים, שיוצר טבלת קשר עם 2 המפתחות.
אני אביא פה דוגמא קטנה יותר שתמחיש את הבעיה. למשל קיימת טבלת Persons , Class ,Students . בכל כיתה יש מפתח זר של 'מורה' , ובנוסף נוצרת טבלת קשר של סטודנטים בכיתה עם 2 המפתחות.
עכשיו הבעיה היא שאני מעוניין לבצע On Update Cascade גם על המורה , וגם על הסטודנטים. כלומר שעדכון ת.ז של Person יגרור עידכון של שניהם אם צריך.(בפועל הת.ז לא תופיע ב2 הטבלאות במקביל..אבל עדיין אני צריך בשני המקרים Cascade).
ושאני מנסה להריץ את זה אני מקבל שגיאה שקיים מעגל בין הCascades ..איך בכל זאת אפשרי לגרום לעדכון המפתח בשתי הטבלאות?
הנה צרפתי את הקוד ובתחתית מופיעה השגיאה:
CREATE DATABASE [TRYShemen];
GO
USE [TRYShemen]
GO
CREATE TABLE Persons(
ID VARCHAR(50) PRIMARY KEY,
FullName VARCHAR(50) NOT NULL
);
CREATE TABLE Class(
ClassNum VARCHAR(30) PRIMARY KEY,
Teacher VARCHAR(50) NOT NULL,
constraint Class_FK foreign key (Teacher) references Persons (ID) ON DELETE NO ACTION ON UPDATE CASCADE,
);
CREATE TABLE Students(
StudentID VARCHAR(50) ,
ClassNum VARCHAR(30)
constraint Students_PK PRIMARY KEY (StudentID, ClassNum),
constraint Students_FK foreign key (StudentID) references Persons(ID) ON DELETE NO ACTION ON UPDATE CASCADE ,
constraint Students_FK1 foreign key (ClassNum) references Class(ClassNum) ON DELETE NO ACTION ON UPDATE CASCADE
);
Introducing FOREIGN KEY constraint 'Students_FK1' on table 'Students' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
2. שאלה לא קשורה ל1, אבל נניח ויש לי מערכת ואני מעוניין לתת למשתמשים אפשרות לפתוח 'קריאה' ולצרף לה קובץ WORD\PDF ששוקלים בממוצע 1MB. בDB איך כדאי לשמור זאת? האם בתור VARCHAR שמכיל רק את שם הקובץ , ולאחסן אותו בשרת? או שהבנתי שקיימת אפשרות לשמור את הקובץ ישירות בDB משהו עם BLOB.. מה היתרונות /חסרונות של כל אחת מהאופציות?
תודה רבה !!!