armm1388
شنبه 07 اردیبهشت 1392, 12:23 عصر
با سلام
ديتابيسي داريم شامل چهار جدول (سه جدول مستر و يک جدول ديتيل حاوي اطلاعات روزانه)
جدول مستر a داراي دو فيلد است:
a_code (Primary Key)
a_name
جدول مستر b1 داراي سه فيلد است:
a_code (Primary Key)
b1_code (Primary Key)
b1_name
جدول مستر b2 نيز شبيه جدول b1 مي باشد (در يک رده قرار دارند) و داراي سه فيلد است:
a_code (Primary Key)
b2_code (Primary Key)
b2_name
جدول ديتيل C داراي پنج فيلد است:
a_code (Primary Key)
b1_code (Primary Key)
b2_code (Primary Key)
C_code (Primary Key)
C_name
a_code در جدول a کليد اصلي و در جداول b1 و b2 کليد خارجي است و b1_code و b2_code در جداول خودشان بخشي از کليد اصلي و در جدول C کليد خارجي اند . حال بين اين جداول Relation برقرار مي کنيم ، بطوريکه جدول C هم به b1 و هم به b2 مرتبط شود و جداول b1 و b2 هر کدام جداگانه به a مرتبط شوند .
از نگاه ديگر : جدول ديتيل C زير مجموعه جداول مستر b1 و b2 بوده و جداول مستر b1 و b2 زير مجموعه جدول مستر a مي باشند. (يعني سطح اول جدول a – سطح دوم جداول b1 و b2 - سطح سوم جدول C باشد)
براي Update فيلدها ، بايد امکان Cascade را برقرار کرد.
سوال اول :
نکته اي که وجود دارد اين است که جدول C که به دو جدول b1 و b2 مرتبط است تنها در يکي از Relation ها امکان Cascade را براي Update مي دهد . و در ديگري error مي دهد.
Error:
'b2' table saved successfully
'c' table
- Unable to create Relationship 'FK_c_b2'.
Introducing FOREIGN KEY constraint 'FK_c_b2' on table 'c' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Could not create constraint. See previous errors.
سوال دوم :
فيلدهاي کد که کليد اصلي هستند (همانند a_code) از ديد کاربر مخفي است و با اضافه شدن فيلد جديد خودبخود فيلد a_code با افزايش يک واحد براي رکورد جديد توليد مي شود. هنگامي هم که نياز به ويرايش محتويات فيلد a_name داشته باشيم فيلد a_code نياز به تغيير نخواهد داشت . پس ديگر هيچ لزومي به Cascade کردن Update به جداول زيرين نداريم . حتينيازيبه برقراري Relation هم نداريم . پس اگر ساختار بانک ما به اين نحو باشد که لزومي به Relationو Cascade نداشته باشد آيا طراحي بانک ما اصولي است؟
سوال سوم :
در اين جدول ها فيلد کد را در کنار فيلد نام اضافه کرده ايم و آنرا کليد تعريف کرده ايم . با توجه به اينکه فيلد نام به تنهايي منظور ما را برآورده مي سازد و مي تواند خودش کليد هم باشد، آيا افزودن فيلد مازادي بنام کد ،خلاف استاندارد نرمال سازي نيست؟
با تشکر فراوان
ديتابيسي داريم شامل چهار جدول (سه جدول مستر و يک جدول ديتيل حاوي اطلاعات روزانه)
جدول مستر a داراي دو فيلد است:
a_code (Primary Key)
a_name
جدول مستر b1 داراي سه فيلد است:
a_code (Primary Key)
b1_code (Primary Key)
b1_name
جدول مستر b2 نيز شبيه جدول b1 مي باشد (در يک رده قرار دارند) و داراي سه فيلد است:
a_code (Primary Key)
b2_code (Primary Key)
b2_name
جدول ديتيل C داراي پنج فيلد است:
a_code (Primary Key)
b1_code (Primary Key)
b2_code (Primary Key)
C_code (Primary Key)
C_name
a_code در جدول a کليد اصلي و در جداول b1 و b2 کليد خارجي است و b1_code و b2_code در جداول خودشان بخشي از کليد اصلي و در جدول C کليد خارجي اند . حال بين اين جداول Relation برقرار مي کنيم ، بطوريکه جدول C هم به b1 و هم به b2 مرتبط شود و جداول b1 و b2 هر کدام جداگانه به a مرتبط شوند .
از نگاه ديگر : جدول ديتيل C زير مجموعه جداول مستر b1 و b2 بوده و جداول مستر b1 و b2 زير مجموعه جدول مستر a مي باشند. (يعني سطح اول جدول a – سطح دوم جداول b1 و b2 - سطح سوم جدول C باشد)
براي Update فيلدها ، بايد امکان Cascade را برقرار کرد.
سوال اول :
نکته اي که وجود دارد اين است که جدول C که به دو جدول b1 و b2 مرتبط است تنها در يکي از Relation ها امکان Cascade را براي Update مي دهد . و در ديگري error مي دهد.
Error:
'b2' table saved successfully
'c' table
- Unable to create Relationship 'FK_c_b2'.
Introducing FOREIGN KEY constraint 'FK_c_b2' on table 'c' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Could not create constraint. See previous errors.
سوال دوم :
فيلدهاي کد که کليد اصلي هستند (همانند a_code) از ديد کاربر مخفي است و با اضافه شدن فيلد جديد خودبخود فيلد a_code با افزايش يک واحد براي رکورد جديد توليد مي شود. هنگامي هم که نياز به ويرايش محتويات فيلد a_name داشته باشيم فيلد a_code نياز به تغيير نخواهد داشت . پس ديگر هيچ لزومي به Cascade کردن Update به جداول زيرين نداريم . حتينيازيبه برقراري Relation هم نداريم . پس اگر ساختار بانک ما به اين نحو باشد که لزومي به Relationو Cascade نداشته باشد آيا طراحي بانک ما اصولي است؟
سوال سوم :
در اين جدول ها فيلد کد را در کنار فيلد نام اضافه کرده ايم و آنرا کليد تعريف کرده ايم . با توجه به اينکه فيلد نام به تنهايي منظور ما را برآورده مي سازد و مي تواند خودش کليد هم باشد، آيا افزودن فيلد مازادي بنام کد ،خلاف استاندارد نرمال سازي نيست؟
با تشکر فراوان