سلام دوستان.
قرار بود دیتابیس مربوط به یه شرکت تولیدی رو برای نگهداری اطلاعات مشتریاش طراحی کنیم. (تصویر دیتابیس در پایان همین پست پیوست شده)
به طور کلی و برای اینکه خیلی پیچیده نشه و وارد خیلی جزئیات نشیم و چون صرفا می خواییم اطلاعات کلی در مورد مشتریامون و اینکه چه کالاهایی رو با چه قیمتهایی از ما خریده، چه تعداد و در چه تاریخی و از این قبیل چیزها رو نگه داریم، 3 تا Table در نظر می گیریم.
اول Table ی برای ثبت اطلاعات مربوط به مشتری. خوب، به نظر شما چه فیلدهایی رو مهمه که نگه داریم؟! درسته همونطور که دارین توی ذهنتون می گین، ما اسم، آدرس، شماره تلفن برامون مهمه. پس یک Table داریم با نام مثلا : Table_customerINFO .
و دوم Table ی که یک سری اطلاعات کلی کالامون رو برامون نگه داره تا بفهمیم مشتری دقیقا چی خریده از ما. Table ی که مثلا نام و شماره ی سریال تولید کالا رو برامون نگه داره. پس Table بعدیمون می شه مثلا: Table_goodsINFO .
و در نهایت به یک Table ی نیاز داریم که مثل برگه ی قراردادمون می مونه و در حقیقت می شه ارتباط بین کالا و مشتری و برای ما اطلاعات خرید رو نگه می داره مثل تاریخ خرید،قیمتی که به مشتری داده شده، میزان پولی که مشتری پرداخته، تعداد کالایی که خریده. و البته باید دقت کنید که توی این جدول ما باید کلیدهای خارجی از جداول دیگه داشته باشیم تا بتونیم ارتباط بین جداول ایجاد کنیم و اطلاعات دو جدول دیگه رو از طریق این برگه ی به اصطلاح قرارداد استخراج کنیم. پس Table سوم می شه مثلا: Table_buyINFO
دقت کنین که اگر می خوایید یک پروژه با جزئیات بیشتری بنویسین در محدوده ی CRM شما می تونین جدول های دیگه ای هم داشته باشین، می تونین جزئیات بیشتری برای مشتری در نظر بگیرین مثل تاریخ تولدش و ... و برای نوع پرداخت ها، که نقدی هست،یا قسطی و چک... و حتی جزئیات بیشتری برای کالا.می تونین اطلاعات بازاریابها رو حتی در نظر بگیرید و الی آخر...
دینگ دینگ توجه:
- برای نوع داده ی مربوط به ستون قیمتها از Money استفاده نکردم چون با مقادیر ایرانی مشکل داره بنابراین می تونین از float یا decimal استفاده کنید.
- برای تاریخ ها از datetime استفاده می کنیم اما چون این نوع داده تاریخ رو به صورت میلادی بر می گردونه بعدا توی برنامه مون،برای لایه ی نمایش باید متدی بنویسیم که تبدیل به شمسی ش رو انجام بده.
- برای id ها از نوع داده ی uniqueidentifier استفاده می کنیم. حالا می رسیم به اینکه چرا و این چه جور نوع داده ایه:
Unique identifier اگه اینجوری جدا بنویسم از رو معنیش به طور کلی می فهمین چه نوع داده ای هست. یونیک، یک شناسه ی یونیک، یکتا، تک. در واقع uniqueidentifier یک نوع داده ایه که مقادیر 16 بایتی باینری(0و 1) ی رو ذخیره می کنه که بعنوان یک globally unique identifiers (GUIDs) یا در واقع مثل اون ازش در محیط برنامه نویسی استفاده می شه.
حالا این GUID چیه؟ یک عدد 16 بایتی یونیک هست. در واقع هیچ دو کامپیوتری در دنیا وجود ندارن که GUID های مثل هم تولید کنند دقیقا مثل uniqueidentifier ها . بنابراین وقتایی که می خواییم یکی بودن مثلا یک نام رو توی پروژه ها یا سایت هامون چک کنیم، این GUID برای پیگیری کمکمون می کنه،چون برای هر نامی یک شماره یکتا تخصیص داده می شه که از طریق اون قابل پیگیریه و این در صورتی که نامهای مشابه داشته باشیم خیلی مفید خواهد بود. در حقیقت یه جور کلید(Key) هستند و در واقع توی دیتابیس کلید اصلی هستند.
برگردیم به Uniqueidentifier ها و نکات مربوط بهش:
1. توی Table در نظر بگیرید وقتی یک ستون از این نوع داده Uniqueidentifier استفاده می کنه حتی اگه بعضی داده های اضافه شده در Table مشابه باشن با هم قاطی نمی شن چون هر سطر شناسه ی مخصوص به خودش رو داره.
2. Uniqueidentifier ها رو می شه دو جور نمایش داد: رشته هایی از کاراکتر و یا باینری
Character string format: '6F9619FF-8B86-D011-B42D-00C04FC964FF'
Binary format: 0xff19966f868b11d0b42d00c04fc964f
3. برای تولید این عدد یونیک از شماره های یونیک کارت شبکه (مثل شماره ی Mac یا Ip) و همچنین ساعت CPU ی کامپیوتر استفاده می شه.
4. از دو راه متغیرهای Uniqueidentifier مقدار دهی می شن:
- اول از طریق تابع (Function) پیش فرضی که خود SQL Server داره به نام NEWID .
DECLARE @myid uniqueidentifier
()SET @myid = NEWID
(PRINT 'Value of @myid is: '+ CONVERT(varchar(255), @myid
- و بعد از طریق تبدیل از حالت رشته هایی از کاراکتر به باینری. رشته هایی که مشابه این هستند:
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
هر x نماد یک رقم هگزیمال (شانزده شانزدهی) بین 0 تا 9 و کاراکترهای از a تا f هستند.
5. مقایسه هایی مثل (=, <>, <, >, <=, >=) و Null و غیرNull بودن رو می شه رو متغییرهای Uniqueidentifier انجام داد اما عملیات دیگه ی ریاضی رو نمی شه روشون اعمال کرد.
6. یه سری پراپرتی های IDENTITY داریم که این متغیرهای Uniqueidentifier باهاش فرق دارن. اون پراپرتی ها با اضافه شدن هر سطر مقدارش اتوماتیک عوض می شه مثلا زیاد می شه اما در مورد متغیرهای Uniqueidentifier اینطوری نیست و با اضافه شدن هر سطر به جدولمون باید یه دونه جدیدش ایجاد بشه. به همین دلیله که ما برای کلیدهای اصلی مون توی این Table ها از این نوع داده استفاده کردیم.
تصویر دیتا بیس CRM
درست مثل دفترچه تلفن(اون سیستم لایه ای اش) شروع کنین استورد پروسیجرها رو بنویسین. پست بعدی فایل دیتا بیس رو می ذارم.الان نه!! :دی
پ.ن: اگه راجع چیزهایی که گفتم و یا بقیه Data Type ها(انواع داده) سوالی دارین، خوشحال می شم بپرسین.