مشاهده نسخه کامل
: كمك ضروري در پايگاه داده در #c خواهشن يه نگاهي بندازيد.
farman-h
08-06-2009, 11:49
با سلام خدمت دوستان
من يه سوال در مورد پايگاه داده دارم .يك جدول دارم كه دو تا فيلد داره(يكي فيلد آدرس و ديگري شماره) من ميخوام هر وقت خواستم داده هايي به(فيلد آدرس وشماره) در جدول بانك اطلاعاتي وارد(INSERT) كنم به من بگه كه اطلاعات اين فيلد تكراري هست يا نه يعني اطلاعات قبلا وارد شده يا نه(در كل جستجويي ميخوام كه اين كار رو انجام بده)
فيلد آدرس من از نوع varchar هست و اندازه اش هم 8000 است و نمي تونم اون فيلد رو كليد در نظر بگيرم .تازه ميخوام كه اطلاعاتم بصورت فارسي وار بشه
VILIBILI
08-06-2009, 15:15
فکر می کنم یا باید تک تک رکوردها رو چک کنی یا یه سرچ بزاری اگر چیزی پیدا شد که به کاربر می گی نمی تونی اگر هم نه اضافه می کنی.
از ویزارد داری استفاده می کنی ؟
سلام
با توجه به شرایط بهتر است در جهت سرعت ایندکس بندی بالاتر برای کلید از یک فیلد autonumber عددی استفاده کنید.
سپس میتوانید فیلد تلفن (اگر منظورتان از شماره همین باشد) را یکتا معرفی کنید ولی ....
گاهاً لازم میشود چندین تلفن وارد شود که یک راه ساده میتوانید (و پرهیز از ایجاد جدول دیگر و رابطه یک به چند) داشتن یک فیلد بزرگ برای تلفن با یک textbox چند خطی در برنامه باشد تا خودکاربر بتواند بین شماره تلفن های مختلف از اینتر(Enter - خط جدید) استفاده کنید.
برای ذخیره متون غیر انگیلیسی (از جمله فارسی) نوع varchar و char (و یا text قدیمی) مناسب نیستند و شما باید از nvarchar و nchar (و یا ntext قدیمی) استفاده کنید.
در خصوص جستجو باید توجه داشته باشید در متون بزرگ و چند خطی مثل همین آدرس و یا درج چندین تلفن در یک فیلد با جداسازی اینتر(همان که در فوق پیشنهاد کردم) جستجوهای معمول فایده خاصی ندارد.
باز برای تلفن کار ساده تر است.
دلیل آن است که از نظر برنامه نویسی دو عبارت وقتی برابر هستند که کاملاً و تک تک حروفشان برابر باشد...
یعنی خیلی بعید و غیر ممکن است که یک آدرس اگر دوبار تایپی شود، همه حروفش مثل هم باشد، بالاخره فاصله ای و نقطه ای و خط تیره ایب کم و زیاد میشود، شاید یک بار "خیابان" تایپ شود و بار دوم "خ-" و سایر موارد و...
سرچ عادی با اپراتور = انجام میشود که باید کاملاً برابر باشد.
سرچ پیشرفته تر بعدی با اپراتور LIKE انجام میشود هکه میتواند کاراکترهای جاینشین (wildcard) را هم قبول کنید و مثلاً میتوان از ان برای پیدا کردن تلفنهای تکراری استفاده کرد. (البته همچنان میتوان برای درج چندیت تلفن از رابطعه یک به چند استفاده کرد ک ایندکس بندی پیدا میکند و سرچ ساده تر میشود.)
آخرین نوع و پیشرفته ترین نوع سرچ سرویس FTS است که نیاز به تعریف کاتالوگ و ایندکس بندی دوره ای کامل فیلد مورد نظر دارد تا بتوان سرچ پیشرفته و مفهومی و سریعتری را پییده سازی کرد ولی همچنان نمیتوان به قطع گفت دو آدرس یکی هستند یا نه، در بهترین شرایط میتوان به کاربر هشدار داد که امکان دارد آدرس وارد شده قبلا ثبت شده باشد...
و...
موفق باشید.
farman-h
08-06-2009, 18:11
فکر می کنم یا باید تک تک رکوردها رو چک کنی یا یه سرچ بزاری اگر چیزی پیدا شد که به کاربر می گی نمی تونی اگر هم نه اضافه می کنی.
از ویزارد داری استفاده می کنی ؟
نه ويزارد نيست كد نويسيه خواهش ميكنم اگه نظري داري برام بنويس
farman-h
08-06-2009, 18:17
سلام
با توجه به شرایط بهتر است در جهت سرعت ایندکس بندی بالاتر برای کلید از یک فیلد autonumber عددی استفاده کنید.
سپس میتوانید فیلد تلفن (اگر منظورتان از شماره همین باشد) را یکتا معرفی کنید ولی ....
گاهاً لازم میشود چندین تلفن وارد شود که یک راه ساده میتوانید (و پرهیز از ایجاد جدول دیگر و رابطه یک به چند) داشتن یک فیلد بزرگ برای تلفن با یک textbox چند خطی در برنامه باشد تا خودکاربر بتواند بین شماره تلفن های مختلف از اینتر(Enter - خط جدید) استفاده کنید.
برای ذخیره متون غیر انگیلیسی (از جمله فارسی) نوع varchar و char (و یا text قدیمی) مناسب نیستند و شما باید از nvarchar و nchar (و یا ntext قدیمی) استفاده کنید.
در خصوص جستجو باید توجه داشته باشید در متون بزرگ و چند خطی مثل همین آدرس و یا درج چندین تلفن در یک فیلد با جداسازی اینتر(همان که در فوق پیشنهاد کردم) جستجوهای معمول فایده خاصی ندارد.
باز برای تلفن کار ساده تر است.
دلیل آن است که از نظر برنامه نویسی دو عبارت وقتی برابر هستند که کاملاً و تک تک حروفشان برابر باشد...
یعنی خیلی بعید و غیر ممکن است که یک آدرس اگر دوبار تایپی شود، همه حروفش مثل هم باشد، بالاخره فاصله ای و نقطه ای و خط تیره ایب کم و زیاد میشود، شاید یک بار "خیابان" تایپ شود و بار دوم "خ-" و سایر موارد و...
سرچ عادی با اپراتور = انجام میشود که باید کاملاً برابر باشد.
سرچ پیشرفته تر بعدی با اپراتور LIKE انجام میشود هکه میتواند کاراکترهای جاینشین (wildcard) را هم قبول کنید و مثلاً میتوان از ان برای پیدا کردن تلفنهای تکراری استفاده کرد. (البته همچنان میتوان برای درج چندیت تلفن از رابطعه یک به چند استفاده کرد ک ایندکس بندی پیدا میکند و سرچ ساده تر میشود.)
آخرین نوع و پیشرفته ترین نوع سرچ سرویس FTS است که نیاز به تعریف کاتالوگ و ایندکس بندی دوره ای کامل فیلد مورد نظر دارد تا بتوان سرچ پیشرفته و مفهومی و سریعتری را پییده سازی کرد ولی همچنان نمیتوان به قطع گفت دو آدرس یکی هستند یا نه، در بهترین شرایط میتوان به کاربر هشدار داد که امکان دارد آدرس وارد شده قبلا ثبت شده باشد...
و...
موفق باشید.
دستت درد نكنه.اگه ميشه كد اون جستجو رو برام بزار ممنون ميشم.راستش ميخوام دو تا آدرس رو با هم مقايسه كنم ببينم آدرس دومي چقدر حرف تكراري در آدرس اولي داره.
سلام
همانطور که گفتم جستجو آدرس الگوریتم آسانی پیدا نمیکند و در بهترین شرایط هم نمیتوان به نتیجه قطعی رسید و true و false ای گفت که آدرس تکراری است یا نه.
شاید طبق یک الگوریتم معمولی به این نتیجه برسیم که...
1- شما آدرس را باید به کلمات تشکیل دهنده اش بشکند که با فاصله و یا نقطه و یا خط تیره و... جدا شده اند...
2- بعد باید کلمات از یک حد کوچکتر ار حذف کنید (مثلاً کلمات سه حرفی به پایین ...)
3- سپس باید بیشترین حضور این کلمات باقی مانده را در هر سطر جداگانه محاسبه کنید.
4- بعد مهم درصد تعداد کلمات عبارت اول (نتیجه آیتم 2 توضیحات) است که در هر سطر تکرار شده و اگر از یک مقدار خاص (مثلاً 70 یا 80) بیشتر باشد، میتوان اینطور نتیجه گرفت که احتمالاً دو آدرس شاید برابر باشند.
=====
من متاسفانه فرصت خالی کافی برای پیاده سازی این الگوریتم را ندارم، شاید دوستان دیگر بتوانند کمک کنند...
ولی اگر سوال موردی و خاصی داشته باشید همچنان در خدمت هستم.
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.