رفتن به مطلب

راهنمایی برای ساخت دیتابیس


پست های پیشنهاد شده

سلام دوستان

من می خواستم یه سیستم بنویسم، که هر کابر پنل خودشو داره.

مثل سامانه پیامک یا حسابداری آنلاین (مثل جیب). می خواستم بدونم ساختار کلیش رو چطور بچینم. یعنی برای هر کاربر بعد از ایجاد یک دیتابیس جدید ایجاد بشه یا راه حل دیگه ای؟!!!

اگر چیز دیگه ای هم برای همچین دیتابیسای بزرگی به ذهنتون میرسه دریغ نکنید لطفا. ممنون!

لینک به ارسال

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

لینک به ارسال

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

ممنون از شما

ولی من نمس خوام این کارو توی وردپرس انجام بدم. می خوام یه سیستم php دیگه بنویسم مثل مثلا حسابداری که هر یوزر پنل برای خودش داره.

حالا میشه همین کارو برای این سیستم هم پیاده کرد (یعنی بیام تعداد جدول ها رو افزایش بدم و پیشوند هر جدول رو یوزرنیم کاربر بذارم)؟ یا برای هر کاربر یه دیتابیس جدید بسازم؟

لینک به ارسال

آیا در سیستم های مالی و یا فروشگاهی تحت وب و یا تحت ویندوز برای هر مشتری یه دیتابیس جدا ایجاد می کنند؟

آیا من و شما به ازای هر خط موبایلمون در مخابرات یه دیتابیس مجزا داریم؟

اگر قرار باشه که هر کس یه دیتابیس برای خودش داشته باشه که مفهوم اساسی دیتابیس نقض میشه

لینک به ارسال

آیا در سیستم های مالی و یا فروشگاهی تحت وب و یا تحت ویندوز برای هر مشتری یه دیتابیس جدا ایجاد می کنند؟

آیا من و شما به ازای هر خط موبایلمون در مخابرات یه دیتابیس مجزا داریم؟

اگر قرار باشه که هر کس یه دیتابیس برای خودش داشته باشه که مفهوم اساسی دیتابیس نقض میشه

آره! عجب مثال خوبی.

خوب راه حل دیگه و بهینه چیه؟ همون پیشوند؟

لینک به ارسال

هر کسی از یه نقطه ایی وارد میشه - من اگر بجای شما باشم، قبل از اینکه به دنبال نامگذاری باشم سعی می کنم ساختار دیتابیس و گردش داده رو کاملاً تحلیل کنم؛ چون اینجوری علاوه بر اینکه ساختار رو توسعه پذیر می کنه، روش رو هم تعیین می کنه و وقتی روش تعیین شد، نامگذاری خود به خود ایجاد میشه

اما اگر دنبال جواب سریع هستید، در نهایت به ازای هر کاربر (مشتری - کارمند - بسته های خدماتی) از پرفیکس دوم استفاده کنید

مثلاً:

alfa_customer_hasan

alfa_personal_ali

alfa_servises_sale

لینک به ارسال

آره! عجب مثال خوبی.

خوب راه حل دیگه و بهینه چیه؟ همون پیشوند؟

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

مگر با استفاده از فایروال های سخت افزاری و هاست شخصی و سیستم های پرو

اما پیشنهاد بهترم اینه که سیستم حسابداری را برای محیط ویندوز و سیستم حسابداری تنظیم کنید (نمونه های خریدنی آماده خیلی مطمئن ازش تو بازار زیاده) و تنها صفحه نهایی گزارشات مالی که مشخصات حساب بانکی را ندارد آنلاین قرار بدید

لینک به ارسال

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

اصلا متوجه نشدم! منظور همون تغییر پیشوند جدول برای هر کاربر هست؟!

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

مگر با استفاده از فایروال های سخت افزاری و هاست شخصی و سیستم های پرو

اما پیشنهاد بهترم اینه که سیستم حسابداری را برای محیط ویندوز و سیستم حسابداری تنظیم کنید (نمونه های خریدنی آماده خیلی مطمئن ازش تو بازار زیاده) و تنها صفحه نهایی گزارشات مالی که مشخصات حساب بانکی را ندارد آنلاین قرار بدید

حتما می خوام تحت وب باشه تا در دسترس باشه و فقط اطلاعات مالی رو نگهداری می کنه نه اطلاعات حساب و ... (مثل سایت jeeb.ir).

چرا امنیت پایینه؟ آخه شنیدم ایران خودرو حسابداری تحت وب داره ولی فکر کنم اون اینترانت هست.

شرکتای دیگه های هم هستن مثل sos و ...

این که گفتید sql و access امنیتشون از mysql بالاتره؟!

راستی یه سوال دبگه، مثلا اگر یک فرد رو بخوایم به چند دسته اضافه کنیم چه راهی خوبه؟ این خوبه که یه جدول دسته بسازیم و نام دسته ها رو با آی دی اختصاصی برای هر کدوم توش وارد کنیم و بعد توی جدول کاربر یک فیلد بذاریم و دسته هایی رو که عضوش هست رو با یه جداکننده واردش کنیم

یا این راه بهتره که یه جدول دیگه بسازیم و آی دسته رو توی اون جدول توی یک فیلد و آی دی فردی رو که عضو اون دسته هست توی فیلد دیگه ای قرار بدیم. در این صورت اگر کاربر توی 10 تا دسته عضو باشه باید 10 تا رکورد ایجاد کرد توی این جدول جدید. چه راهی؟ راه بهتری هم هست؟

لینک به ارسال

اصلا متوجه نشدم! منظور همون تغییر پیشوند جدول برای هر کاربر هست؟!

حتما می خوام تحت وب باشه تا در دسترس باشه و فقط اطلاعات مالی رو نگهداری می کنه نه اطلاعات حساب و ... (مثل سایت jeeb.ir).

چرا امنیت پایینه؟ آخه شنیدم ایران خودرو حسابداری تحت وب داره ولی فکر کنم اون اینترانت هست.

شرکتای دیگه های هم هستن مثل sos و ...

این که گفتید sql و access امنیتشون از mysql بالاتره؟!

راستی یه سوال دبگه، مثلا اگر یک فرد رو بخوایم به چند دسته اضافه کنیم چه راهی خوبه؟ این خوبه که یه جدول دسته بسازیم و نام دسته ها رو با آی دی اختصاصی برای هر کدوم توش وارد کنیم و بعد توی جدول کاربر یک فیلد بذاریم و دسته هایی رو که عضوش هست رو با یه جداکننده واردش کنیم

یا این راه بهتره که یه جدول دیگه بسازیم و آی دسته رو توی اون جدول توی یک فیلد و آی دی فردی رو که عضو اون دسته هست توی فیلد دیگه ای قرار بدیم. در این صورت اگر کاربر توی 10 تا دسته عضو باشه باید 10 تا رکورد ایجاد کرد توی این جدول جدید. چه راهی؟ راه بهتری هم هست؟

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

یک فرد را به چند دسته تقسیم کردن رو درست متوجه نشدم

اگر فرضا چهار دسته ی مشخص است و همه در همین دسته ها مقادیر مختلف دارند چهتار ستون به جدول اضافه کنید (مانند- حقوق ثابت - مزایا - اضافه کاری - ...)

اگر چند دسته است که هر کس ممکنه عضو یکیش باشه یک ستون (مثل: کارمند - کارگر - تکنسین - نگهبان - خدمات)

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

لینک به ارسال

خیلی خیلی ممنون که اینقدر سریع پاسخ میدید. :wub:

یک فرد را به چند دسته تقسیم کردن رو درست متوجه نشدم

اگر فرضا چهار دسته ی مشخص است و همه در همین دسته ها مقادیر مختلف دارند چهتار ستون به جدول اضافه کنید (مانند- حقوق ثابت - مزایا - اضافه کاری - ...)

اگر چند دسته است که هر کس ممکنه عضو یکیش باشه یک ستون (مثل: کارمند - کارگر - تکنسین - نگهبان - خدمات)

1- نه هیچ کدوم از اینا!

با یه مثال می گم. مثلا فرض کنید کابر من 3 تا دسته با توجه به نیازش بتونه توی سیستم بسازه: دسته 1، دسته 2 و دسته 3

بعد بک فرد رو هم اضافه کنه و به دلخواه خودش، مثلا به دو دسته فرد رو اضافه کنه.

منظورم طراحی دیتابیس برای همچنین ثبت کردنی هست (عین وردپرس که مثلا یک پست رو به چندتا دسته اضافه می کنیم)

2- در ضمن من آخرش نفهمیدم برای پنل دهی به هر نفر (مثلا همین سیستم های پیامک انبوه یا هرچیزی) چطور دیتابیس رو ایجاد کنم؟

اینم با یه مثال می گم:

مثلا من 3 تا جدول دارم برای سیستم. یکی برای ذخیره کاربرا، یکی برای دسته هاو یکی هم برای حساب هر کاربر.

حالا اگر بخوام مثلا به 50 تا کاربر 50 تا پنل برای این سیستم بدم، چطور باید دیتابیس طراحی بشه؟

لینک به ارسال
حالا اگر بخوام مثلا به 50 تا کاربر 50 تا پنل برای این سیستم بدم، چطور باید دیتابیس طراحی بشه؟

یک جدول برای کاربرها میسازید با فیلدهای دلخواه مثلا username , pass , email , site , mob , last_activity

که یک فیلد کلید اصلی داره مثلا به اسم user_id

حالا یک جدول هم میسازید برای دسته ها

cat_id , cat_name

که cat_id کلید این جدول هست .

حالا یه جدول برای ارتباط این دو تا میسازید اسمشو میذارید مثلا user_cat

با دو فیلد user_id , cat_id

به هر تعداد که بخواید به هر کاربر دسته های متفاوتی میدید

لینک به ارسال

یک جدول برای کاربرها میسازید با فیلدهای دلخواه مثلا username , pass , email , site , mob , last_activity

که یک فیلد کلید اصلی داره مثلا به اسم user_id

حالا یک جدول هم میسازید برای دسته ها

cat_id , cat_name

که cat_id کلید این جدول هست .

حالا یه جدول برای ارتباط این دو تا میسازید اسمشو میذارید مثلا user_cat

با دو فیلد user_id , cat_id

به هر تعداد که بخواید به هر کاربر دسته های متفاوتی میدید

ممنون

خوب این از جواب سوال 1.

در مورد جواب سوال 2 هم دوستان کمک کنید لطفا!

لینک به ارسال

الان جواب هر دو سوالتون بود!

شما جدولی برای کاربر و جدولی برای دسته(یا پلن) ایجاد می کنید و براساس آی دی به همدیگه نسبت می دید.

لینک به ارسال
ارسال شده در (ویرایش شده)

الان جواب هر دو سوالتون بود!

شما جدولی برای کاربر و جدولی برای دسته(یا پلن) ایجاد می کنید و براساس آی دی به همدیگه نسبت می دید.

یعنی مثلا اگر یک کاربر 1 دسته بندی 1 و دسته بندی 2 ایجاد کرد و کاربر 2 دسته بندی 3 رو ایجاد کرد، هر دو رو توی جدول دسته بندی وارد کنم و توی یک جدول دیگه، رابطه کاربر و این دسته بندی ها رو؟!

مثلا اگر 100 تا کاربر باشن و هرکدوم 200 تا دسته وارد کنن توی جدول دسته فقط 20000 تا رکورد داریم و همینطور توی جدول رابطه هاشون! اونوقت حجم جدول زیاد نمیشه و سرعت کوئری ها پایین بیاد؟

ویرایش شده توسط Anisi
لینک به ارسال

جدول اول

user_id , username

با مقادیر


1 reza
2 bahman
3 morteza
4 ansi

جدول دسته ها cat

cat_id , cat_name

با مقادیر


1 example1
2 example2
3 example3
4 example4
5 example5
6 example6
,...

حالا کاربر شماره 1 دسته های اکسامپل 1و6و3

کاربر2 دسته 1 و 5

cat_id , user_id


1 1
6 1
3 1
1 2
5 2

امیدوارم متوجه شده باشید

لینک به ارسال

امیدوارم متوجه شده باشید

ممنون از شما!

این رو متوجه شده بودم، اما سوالم این بود که این راه حل به درد دیتابیس سیستم حسابداری با پنل دهی می خوره؟

به نظرم اومد این پاسخ برای این باشه که چطور مثلا یک فرد رو در چند دسته بندی قرار بدیم و مناسب برای چنین سیستمی نباشه که 100 تا پنل به 100 نفر بدیم و هر کدوم 100 تا پرداخت و 100 تا دریافت رو ثبت کنن و ما با این نوع طراحی دیتابیس این دریافت ها و پرداخت ها رو همه در یک جدول ثبت کنیم و با یک جدول دیگه به هر کاربر اختصاص بدیم. سرعت کوئری ها پایین نمیاد و حجم جدول بره بالا؟

ویرایش شده توسط Anisi
لینک به ارسال

1000 و 100.000 و 10000000000 رکورد چیزی نیست!

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

و نیازها رو بسنجید

وضعیت فعلی طراجی جدولها چگونه است؟

لینک به ارسال

MySQL رو چی فرض کردی ؟

شما ایندکس گذاری مناسب بذار ، دیتاتایپ مناسب بذار ، بعد بیاد در مورد میلیون رکورد و میلی ثانیه حرف بزن با خیال تخت :)

لینک به ارسال

MySQL رو چی فرض کردی ؟

شما ایندکس گذاری مناسب بذار ، دیتاتایپ مناسب بذار ، بعد بیاد در مورد میلیون رکورد و میلی ثانیه حرف بزن با خیال تخت :)

بی خیال!

ممنون

1000 و 100.000 و 10000000000 رکورد چیزی نیست!

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

و نیازها رو بسنجید

وضعیت فعلی طراجی جدولها چگونه است؟

ممنون

اما یه منبع میدید برای همین تکنیکا.

توی پایگاه داده دانشگاه که چیز به درد بخوری نمی گن!

لینک به ارسال

آموزش انگلیسی:

ftp://ftp.uar.net/pub/e-books/mysql and php database applications.pdf

اسلاید دانشگاه قبلی :) یه نگاه بندازید (پیوست)

Database.zip

لینک به ارسال

بهترین منبع به یقین کتاب خودشون هست


MySQL 5.5 Reference Manual
Including MySQL Cluster NDB 7.2 Reference Guide

البته کمی حجمش زیاده (4400 صفحه) اما لازم نیست همه بخشهاشو بخونی .

کتاب Teach Yourself MySQL in 21 Days هم بد نیست حجمش خوبه 300 صفحه است ، بخونیش کارت راه می افته اما هیچ چیز جز تجربه و بنچ مارک نمیتونه بهترین راه حل رو بهت نشون بده !

روی دیتاتایپ ها حساس باش .

انجین رو InnoDB بذار .

سعی کن کمتر از جوین استفاده کنی !

توی واکشی (select ) همیشه صریحا فیلدهای اون اطلاعاتی رو که میخوای مشخص کن (select ‍`id` , `username` from tbl where id=1)

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

سعی کن تعداد کوئری هات بیشتر از 10 تا نشه !

دیگه چیزی به ذهنم نمیرسه جز اینکه ، برو ببینم چیکار میکنی :)

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...