PDA

View Full Version : طراحی دو جدول استان و شهر



mojtaba.baghban
جمعه 08 مهر 1390, 12:54 عصر
در طراحی دو جدول استان و شهر، دو رابطه صفر یا یک به یک و یک به چند برقرار است. رابطه اول به این خاطر که مرکز هر استان یک شهر است و رابطه دوم به این خاطر که هر استان چند شهر دارد. هر یک از این رابطه ها به تنهایی به راحتی قابل پیاده سازی هستند. ولی برای پیاده سازی هر دو همزمان به مشکل خورده ام. لطفا کمک کنید.
با تشکر

یوسف زالی
جمعه 08 مهر 1390, 14:04 عصر
سلام.
جدوالتون رو به فرم زیر می تونید در نظر بگیرید:

ProvinceID....ProvinceName
---------------------------------

CityID....ProvinceID....CityName....IsCapital
---------------------------------------------------

و در فیلد IsCapital مشخص کنید که اون شهر مرکز هست یا نه.
البته ایرادی که می شه به این ساختار گرفت امکان وجود چند مرکز برای یک استان هست.
اما با گذاشتن فیلد مرکز در جدول استان هم در ساختار دور به وجود میاد.
شما می تونین از طریق UI یا SP یا حتی تریگر این اتفاق رو Handle کنید.

mojtaba.baghban
جمعه 08 مهر 1390, 18:10 عصر
در فیلد IsCapital مشخص کنید که اون شهر مرکز هست یا نه
با استفاده از این ساختار این مشکل هم بوجود میاد که یک استان هیچ مرکزی نداشته باشد. و این مشکل رو هیچ طوری نمی توان حل کرد

یوسف زالی
جمعه 08 مهر 1390, 18:46 عصر
موقعی که دارید استان رو تعریف می کنید می تونید کاربر رو مجبور به ایجاد لااقل یک شهر کنید و یکی از همون شهر ها رو که کاربر می گه به عنوان مرکز دز نظر بگیرید.

mojtaba.baghban
جمعه 08 مهر 1390, 19:04 عصر
موقعی که دارید استان رو تعریف می کنید می تونید کاربر رو مجبور به ایجاد لااقل یک شهر کنید و یکی از همون شهر ها رو که کاربر می گه به عنوان مرکز دز نظر بگیرید.

میشه واضح تر بگید یا اگه میشه با کد توضیح بدین. یعنی راه حل روتین تری برای این مساله وجود نداره

یوسف زالی
جمعه 08 مهر 1390, 19:32 عصر
راستش من راه بهتری الان به نظرم نمی رسه. خودم هم ترجیح می دم تا ممکنه از دور اجتناب کنم.
شما در برنامه ای که می نویسید در هنگام ذخیره استان جدبد تعریف یک شهر رو الزامی کنید.
متاسفانه نمی دونم با چه زبانی می خواهید.
روشی وجود داره به نام Insert Blank که معمولا در این شرایط به کار می آد.
به این صورت:

1- قبل از ورود اطلاعات و به محض ورود به فرم مستر، یک ردیف مستر با اطلاعات پیش فرض, عموما نال یا صفر ایجاد می شه و سریال اون برگشت داده میشه.
2- در فرم مستر جایی برای ورود اطلاعات دیتیل باید یاشه که یک یا چند ردیف داده بشه زد. پدر اونها میشه همون کدی که برگشت داده شده بود.
3- هنگام ذخیره مستر به جای Insert کردن همون ردیفی که Insert شده بود رو Update می کنیم.
4- در صورت انصراف از ذخیره باید دیتیل های مربوطه هم پاک شوند.
5- در هنگام اصلاح مستر دیگه نباید مرحله یک و چهار انجام شه. یا میشه فرم اصلاح رو از فرم Insert جدا طراحی کرد.

این طوری مطمئن هستیم که هر مستری لااقل یک دیتیل داره.
همین وضعیت در باره مثلا فاکتور های فروش هم صدق می کنه.

mojtaba.baghban
جمعه 08 مهر 1390, 20:23 عصر
آیا با گذاشتن فیلد مرکز در جدول استان و استفاده از sp برای insert میشه این مشکل رو حل کرد؟

یوسف زالی
جمعه 08 مهر 1390, 20:36 عصر
این می شه همون دور.
یعنی برای تعریف یک استان باید یک شهر در اون استان داشته باشی و برای تعریف همون شهر هم باید استان رو معین کرده باشی.
مگر اینکه بی خیال Relation ها بشی.

mojtaba.baghban
جمعه 08 مهر 1390, 21:55 عصر
Relation ها رو نمیشه بیخیال شد. ولی آیا واقعا چنین مساله ای مه خیلی جاهای دیگه ممکن پیش بیاد یه راه حل درست درمون نداره

یوسف زالی
جمعه 08 مهر 1390, 23:28 عصر
یکی از راههای درست درمونش رو گفتم خدمتتون.
قرار نیست که راهها همیشه آسون باشه که.
اما باقی راهها رو نمی دونم.
شاید سایر دوستان راه بهتری سراغ داشته باشند.
:متفکر:

mojtaba.baghban
شنبه 09 مهر 1390, 15:33 عصر
ممنون که وقت میذاری واسه کمک به دیگران.
من منظورت از فرم مستر رو نمیفهمم. منظورت فرمهای زبانهای ویژوال است؟
اگر اینطور است یعنی این کار با خود sql قابل پیاده سازی نیست؟

یوسف زالی
شنبه 09 مهر 1390, 16:30 عصر
خواهش می کنم.
منظورم جداول Master - Detail هست که در فرم پیاده می شه.
بالاخره باید از یک جایی داده رو بگیره دیگه.
حالا اگر داده ها رو داشته باشی هرجور دوست داری کار کن. فرقی نمی کنه.