ورود

View Full Version : با فیلد هایی که فقط حافظه اشغال میکنن چیکار کنیم؟



vbapr2005
دوشنبه 14 شهریور 1384, 02:33 صبح
من یه دیتابیس کتاب درست کردم.
یه کتاب میتونه چند تا نویسنده داشته باشه(من حداکثر 10 تا درنظر گرفتم). البته توی جدول Book علاوه بر Author1 ID, Author2 ID ... to Author10 ID یه فیلد دیگه به نام Number Of Authors گذاشتم. میخوام فقط به اندازه ی Number OF Authors نویسنده داشته باشم یعنی وقتی کاربر مثلا 2 نویسنده رو برای کتاب مورد نظر اعلام کرد، 8 تا فیلد دیگه جا نگیرن و حافظه ای اشغال نکنن.
علاوه بر این من 5 تا هم مترجم بعلاوه ی Number of translators و دیگه Is translated هم ایجاد کردم که وقتی Is translated مقدارش No باشه میخوام اون 6 تا فیلد دیگه حافظه اشغال نکنن.
همونطوری که میدونید اگه نخوام این کار رو بکنم با توجه به این که خیلی از کتابها اصلا مترجم ندارن و خیلی ها هم فقط یه نویسنده دارن خیلی فضای اضافی برای بقیه گرفته میشه.
حالا لطفا من رو راهنمایی کنید یا اگه میشه پیشنهاد بهتری بدید.
خیلی ممنون

PalizeSoftware
دوشنبه 14 شهریور 1384, 02:58 صبح
دوست عزیز راههای زیادی هست.
اگه من بودم یه فیلد برای نام نویسندگان و یک فیلد هم برای نام مترجمین معرفی می‌کردم و اونها رو قالب خاصی می‌دادم. فرض کنید که فیلد Author‌ برای نام نویسندگان باشه. بدین منظور برای معرفی نویسندگان و تفکیک هر نویسنده از علامت # استفاده می‌کردم. مثلا:
علی مردای کرمانی#جواد مرتضوی#عیسی محمودی

البته در نمایش اطلاعات کد بیشتری رو باید بنویسید که اونها رو از هم تفکیک کنه که خب کار مشکلی نیست. فرض کنید بخواهید لیست نویسندگان رو توی تکست‌باکس بصورت ردیفی نمایش بدید کافیه با استفاده از تابع Replace کاراکتر # رو به کاراکتر vbCrLf‌ تبدیل کنی و نمایش بدی(در حالت MultiLine).
در عملیات جستجو هم راحت‌تر می‌تونی عمل جستجو رو در بانک انجام بدی. با استفاده از Like
من نظیر این رو در یکی از پروژه‌هام استفاده کردم.
اگه سوالی بود بفرمائید.
موفق باشید

vbapr2005
دوشنبه 14 شهریور 1384, 03:04 صبح
خیلی خیلی ممنون PalizeSoftware عزیز. به همین سادگی (البته برای شما ساده است!!!) یه مشکل بزرگ رو برای من حل کردی.
واقعا متشکرم.

محمدحسام
دوشنبه 14 شهریور 1384, 08:07 صبح
اگر فیلد شما از نوع string باشد و محتوای آن Null باشد فضایی را اشغال نمیکند.

vbapr2005
دوشنبه 14 شهریور 1384, 12:02 عصر
واقعا؟ خیلی ممنون

Navid7h
جمعه 18 شهریور 1384, 20:58 عصر
شما میخواهید یک رابطه One-To-Many رو پیاده کنید.
شما میتونید یک جدول دیگه درست کنید و در آن Book Id کتاب و نام نویسنده را درج کنید
حال با Jion کردن جداول متونید اطلاعات هر کتاب و نویسنده رو پیدا کنید .
برای اطلاعات بیشتر یه جستجو راجع به مبحث Database Normalizationانجام بدین

این فایل هم ممکنه بدرد بخوره از تاپیک زیر Doenload کنید:
http://www.barnamenevis.org/forum/showthread.php?t=27847

قسمت Normalizing رو مطالعه کنید

امیدوارم بدرتون بخوره
شاد باشید

vbapr2005
شنبه 19 شهریور 1384, 01:20 صبح
آقا نوید خیلی ممنون
میدونم اگه چندتا نویسنده رو تو یدونه فیلد قرار بدیم با قانون اول Normalization تناقض داره. اما ابنجا چه مشکلی برای ما درست می کنه؟
راستی در ساختن جدول ها این کاری رو که گفتی کردم.

Navid7h
شنبه 19 شهریور 1384, 02:23 صبح
میدونم اگه چندتا نویسنده رو تو یدونه فیلد قرار بدیم با قانون اول Normalization تناقض داره

منظور من این نبود !
منظورم این بود برای جلوگیری از فضای خالی بجای اینکه یه تخمینی بزنی و 10 تا فیلد بزاری از یه جدول Child استفاده کن
فکر کن اگر کتابی 11 نویسنده داشت !!!

vbapr2005
شنبه 19 شهریور 1384, 02:39 صبح
آها، ا....... راستشو بخوای..............
من تا حالا اصلا نمیدونستم جدول child ای هم وجودداره :گیج: :لبخند:
شرمنده ام. اما یه نموره اینو هم زحمتشو بکش :لبخند: :بامزه:

PalizeSoftware
شنبه 19 شهریور 1384, 03:38 صبح
سلام
منظور دوستون این هست که بجای اینکه 10 فیلد برای ده نویسنده معرفی کنی، از یه جدول استفاده کن که شامل دو فیلد باشه، یکی کد کتاب و دیگری نام نویسنده. اینجوری اگه یه کتاب 100 تا نویسنده هم داشته باشه، جدول بفرم زیر است. بعنوان مثال برای کتابی با کد 100
100، علی مردانی
100، مرادی کرمانی
100، هوشنگ ابتهاج
...
...
101، نویسنده
101، نویسنده
...
102، دانشمند
...
...

عیب این روش اینه در مواردی که از یک نویسنده چند کتاب داشته باشی، در این جدول نام همان نویسنده بخاطر کد کتابهای مختلف به کرات تکرار می‌شه و افزونگی داره. راهش هم اینه که بجای نام نویسنده از کد نویسنده استفاده کنی و در جدول دیگری نویسنده‌ها رو بهمراه کد معرفی کنی. که خب کار معرفی نویسنده‌ها و اینکه نویسنده‌ای دوبار یا بیشتر توسط کاربر معرفی نشه بحث جدایی هست.
ولی خب من همون روش پیشنهادی خودم رو برای تفکیک نام نویسنده‌ها از هم پیشنهاد می‌کنم (نه بخاطر حذف فضا) بلکه بخاطر مدیریت بهتر و سادگی برنامه و طبعا دستورات جستجویی که از بانک استفاده می‌شه.
انتخاب با شماست.
موفق باشید

vbapr2005
شنبه 19 شهریور 1384, 04:03 صبح
خوندمش. ممنون