PDA

View Full Version : سوال: دیتابیس : ایجاد جدولی وابسته به جدول قبل با داده های جدول قبل



SilverLearn
پنج شنبه 14 دی 1391, 01:17 صبح
با سلام خدمت شما دوستان گرامی

بنده در حال ساخت یک اسکریپت برای نرمال سازی دیتابیسم هستم

الان فرض کنید من جدول زیر رو دارم با داده های داده شده :

97768

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

که نتیجش می شه یه چیزی شبیه این :

97769

همونطور که می بینید بر اساس شماره فاکتور ما رکوردامون رو دوباره اضافه کردیم

الان من می خوام ببینم چجوری می تونم این کار رو انجام بدم ....

SilverLearn
پنج شنبه 14 دی 1391, 11:03 صبح
من که تا الان به هر مشکلی خوردم و سوالم رو اینجا پرسیدم به هیچ نتیجه ای نرسیدم
فکر کنم باید دنبال راه دیگه ای باشم
.........

$ M 3 H R D A D $
پنج شنبه 14 دی 1391, 11:36 صبح
خوب شما بد یک جوری اضافه کاری کردید
الان جدول شما اون اولی هست یا دومی ؟

SilverLearn
پنج شنبه 14 دی 1391, 11:46 صبح
می دونم منظورت چیه ولی خوب ما می خوایم فرض کنیم جدولمون با فیلد های همون اولی هست
بعد برای اینکه بهتر بشه عملیات بالا رو روش انجام بدیم (از طریق کد نویسی) و یک جدول جدید اضافه بشه و اطلاعات داخلش وارد بشه

$ M 3 H R D A D $
پنج شنبه 14 دی 1391, 11:50 صبح
خوب اگه بخوایید اون حدول اولی بمونه و کاره دیگه ای که شما الان دارید اسم نرمال سازی و میبرید انجام بدید : خوب میشه بدتر کردن یک کار اشتباه
یعنی نمیتونید جدول اول و حذف کنید و ساختار جدید براش در نظر بگیرید ؟

SilverLearn
پنج شنبه 14 دی 1391, 11:53 صبح
خوب آره فرقی نداره جدول اول رو حذف کنیم هم طوری نیست ..من می خوام هر جور شده به جدول دومی برسم (از طریق کد نویسی)

$ M 3 H R D A D $
پنج شنبه 14 دی 1391, 12:06 عصر
برنامه خیام با وی بی نوشته - برنامه صدور فاکتور هست
شما تو بالاترین سطح : یک کاربر دارید که میره تو سامانه ( و این کاربر در جدول کاربر ها یک شماره رکورد یا شناسه داره )
جدول دیگه ای دارید که میتونه اجناس در اون ذکر بشه ( قلم - خودکار - پاک کن - ) که این جدول هم پس جون جدا طراحی میشه هم شما همیشه نام اجناس و دارید و هر وقت خواستید میتونید تغیر یا حذف کنید و اگه 10 بار پاک کن و باک کن نوشته باشید دیگه نمیتونید نرمال سازی کنید چون هم از رشته برای ذخره اسم کالا استفاده میکنید که جحم بیشتری اشغال می کنه و همچنین پویا نیست
همچنین میتونید به جدول اجناستون فیلد crator_id بدید که هر کاربری برای خودش احناس جدا داشته باشه

مشتری ها هم یک جدول جدا دارند ( جدول مشتری : آیدی - شناسه نمایندگی - نام مشتری - آدرس و ... ) که شناسه(آیدی ) ای جدول تو فاکتور لازم میشه که بفمیم کدوم مشتری سفارش داد
و اگه شما سیستم ثبت فاکتور و یا آرشیو فاکتور داشته باشید و بخواهید بعد از چندین سال فاکتور قدیمی و چاپ کنید و تو این فاصله زمانی فامیلی مشتری اشتباه وارد شده باش یا آدرس تغییر کرده باشه اگه از جدول دیگه خونده باشه امکان ویرایش اون هست که وقتی پاچ میکنید اطلاعات درست چاپ ببشه

بعد از اینها شما در حدول main_factor اطلاعا کلی فاکتور و ذخیر می کنید ( تاریخ - شناسه نمایندگی - شناسه مشتری - نوع پرداخت - توضیحات - مبلغ تخفیف - هزینه حمل یا پست - درصد تخفیف و ... )
حالا یک حدول دیگه دارید که اطلاعات موادر ذکر شده در فاکتور هست که میگید فلان شناسه ( شناسه فاکتور اصلی ) و فلان کالا ( شناسه کالا ) و تعداد
دیگه قیمت هم نمیگید چون قیمت متعییر است و از جدول اجناس توسط شناسه کالا لود میشه
و این کالا ها و لود کردن مبلغشون جمع زده میشن و مبلغش + مبلغ حمل یا پست میشه مقلا و نهایتا از تخفیف کم میشه

$ M 3 H R D A D $
پنج شنبه 14 دی 1391, 12:11 عصر
واسه نرمال شدن هم چون تعداد سفارش خیلی نیست میتونید ز یک رکورد در جدول موارد فاکتور استفاده کنید که یک فیلد رشته ای هم توش باشه با شناسه که همه موارد با کاما یا فرمت خاص جدا باشه از هم

12:{1:20;2:14;3:40}
فاکتور اصلی با شناسه 12 دارای 3 قلم کالا هست
کالایی با شناسه 1 و به عتداد 20 عدد
کالا با شناسه 2 و تعداد 14
کالا با شناسه 3 و تعداد 40

SilverLearn
پنج شنبه 14 دی 1391, 12:18 عصر
مرسی از جوابتون
ولی این نرمال سازی فقط الان در سطح 1 (1NF) هست و فعلا کاری به بقیه چیز ها نداریم من الان می خوام بدونم چجوری با کد نویسی می تونم بر اساس شماره فاکتور و یا حتی شماره مشتری یک رکورد رو به رکورد های بیشتری (مثل مثالی که زدم تو جدولا) تبدیل کنم و بعدا برم سراغ مراحل دیگر نرمال سازی
پس بحث ما فعلا عملیات نرمال سازی نیست . صرفا جدا سازی داده ها ، برای اینکه ذخیره‌سازی و بازیابی اطلاعات ردیف‌های سفارش ساده‌تر شود، و محدودیت در تعداد ردیف‌های سفارش از بین برود .......

SilverLearn
پنج شنبه 14 دی 1391, 12:21 عصر
برای اینکه موضوع روشن تر بشه لینک زیر رو ببینید

لینک (http://www.amib.ir/weblog/?p=306)

$ M 3 H R D A D $
پنج شنبه 14 دی 1391, 12:24 عصر
از دمه تشکر استفده کنید برای تشکر لطفا

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

خوب شما جدول خودتون که حاوی اطلاعات که گفتید هست و به پست اتچ کنید تا دنلود کنیم

گله نکنید از دیر ج دادن دوستان جون اونظور که شما تو بحث پروژتون هستید ما نیستیم و تا منورتون و درک کنیم طور میکشه و وقت دوستان هم شاید ج نده
و الان برای اینکه ج شما و بدم باید برم بانک بسازم و فیلد ها شما و بسازم و جدول ها و پر کنم که برام کار سختی میشه پس جدول و بانک و بزارید تا کار راحت تر بشه

$ M 3 H R D A D $
پنج شنبه 14 دی 1391, 12:36 عصر
تو لینکی که گفتید هم حرف من و زده دوست عزیز
گفته با کد به جدول دوم برسیم چون دیگه نرمال نمیشه چون همون داده ها داره همیشه به همون صورت نا منظم ذخیره میشه که فضا از بین میره
و تازه شما می خواین با کد خیلی پشرفته که زمان اجرا بالای داره به زور داده ها و به صورت دلخواه بکشبد بیرون ! دیگه بدتر میشه
شما فک کنم یک بار دیگه این لینک و نگاه کنید بهتر باشه

SilverLearn
پنج شنبه 14 دی 1391, 12:39 عصر
باشه شرمنده آخه کارم خیلی گیره :)

کل فایلامو براتون آپ کردم

فقط از یک قالب پیش فرض فعلا استفاده کردم و لینک هاشو هنوز تغییر ندادم . پس تعجب نکنید

توی قسمت کد هاش هم این تنضیمات هست :





$con = mysql_connect("localhost","root","");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}

// Create database
if (mysql_query("CREATE DATABASE my_db",$con))

$ M 3 H R D A D $
پنج شنبه 14 دی 1391, 12:53 عصر
منظورتون و فهمیدم اما کار دشواریه شایدم نشدنی
باید تو کوئری بگید که :
ستون های سطری و با 3 قالب ستون سفارش تعداد 1 و 2 و3 اونم به صورت ستونی نمایش بده و داده های وابسته اونو نمایش بده
با group by هرچی فک میکنم نمیدون پطوری باید دسته بندی کرد

$ M 3 H R D A D $
پنج شنبه 14 دی 1391, 12:55 عصر
راستی شما میخواین کوئری بدید که جدول شماره یک و به صورت شماره 2 نمایش بده ؟
یا نه جدول شماره دو ساخته شده و میخواین فقط اطلاعات و پر کنید اونتو ؟

SilverLearn
پنج شنبه 14 دی 1391, 12:58 عصر
جدول شماره 2 رو بسازیم بعد اطلاعات جدول یک رو وارد کنیم داخلش ....

$ M 3 H R D A D $
پنج شنبه 14 دی 1391, 12:59 عصر
اکه میخوای تو جدول دیگه بریزی که سادست
هر رکورد و فراخونی کن و 3 بار insert انجام بده همین

SilverLearn
پنج شنبه 14 دی 1391, 13:04 عصر
خوب منم تو همینش موندم ...نمی دونم چجوری هر رکورد رو جدا سازی کنم و .... میشه کمک کنین بگین چجوری این کارو بکنم؟!

$ M 3 H R D A D $
پنج شنبه 14 دی 1391, 13:16 عصر
شما هر رکورد دول 1 و میخواهید تبدیل کنید به 3 تا رکورد تو جدول 2 !!! عجب نرمال سازی باحالی :دی :گریه:
خوب هر رکورد و فراخونی کنید 3 تا insert بدید دیگه مشکل کجاست دوست عزیز ؟

SilverLearn
پنج شنبه 14 دی 1391, 13:23 عصر
آقا میشه شما یه مثال بزنید برام :گریه:

آخه برام نامفهومه خوب......

فایل ها رو که بهتون دادم . میشه بر اساس اون برام یه مثالی چیزی بزنید تا بفهمم کامل

بازم شرمنده واقعا......

$ M 3 H R D A D $
پنج شنبه 14 دی 1391, 13:50 عصر
به ایدی یاهو من پیغام بدید اینجا سخته

SilverLearn
پنج شنبه 14 دی 1391, 15:45 عصر
سلام دوباره

من مشکلم روی اون قضیه با کمک شما حل شد (واقعا دستت درد نکنه)
فقط الان یه مشکل دیگه دارم

جدول زیر رو نگاه کنید :
97792

حالا می خوام این جدول تبدیل به دو جدول دیگه به این صورت بشه :

جدول اول :
factor_num
customer_num
name
address

جدول دوم :

id
factor_num
tedad
disc
amount


کل فایل ها رو هم دوباره میزارم که تغییر شون دادم
فایل 2nf.php
رو نوشتم ولی فک کنم کامل نباشه (از همین روش باید برم دیگه ؟)

$ M 3 H R D A D $
پنج شنبه 14 دی 1391, 19:02 عصر
از روشی که تویح دادم استفاده نید موفق باشید