PDA

View Full Version : سوال: تکراری نشدن



Arash_janusV3
یک شنبه 19 مهر 1388, 10:01 صبح
سلام :لبخندساده:
یک سوال عجله ای دارم
در دیتابیسم بک فیلد دارم که مثلا سه تا رکورد داره و هر سه تا یک جمله است مثلا ایران
حالا من میخوام در کومبو باکس سه تا را نشون ندم یکیشا نشون بدم میخوام در کومبو تکراری ها را نشون نده

اَرژنگ
یک شنبه 19 مهر 1388, 11:03 صبح
سلام :لبخندساده:
یک سوال عجله ای دارم
در دیتابیسم بک فیلد دارم که مثلا سه تا رکورد داره و هر سه تا یک جمله است مثلا ایران
حالا من میخوام در کومبو باکس سه تا را نشون ندم یکیشا نشون بدم میخوام در کومبو تکراری ها را نشون نده

۱.به طراحی داتابیس یک نگاه بنداز، به جایه اینکه مقدارها را در داتابیس در تکرار کنید، در یک جدول مقدارها را با آیدیها نگهداری کن، و در این یکی جدول به جایه تکرار مقدار، آیدی را تکرار میکنید. استفاده از روش ForeignKey و Lookup Tableروش درست است.

۲.روش اشتباه ماسمالی که من توصیه نمیکنم و میگم که اول از روش ۱ استفاده کن ، این است که از دستور distinct در select استفاده کنید، ولی این روش برایه حل اساسی مشکل شما اشتباه است، و با استفاده از این روش جلویه پیشرفت خودتان را میگیری. روش ۲ شاید جایه دیگری استفاده‌اش درست باشد، ولی اینجا درست نیست.

Arash_janusV3
یک شنبه 19 مهر 1388, 11:17 صبح
با عرض سلام
آخه چاره ای ندارم
من یک فرم تعریف بانکها را دارم

بانک شعبه شماره حساب
ملی انقلاب 1234555
ملی شهدا 54434455
تجارت شهدا 4454544

حالا بانک و شعبه را combobox گذاشتم و شماره حساب را textbox
من همه را در جدول دیتابیسم ذخیره میکنم ولی میخوام در combo ملی را یک دونه نشون بدم نه دو تا ملی یا شهدا را یک شهدا نشون بدم
اگر لطف میکنید به صورت سورس بهم کمک کنید
متشکرم

اَرژنگ
یک شنبه 19 مهر 1388, 11:37 صبح
با عرض سلام
آخه چاره ای ندارم
من یک فرم تعریف بانکها را دارم

بانک شعبه شماره حساب
ملی انقلاب 1234555
ملی شهدا 54434455
تجارت شهدا 4454544

حالا بانک و شعبه را combobox گذاشتم و شماره حساب را textbox
من همه را در جدول دیتابیسم ذخیره میکنم ولی میخوام در combo ملی را یک دونه نشون بدم نه دو تا ملی یا شهدا را یک شهدا نشون بدم
اگر لطف میکنید به صورت سورس بهم کمک کنید
متشکرم

۱.اسمه فیلدهایه جدول را بفرستید

۲.چرا چاره دارید چاره‌اش این بود که :
یک جدول برایه بانکها :
فیلدها
id, bank
یک جدول برایه شعبه بانکها:

id, bank_id, shobe

و یک جدول برایه اطلاعات شعبه بانکها :

id, bank_id,shobe_id, phone

استفاده کنید، ( استفاده از master detail , look up table)

ولی الان چونکه وقت ندارید عوض نکنید

Arash_janusV3
یک شنبه 19 مهر 1388, 11:51 صبح
متشکرم از توجهتون
من اگر برای هر فیلدم یک جدول بسازم بازم همون مشکل کومبو را دارم
من در دیتابیس مشکلی ندارم در اونجا باید تکراری ذخیره بشه ولی در کومبو که اطلاعات فیلد رو صدا می زنم میخوام آیتم تکراری توش نباشه

اَرژنگ
یک شنبه 19 مهر 1388, 12:06 عصر
متشکرم از توجهتون
من اگر برای هر فیلدم یک جدول بسازم بازم همون مشکل کومبو را دارم
من در دیتابیس مشکلی ندارم در اونجا باید تکراری ذخیره بشه ولی در کومبو که اطلاعات فیلد رو صدا می زنم میخوام آیتم تکراری توش نباشه

۱.اشکال اصلی طراحی داتابیس است، در ظاهر اشکالی ندارید ولی اصل مشکلتان به اونجا بازمیگرده

۲.دلیل اینکه اسمه فیلدها را خواستم برایه این بود که روش ماسمالی که کارتان را اینکه از جدول خراب استفاده میکنید راه بندازه، لطفا اسمه فیلدها را بفرستید که اس‌کیو‌ال را بهتان بگم.

۳. من نگفتم که برایه هرکدام از فیلدها یک کمبو بسازید (ولی به اونجا هم میرسه)، فرض کنید که یکی بانک ملی را انتخواب کرد ، بنا بر این انتخواب کمبو بعدی باید ۲ تا شعبه را نشان بده ولی اگر بانک تجارت را انتخواب کرد باید فقط یک شعبه قابل انتخواب باشد. مگر نه؟

Arash_janusV3
یک شنبه 19 مهر 1388, 12:25 عصر
با سلام مجدد

نه
هر کومبو یک فیلد
و کومبو بانک هیچ ارتباطی به کومبو شعبه نداره
مثلا
اگر در کومبو بانک آیتم ملی را انتخاب کرد در کومبو شعبه همون آیتم های شهدا و انقلاب را مشاهده میکنه
هر کومبو فقط برای خودش ذخیره میشه
سپاسگذارم

اَرژنگ
یک شنبه 19 مهر 1388, 12:55 عصر
با سلام مجدد

نه
هر کومبو یک فیلد
و کومبو بانک هیچ ارتباطی به کومبو شعبه نداره
مثلا
اگر در کومبو بانک آیتم ملی را انتخاب کرد در کومبو شعبه همون آیتم های شهدا و انقلاب را مشاهده میکنه
هر کومبو فقط برای خودش ذخیره میشه
سپاسگذارم



select distinct FieldName from table order by FieldName

این یک فیلد را از جدول میگره و به شکلی که تکرار نشند نمایش میده.
ولی این نوع طراحی داتابیس در برانمه‌نویسی از لحاظ شغلی جایی ندارد، و از طراحی اشتباه استفاده میشه.

Arash_janusV3
یک شنبه 19 مهر 1388, 13:58 عصر
ببخشید آرژنگ
من کامل متوجه استفاده ار این کد را نشدم میشه دقیق تر بگید
ممنون

اَرژنگ
یک شنبه 19 مهر 1388, 14:11 عصر
ببخشید آرژنگ
من کامل متوجه استفاده ار این کد را نشدم میشه دقیق تر بگید
ممنون
شما فیلدی که مقدارهایه تکراری را برمیگرداند را چطوری بدست میارید؟
شما کمبو باکس را چطوری پر میکنید؟

sara.f
یک شنبه 19 مهر 1388, 22:16 عصر
۱.اسمه فیلدهایه جدول را بفرستید

۲.چرا چاره دارید چاره‌اش این بود که :
یک جدول برایه بانکها :
فیلدها
id, bank
یک جدول برایه شعبه بانکها:

id, bank_id, shobe

و یک جدول برایه اطلاعات شعبه بانکها :

id, bank_id,shobe_id, phone

استفاده کنید، ( استفاده از master detail , look up table)

ولی الان چونکه وقت ندارید عوض نکنید
سلام
آره بهتره که فیلدهای جدولشون را بگن.
اما به نظر من تعریف 3 جدول با فیلدهای پیشنهادی شما نیازی نیست.
اگر قصد شما از تعریف 3 جدول، کم کردن Redundancy هست، با تعریف 3 جدول دارید اتفاقا redundancy را افزایش می دید، چون به هر حال مجبورید در جدول شعبه bank_id را تکرار کنید و یک جدول اضافی هم واسه بانک ایجاد کردید.
بهتر اینه که 2 جدول در نظر بگیریم:

1. جدول شعبه با فیلدهای
- ID
- (branch_name)نام شعبه
- (bank_name)نام بانک
- (asset)دارایی

2.جدول شماره حساب
- ID
- (account_number)شماره حساب
- branch_ID
- موجودی(balance)

sara.f
یک شنبه 19 مهر 1388, 22:32 عصر
با سلام مجدد

نه
هر کومبو یک فیلد
و کومبو بانک هیچ ارتباطی به کومبو شعبه نداره
مثلا
اگر در کومبو بانک آیتم ملی را انتخاب کرد در کومبو شعبه همون آیتم های شهدا و انقلاب را مشاهده میکنه
هر کومبو فقط برای خودش ذخیره میشه
سپاسگذارم
سلام

select distinct FieldName from table order by FieldName
کدی که آقای ارژنگ گذاشتند به این صورت هست که:
شما حتما با دستور select اطلاعات را در combo box می ریزید، درسته؟
کافیه این خط کد را به جای آن select معمولی بنویسید
کلمه کلیدی "distinct" رکوردهای تکراری را حذف می کند، یعنی اگر دوتا "ملی" دارید، یک بار فقط آن را می نویسد، البته باید به جای FieldName ، نام فیلد بانک را بذارید.
کلمه کلیدی "order by " هم نتیجه query را بر اساس فیلدی که در order by انتجاب کردید به طور پیش فرض به صورت صعودی نشان می دهد.
یعنی اگر در جلوی order by به جای fieldname نام فیلد بانک را بنویسید به ترتیب حروف الفبا نتیجه را نشان می دهد.

Arash_janusV3
دوشنبه 20 مهر 1388, 11:17 صبح
:تشویق::تشویق::تشویق::تشویق:: شویق:
:تشویق::تشویق::تشویق:
:تشویق:
:تشویق::تشویق::تشویق::تشویق:: شویق:
:تشویق::تشویق::تشویق:
:تشویق:

سلام متشکرم
هم از توضیحاتتون هم ار توجهتون

Arash_janusV3
دوشنبه 20 مهر 1388, 11:19 صبح
سلام
آره بهتره که فیلدهای جدولشون را بگن.
اما به نظر من تعریف 3 جدول با فیلدهای پیشنهادی شما نیازی نیست.
اگر قصد شما از تعریف 3 جدول، کم کردن Redundancy هست، با تعریف 3 جدول دارید اتفاقا redundancy را افزایش می دید، چون به هر حال مجبورید در جدول شعبه bank_id را تکرار کنید و یک جدول اضافی هم واسه بانک ایجاد کردید.
بهتر اینه که 2 جدول در نظر بگیریم:

1. جدول شعبه با فیلدهای
- ID
- (branch_name)نام شعبه
- (bank_name)نام بانک
- (asset)دارایی

2.جدول شماره حساب
- ID
- (account_number)شماره حساب
- branch_ID
- موجودی(balance)




میشه یک مقدار راجب این تکنیک به من توضیح بدید

Arash_janusV3
دوشنبه 20 مهر 1388, 11:21 صبح
میشه خواهش کنم راجب این تکنیک یه مقدار توضیح بدید

اَرژنگ
دوشنبه 20 مهر 1388, 11:30 صبح
میشه خواهش کنم راجب این تکنیک یه مقدار توضیح بدید

شما فیلدی که مقدارهایه تکراری را برمیگرداند را چطوری بدست میارید؟
شما کمبو باکس را چطوری پر میکنید؟

sara.f
دوشنبه 20 مهر 1388, 23:34 عصر
میشه خواهش کنم راجب این تکنیک یه مقدار توضیح بدید

سلام
منظورتون چگونگی تعریف جداول هست یا اون قطعه کد select ؟

saeeedft
سه شنبه 21 مهر 1388, 00:40 صبح
میشه خواهش کنم راجب این تکنیک یه مقدار توضیح بدید
سلام بر همه ی دوستان، جناب آرش خان تکنیک خاصی به کار گرفته نشده ، به خودت سخت نگیر:چشمک: فقط کافیه یه ذره sql بلد باشی تا این قطعه رو بتونی درک کنی، کلمه ی distinc باعث می شود تا مقادیر تکراری ققط یک بار ذکر شود اما برای جدول هاتون شما اگه به صورت زیر عمل کنید
1. جدول شعبه با فیلدهای
- ID
- (branch_name)نام شعبه
- (bank_name)نام بانک
- (asset)دارایی
هیچ فکر کردید که اگه نام یک شعبه و نام بانک مورد نظر به صورت ناخواسته و اشتباها به صورت متشابه وارد شود چه اتفاقی میافتد؟ این به نظر من اشتباه است

saeeedft
سه شنبه 21 مهر 1388, 00:56 صبح
ضمنا شما نوع طراحی و حجم دیتا بیست رو نگاه کن، مگه چند تا داده تو هر جدول میخوای نگهداری کنی که نگران جدول هات هستی ، توی بالا نام بانک چه ربطی به جدول شعبه داره که توی این جدول اومده؟ شما اگه سه جدول هم بگیرید اشکالی نداره، باز هم میگم بسته به نوع طراحیتون هست

Arash_janusV3
سه شنبه 21 مهر 1388, 09:00 صبح
سلام
منظورتون چگونگی تعریف جداول هست یا اون قطعه کد select ؟


با سلام و عرض تشکر
جداول

Arash_janusV3
سه شنبه 21 مهر 1388, 09:03 صبح
ضمنا شما نوع طراحی و حجم دیتا بیست رو نگاه کن، مگه چند تا داده تو هر جدول میخوای نگهداری کنی که نگران جدول هات هستی ، توی بالا نام بانک چه ربطی به جدول شعبه داره که توی این جدول اومده؟ شما اگه سه جدول هم بگیرید اشکالی نداره، باز هم میگم بسته به نوع طراحیتون هست

با سلام به دور اندیشان
اگر در این رابطه کسی نظر بهتری داره به من کمک کنه

اَرژنگ
سه شنبه 21 مهر 1388, 09:07 صبح
با سلام به دور اندیشان
اگر در این رابطه کسی نظر بهتری داره به من کمک کنه

http://barnamenevis.org/forum/showpost.php?p=826045&postcount=18

Arash_janusV3
سه شنبه 21 مهر 1388, 09:33 صبح
سلام بر همه ی دوستان، جناب آرش خان تکنیک خاصی به کار گرفته نشده ، به خودت سخت نگیر:چشمک: فقط کافیه یه ذره sql بلد باشی تا این قطعه رو بتونی درک کنی، کلمه ی distinc باعث می شود تا مقادیر تکراری ققط یک بار ذکر شود اما برای جدول هاتون شما اگه به صورت زیر عمل کنید
1. جدول شعبه با فیلدهای
- ID
- (branch_name)نام شعبه
- (bank_name)نام بانک
- (asset)دارایی
هیچ فکر کردید که اگه نام یک شعبه و نام بانک مورد نظر به صورت ناخواسته و اشتباها به صورت متشابه وارد شود چه اتفاقی میافتد؟ این به نظر من اشتباه است

سلام
خوب اگه اشتباه کرد بعد از فهمیدن اشتباهش میاد اصلاح می کنه و وقتی اصلاح کرد با update کردن دیتابیس خودبه خود اون آیتم اشتباه حذف میشه

اَرژنگ
سه شنبه 21 مهر 1388, 09:47 صبح
سلام
خوب اگه اشتباه کرد بعد از فهمیدن اشتباهش میاد اصلاح می کنه و وقتی اصلاح کرد با update کردن دیتابیس خودبه خود اون آیتم اشتباه حذف میشه

saeeedft روش درست طراحی داتابیس را فرمودند، اینکه میگید 'اشتباه کرد و بعد از فهمیدنش میاد' وظیفه برنامه نویس این است که :
۱.اشتباه نشد.
۲.از کجا کاربر اشتباه بودن را پیدا کنه؟ مگر همینطوری میشه گذاشت که آشغال بریزند در داتابیس؟
۱ین مسئولیت را شما با روش درست طراحی داتابیس که saeeedft فرمودند براورده کنید، دلیل اینکه چرا این روش طراحی درست است را در قسمت طراحی داتابیس پژوهش کنید.

Arash_janusV3
سه شنبه 21 مهر 1388, 09:52 صبح
saeeedft روش درست طراحی داتابیس را فرمودند، اینکه میگید 'اشتباه کرد و بعد از فهمیدنش میاد' وظیفه برنامه نویس این است که :
۱.اشتباه نشد.
۲.از کجا کاربر اشتباه بودن را پیدا کنه؟ مگر همینطوری میشه گذاشت که آشغال بریزند در داتابیس؟
۱ین مسئولیت را شما با روش درست طراحی داتابیس که saeeedft فرمودند براورده کنید، دلیل اینکه چرا این روش طراحی درست است را در قسمت طراحی داتابیس پژوهش کنید.

سلام به یار همیشگی
اینو نگفته بودم در فرمم گرید برای نمایش بانکهام دارم که کاربر بانک مورد نظرش را پیدا
می کنه و با انتخاب ردیف گرید اطلاعات یک ردیف می ره در textboxها و combo ها میشینه

اَرژنگ
سه شنبه 21 مهر 1388, 10:04 صبح
سلام به یار همیشگی
اینو نگفته بودم در فرمم گرید برای نمایش بانکهام دارم که کاربر بانک مورد نظرش را پیدا
می کنه و با انتخاب ردیف گرید اطلاعات یک ردیف می ره در textboxها و combo ها میشینه

این (مهمترین چیز) را نگفته بودید!:لبخندساده:
ولی هنوز هم طراحی داتابیس درست نیست :گریه:
حالا مشکل چی هست؟ یک پروژه، کد ، یک چیزی بفرستید درست کنیم. همینطوری که نمیشه پیشرفت .

saeeedft
سه شنبه 21 مهر 1388, 21:18 عصر
سلام
خوب اگه اشتباه کرد بعد از فهمیدن اشتباهش میاد اصلاح می کنه و وقتی اصلاح کرد با update کردن دیتابیس خودبه خود اون آیتم اشتباه حذف میشه
نه دیگه نشد.شما زمانی که خودت برنامه روتست میکنی اونم با داده های اندکی که وارد کردی این کار امکان پذیره، اما هیچ به این فکر کردی برنامه ای که لحظه به لحظه داده توش وارد میشه و داده های یک جدول خاص با جدول های دیگه مرتبط هست اگه داده اشتباهی وارد بشه چی میشه؟ اون موقع اگه به جای کامپیوتر و یک برنامه ، اگه چند تا کارمند استخدام کنند که دستی این کار ها رو انجام بده بهتره، همیشه هم همه چیز به این سادگیا نیست

sara.f
چهارشنبه 22 مهر 1388, 00:16 صبح
سلام بر همه ی دوستان، جناب آرش خان تکنیک خاصی به کار گرفته نشده ، به خودت سخت نگیر:چشمک: فقط کافیه یه ذره sql بلد باشی تا این قطعه رو بتونی درک کنی، کلمه ی distinc باعث می شود تا مقادیر تکراری ققط یک بار ذکر شود اما برای جدول هاتون شما اگه به صورت زیر عمل کنید
1. جدول شعبه با فیلدهای
- ID
- (branch_name)نام شعبه
- (bank_name)نام بانک
- (asset)دارایی
هیچ فکر کردید که اگه نام یک شعبه و نام بانک مورد نظر به صورت ناخواسته و اشتباها به صورت متشابه وارد شود چه اتفاقی میافتد؟ این به نظر من اشتباه است
سلام
منظورتون چیه که ناخواسته؟!!! و اینکه چه اتفاقی می افته؟

sara.f
چهارشنبه 22 مهر 1388, 00:31 صبح
ضمنا شما نوع طراحی و حجم دیتا بیست رو نگاه کن، مگه چند تا داده تو هر جدول میخوای نگهداری کنی که نگران جدول هات هستی ، توی بالا نام بانک چه ربطی به جدول شعبه داره که توی این جدول اومده؟ شما اگه سه جدول هم بگیرید اشکالی نداره، باز هم میگم بسته به نوع طراحیتون هست
ببینید، قصد ما از طراحی دیتا بیس چیه؟ قصدمون اصولی کار کردن هست یا اینکه یه جوری سر وته مسئله را به هم بیاریم؟!! اتفاقا اگر می خوان روی حساب کار کنند ، به جا هست که مواظب طراحیه دیتا بیسشون باشن.
در ضمن شما وقتی می خوای یه دیتا بیس برای اطلاعات مثلا پرسنل یک اداره درست کنید، مگر آدرس فرد را در جدول پرسنلی قرار نمی دید؟
آدرس چه ربطی به فرد نام فرد داره؟!!!
در اینجا هم همینه،در حقیقت نام بانک ریشهء شعبه مربوطه هست،(البته طراحیه سه جدول اشتباه نیست)ولی در این مورد که هیچ فیلد دیگری را در مورد بانک به جز نام بانک را نمی خواهند ثبت کنند، لزومی به تعریف جدول جداگانه ای نیست، اما اگر فیلدهای دیگری هم داشتند قضیه فرق می کرد، در اون صورت جدول جداگانه ای برای بانک طراحی می کردند با فیلدهای مربوطه + فیلدی به نام ID به عنوان primary key، که این فیلد در جدول شعبه می شد Foreign key.

sara.f
چهارشنبه 22 مهر 1388, 00:35 صبح
سلام آقای ارژنگ.
به نظر شما،طراحی دیتا بیسی که من گفتم اشتباه هست؟