الجمعة، 8 ديسمبر 2017

تصميم جداول الاقسام والفروع Table Design Departments and Sections

سوف نصمم ثلاثة جداول وكما يلي :

  • جدول الاقسام (Departments Table): هذا الجدول سوف يستخدم لحفظ معلومات الاقسام مثلا قسم المبيعات و قسم المالية ...الخ.
    1. يمتلك هذا الجدول حقل معرف القسم DEPTID وهو من نوع (25)VARCHAR وهو سوف يكون المفتاح الاساسي (Primary Key) لهذا الجدول. مثلا قسم المبيعات سوف يمكون معرفه SALES. 
    2. الحقل الثاني هو الوصف (Description) مثلا قسم المبيعات سوف يمتلك القيمة (Sales) في هذا الحقل.
    3. الحقول (25)CREATEDBY VARCHAR و CREATEDDATE DATETIME) سوف تستخدم لتخزين معرف المستخدم (User ID) الذي قام بأضافة البيانات وتاريخ اضافة البيانات. وهذه ميزة جيدة في التصميم تساعدنا لاحقا في متابعة التغييرات في التطبيق. مثلا اذا قام مستخدم بأضافة قسم جديد بدون الحصول على الموافقة المطلوبة سوف يساعدنا هذا الحقل في التعرف على المستخدم وبتالي يمكن سؤال المستخدم عن سبب اضافة القسم الجديد.
    4.  الحقول MODIFIEDBY و MODIFIEDDATE سوف تستخدم لتخزين معرف المستخدم (User ID) الذي قام بتعديل البيانات وتاريخ تعديل البيانات. وهذه ميزة جيدة في التصميم تساعدنا لاحقا في متابعة التغييرات في التطبيق. مثلا اذا قام مستخدم بتعديل وصف لقسم موجود سوف يساعدنا هذا الحقل في التعرف على المستخدم وبتالي يمكن سؤال المستخدم عن سبب تعديل وصف القسم. 
الصورة التالية توضح نموذج عن البيانات التي يتم تخزينها في هذا الجدول






فيما يلي الشفرة البرمجية لتكوين هذا الجدول :





CREATE TABLE [WORK].[dbo].[SYS_SALS_DEPARTMENT] 

(

    DEPTID VARCHAR (25) NOT NULL,

    [DESCRIPTION] VARCHAR (250) NOT NULL,

    CREATEDBY VARCHAR (25) NOT NULL,

    CREATEDDATE DATETIME NOT NULL,

    MODIFIEDBY VARCHAR (25) NULL,

    MODIFIEDDATE DATETIME

   PRIMARY KEY (DEPTID),

    ID INT identity (1,1)

)

اسم الجدول SYS_SALS_DEPARTMENT وهو مقسم على اجزاء كما يلي:
  • البادئة (ٍSYS) وهي تعني ان هذا الجدول هو من جداول أعدادت النظام.
  • البادئة (SALS)  وهي تعني ان هذا الجدول متعلق بوظائفية المبيعات.
  • واخيرا اسم الجدول (DEPARTMENT) .

ملاحظة : اصطلاح التسمية(naming convention) جزء مهم جدا من تصميم قواعد البيانات وخصوصا اذا كان التطبيق سوف يحتوي العشرات من الجداول فمن المهم جدا ان نتبع قواعد اصطلاح التسمية(naming convention) حتى يسهل علينا التعرف على وضيفة الجدول من مجرد النظر الى اسمه.


 (DEPTID)  في الحقل NOT NULL استخدمنا الخاصية
--  وذلك لكي نخبر النظام ان هذا الحقل يجب ان يحتوي على قيمةفأذا حاول المستخدم   
--اضافة سطر بدون اعطاء قيمة لذه الحقل سوف يحصل على رسالة خطاء من نظام قواعد البيانات وهذا من متطلبات الحقل 
.الاساسي


كذلك استخدمنا الخاصية (NOT NULL)مع حقل الوصف وهذا من متطلبات وظائف التطبيق يجب ان يكون لكل قسم وصف معين.


كذلك استخدمنا الخاصية (NOT NULL)مع حقل CREATEDBY  و CREATEDDATE  وهذا من متطلبات وظائف التطبيق حتى نتمكن من متابعة التغيرات. بينما في حقل MODIFIEDBY  و MODIFIEDDATE  لم نستخدم هذه الخاصية لانه ليس من الضروري ان يتم تعديل هذا السطر. 


  • جدول الفروع(Sections Table): هذا الجدول سوف يستخدم لحفظ معلومات الفروع مثلا فرع مبيعات  المنطقة الشمالية و فرع مبيعات  المنطقة الجنوبية...الخ.
    1. يمتلك هذا الجدول حقل معرف القسم SECTIONID وهو من نوع (25)VARCHAR وهو سوف يكون المفتاح الاساسي (Primary Key) لهذا الجدول. مثلا فرع المبيعات الشمالي  سوف يمكون معرفه NSALES. 
    2. الحقل الثاني هو الوصف (Description) مثلا قسم المبيعات سوف يمتلك القيمة (Sales) في هذا الحقل.
    3. الحقول (25)CREATEDBY VARCHAR و CREATEDDATE DATETIME) سوف تستخدم لتخزين معرف المستخدم (User ID) الذي قام بأضافة البيانات وتاريخ اضافة البيانات. وهذه ميزة جيدة في التصميم تساعدنا لاحقا في متابعة التغييرات في التطبيق. مثلا اذا قام مستخدم بأضافة قسم جديد بدون الحصول على الموافقة المطلوبة سوف يساعدنا هذا الحقل في التعرف على المستخدم وبتالي يمكن سؤال المستخدم عن سبب اضافة القسم الجديد.
    4.  الحقول MODIFIEDBY و MODIFIEDDATE سوف تستخدم لتخزين معرف المستخدم (User ID) الذي قام بتعديل البيانات وتاريخ تعديل البيانات. وهذه ميزة جيدة في التصميم تساعدنا لاحقا في متابعة التغييرات في التطبيق. مثلا اذا قام مستخدم بتعديل وصف لقسم موجود سوف يساعدنا هذا الحقل في التعرف على المستخدم وبتالي يمكن سؤال المستخدم عن سبب تعديل وصف القسم. 
الصورة التالية توضح نموذج عن البيانات التي يتم تخزينها في هذا الجدول









فيما يلي الشفرة البرمجية لتكوين هذا الجدول :


CREATE TABLE [WORK].[dbo].[SYS_SALS_SECTIONS] 
(
SECTIONID VARCHAR (25) NOT NULL,
[DESCRIPTION] VARCHAR (250) NOT NULL,
CREATEDBY VARCHAR (25) NOT NULL,
CREATEDDATE DATETIME NOT NULL,
MODIFIEDBY  VARCHAR (25)  NULL,
MODIFIEDDATE DATETIME

PRIMARY KEY (SECTIONID),
ID INT identity (1,1)
)


  • الجدول الاخير في هذه المجموعة هو (Sections/Department Table): هذا الجدول مهم جدا وهو يمثل احدى مراحل تسوية قواعد البيانات (Database normalization)  . هذا الجدول سوف يعرف العلاقة بين الاقسام والفروع وبتالي سوف يمكن النظام من التعرف على الفروع الخاصة بكل قسم.  

    1. يمتلك هذا الجدول حقل معرف القسم DEPTID وهو من نوع (25)VARCHAR وهو سوف يكون جزء من المفتاح الاساسي (Primary Key) وبنفس الوقت يتعتبر هذا الحقل هو مقتاح اجنبي FOREIGN KEY
    2. الحقل الثاني هو حقل معرف القسم SECTIONID وهو من نوع (25)VARCHAR وهو سوف يكون وهو سوف يكون جزء من المفتاح الاساسي (Primary Key) وبنفس الوقت يتعتبر هذا الحقل هو مقتاح اجنبي FOREIGN KEY.
    3. الحقول CREATEDBY و CREATEDDATE و MODIFIEDBY و MODIFIEDDATE تم شرح الفائدة منها اعلاه.

الصورة التالية توضح نموذج عن البيانات التي يتم تخزينها في هذا الجدول







فيما يلي الشفرة البرمجية لتكوين هذا الجدول : 

CREATE TABLE [WORK].[dbo].[SYS_SALS_DEPARTMENT_SECTIONS] 
(
DEPTID VARCHAR (25) NOT NULL,
SECTIONID VARCHAR (25) NOT NULL,
[DESCRIPTION] VARCHAR (250) NOT NULL,
CREATEDBY VARCHAR (25) NOT NULL,
CREATEDDATE DATETIME NOT NULL,
MODIFIEDBY  VARCHAR (25)  NULL,
MODIFIEDDATE DATETIME

PRIMARY KEY (DEPTID, SECTIONID),
ID INT identity (1,1)
)

كما نلاحظ في الشفرة اعلاه ان مفتاح الاساسي يحتوي على حقلين (PRIMARY KEY (DEPTID, SECTIONID)) وهذا ضرروي حتى نتمكن من انشاء علاقة صحيحة بين جدول الاقسام وجدول الفروع. هذا المفتاح الاساسي يضمن ان لايمكن تكرار العلاقة بين نفس القسم ونفس الفرع مثلا قسم المالية FINC والفرع الرئيسي FINHD يمتلكان فقط سطر واحد في هذا الجدول فأذا حاول التطبيق ان يقوم بأضافة سطر جديد بأستخدام نفس القيم قسم المالية FINC والفرع الرئيسي FINHD سوف يحصل على رسالة خطاء كما في الصورة ادناه.




بنفس الوقت الحقلين (DEPTID, SECTIONID) هما عبارة عن مفاتيح اجنبية (FOREIGN KEY) وذلك لان هذه الحقول هي عبارة عن حقول (Primary Key) في الجدولين (SYS_SALS_DEPARTMENT) و (SYS_SALS_SECTIONS) وهذا هو التعريف العملي لمبدىْ المفتاح الاجنبي وهو يستخدم لبناء العلاقات بين الجداول المختلفة.

الشكل التالي يوضح العلاقات بين الجداول الثلاثة 








ليست هناك تعليقات:

إرسال تعليق