الخميس، 23 يناير 2014

النموذج العادي الثاني Second Normal Form 2NF

النموذج العادي الثاني Second Normal Form 2NF

ينص النموذج العادي الثاني علي تلبية جميع قواعد 1NF

بالنظر في علاقة الطلبات و العملاء نريد تخزين هوية العميل، اسم العميل، رقم الطلب و تفاصيل الطلب، وتاريخ البيع:

CREATE TABLE CUSTOMERS(
       CUST_ID    INT              NOT NULL,
       CUST_NAME VARCHAR (20)      NOT NULL,
       ORDER_ID   INT              NOT NULL,
       ORDER_DETAIL VARCHAR (20)  NOT NULL,
       SALE_DATE  DATETIME,
       PRIMARY KEY (CUST_ID, ORDER_ID)
);

هذا الجدول هو النموذج العادي الأول، لوجود كل قواعد النموذج العادي الأول به. هذا الجدول يتكون من المفتاح الأساسي CUST_ID وORDER_ID. مجتمعين، اي انهم فريدين من نوعهم.
ومع ذلك، فإن الجدول ليس في النموذج العادي الثاني لأن هناك تبعيات جزئية في المفاتيح والأعمدة الأولية.
 CUST_NAME يعتمد على CUST_ID وليس هناك صلة حقيقية بين اسم العميل وما تم شرائه.
تفاصيل الطلب وتاريخ البيع تعتمد أيضا على ORDER_ID، ولكنها لا تعتمد على CUST_ID، لأنه ليس هناك رابط بين CUST_ID وORDER_DETAIL أو SALE_DATE.
لجعل هذا الجدول يتوافق مع النموذج العادي الثاني، نحتاج لفصل الأعمدة في الجداول الثلاثة.
أولا، إنشاء جدول لتخزين تفاصيل العملاء:
CREATE TABLE CUSTOMERS(
       CUST_ID    INT              NOT NULL,
       CUST_NAME VARCHAR (20)      NOT NULL,
       PRIMARY KEY (CUST_ID)
);

بعد ذلك نقوم بانشاء جدول لتخزين تفاصيل كل أمر:
CREATE TABLE ORDERS(
       ORDER_ID   INT              NOT NULL,
       ORDER_DETAIL VARCHAR (20)  NOT NULL,
       PRIMARY KEY (ORDER_ID)
);

وأخيرا نقوم بإنشاء جدول ثالث لتخزين CUST_ID وORDER_ID فقط لجميع طلبات لعميل:
CREATE TABLE CUSTMERORDERS(
       CUST_ID    INT              NOT NULL,
       ORDER_ID   INT              NOT NULL,
       SALE_DATE  DATETIME,
       PRIMARY KEY (CUST_ID, ORDER_ID)
);


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

إرسال تعليق

يسعدني إرسال تعليقاتكم وأسئلتكم واقتراحاتكم