ورود

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



IMANAZADI
جمعه 20 آذر 1394, 11:35 صبح
با سلام
قبل از هر چیز بگم این مثال هست و میدونم که طرح اصلی شامل خیلی آیتم های دیگه هست
فرض کنید میخواهیم یک دیتابیس ، جهت متریالهای(مواد) ورودی به انبار طراحی کنیم
و چون هر متریال یکسری مشخصه خاص خود را داره که با متریال دیگه متفاوت هست نمیتونیم به ازای هر متریال یک جدول در نظر بگیریم لذا من اومدم از متادیتا استفاده کنم
به این صورت که یک جدول در نظر گرفتم به نام tbl_attrib شامل آی دی و نام خاصیت
یک جدول در نظر گرفتم به نام tbl_material شامل آی دی و نام متریال
و یک جدول که ارتباط این دو جدول میباشد به نام tbl_total شامل آی دی ، آی متریال ، آی دی خاصیت و مقدار
که تا اینجا مشکلی نیست


جدول tbl_material






material name
id


pipe
1


plate
2




جدول tbl_attrib



attribute name
id


size
1


thickness-mm
2


lenght-mm
3


width
4


Height
5


dimention
6


weight
7



جدول tbl_total



value
id_attrib
id_material
id


4"
1
1
1


12.7
2
1
2


1500
3
1
3


2200
4
2
4


1400
3
2
5


5
2
2
6






در جدول نهایی ما اطلاعات دو نمونه متریال رو وارد کردیم



lenght
thickness
size
material


1500
12.7
4
pipe





thickness
lenght
width
material


5
1400
2200
plate






حالا اگر بخواهیم یک متریال مثل pipe جدید اضافه کنیم جدول شبیه زیر میشه





value
id_attrib
id_material
id


4"
1
1
1


12.7
2
1
2


1500
3
1
3


2200
4
2
4


1400
3
2
5


5
2
2
6


4"
1
1
7


14.5
2
1
8


1850
3
1
9


4"
1
1
10


16
2
1
11


2500
3
1
12




که الان یه بهم ریختگی بوجود میاد که اگر بخواهیم گزارش بگیریم نمیدونیم که لوله 4" ضخامتش (thickness) ، چیست ؟ 12.7 هست یا 14.5 یا سایر آیتم ها

اینم بگم که فرم ورود اطلاعات شامل 3 ورودی و یک کلید است که
اولین ورودی یک کمبوباکس هست که نامهای متریال رو نشون میده ، و با توجه به متریال انتخاب شده کد اونو از تو جدول پیدا میکنه
دومین کمبوباکسکه خصوصیات رو نشون میده و با انتخاب کاربر کد اونو از جدول استخراج میکنه
و یک تکس باکس که مقدار عدد با توجه به دو انتخاب قبلی میگیره و
و یک باتن که هنگامی که کلیک میشه این اطلاعات رو در جدول نهایی ثبت میکنه

و با توجه به اینکه فرم ورود همزمان توسط چندین نفر در حال وارد کردن دیتا می باشد (تحت شبکه )

راه حل شما برای این مشکل چیه ؟؟؟

میدونم که در جدول نهایی باید یک فیلد باشه که اطلاعات رو متمایز کنه

تنها چیزی که خودم به ذهنم میرسه اینه که وقتی کاربر باتن رو کلیک میکنه ایتدا یک کد یونیک تولید بشه و در ستون جدید ثبت بشه

pswin.pooya
جمعه 20 آذر 1394, 16:13 عصر
اگر سوال شما اینه که همزمان یک آیتم یکسان وارد پایگاه داده نشه. مثلا دو تا pipe بهتره که فیلد اسم رو unique کنید. اما اگر سوالتون این هست که چند نمونه پایپ دارید. بهترین راه اینه که گروه متریال هم اضافه کنید. مثلا گروه pipe ها و .... کار بعدی که حتما باید انجام بدید این هست که فیلدهای ترکیبی مثل attribute و متریال رو در جدول مقادیر unique بکنید.

IMANAZADI
جمعه 20 آذر 1394, 20:45 عصر
اما اگر سوالتون این هست که چند نمونه پایپ دارید. بهترین راه اینه که گروه متریال هم اضافه کنید. مثلا گروه pipe ها و .... کار بعدی که حتما باید انجام بدید این هست که فیلدهای ترکیبی مثل attribute و متریال رو در جدول مقادیر unique بکنید.


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

شما جدول نهایی بالا (جدول آخر) رو فایل اکسل در نظر بگیرید
چطور میتونیم مشخصات( lenght , thicknes )، پایپ های 4" رو پیدا کنیم ؟؟؟

باید یه فیلد دیگر باشه که مشخص کنه این اطلاعات بهم ربط دارن که همین گروه متریالی هست که شما می فرمایید( که در آخر پست ، قبلی عرض کردم ) ولی چطوری پیاده سازیش کنیم

در خصوص یونیک کردن مقادیر id attrib و id material ، باید به عرضتون برسونم این کار رو نمیشه کرد
دلیل :
اگر بخواهیم یک pipe با خصوصیت زیر رو اضافه کنیم به مشکل بر میخوریم




lenght
thickness
size
material


850
12.7
4
pipe



که تمام اطلاعات با pipe قبلی یکسان هست و فقط طول اون فرق داره

pswin.pooya
جمعه 20 آذر 1394, 22:09 عصر
اگر بخواهیم یک pipe با خصوصیت زیر رو اضافه کنیم به مشکل بر میخوریم

id هر پایپ رو جدا کن و یک گروه برای هر متریال در نظر بگیر. یعنی اگر لوله جدید داری معرفی میکنی بهش id جدید بده. نه اینکه کلا از یه id برای تمام لوله ها استفاده کنی.

برای گروه کردن هم می تونی یه جدول جدا درست کنی و یا اینکه رابطه پدر فرزندی برای جدول متریالها تعریف کنی. (همین کار رو هم می تونی با جدول گروهت بکنی.)


Pipe
--->pipe 4 inch
---------> pipe 4 inch, 2m length
--------->pipe 4 inch, 1m length
---> pipe 2 inch
--------->pipe 2 inch, 1m length
....


بازم به عنوان مثال : (البته مثال کامل نیست باید بهترش کنی)

جدول entity:

name
group
id


pipe 4 inch length 2m

3
4


pipe 4 inch length 4m
3
5


pipe 2 inch length 2m
2
6




جدول value:


value
entity
attribute
id


2 m
4

2
1


4 inch
4
3
2


4 m
5
2
3


4 inch
5
3
4


1 m
6
2
5



جدول attribute:


group
default value
attribute name
id


1
0
length
2


1
0

size
3



جدول گروه:


name

parent
id


pipe
0
1


pipe 2 inch
1
2


pipe 4 inch
1
3



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


باید به عرضتون برسونم

:اشتباه:
میشه جمله های بهتری انتخاب کرد.