Деректер базасын үшінші қалыпты пішінде орналастыру (3NF)

Үшінші қалыпты пішін (3NF) деректердің деректер тұтастығын қолдайтын деректер базасының принципі болып табылады, ол бірінші Normal Form (1NF) және Екінші Қалыпты Пішін (2NF) ұсынған дерекқорды қалыпқа келтіру қағидаларына негізделеді .

Үшінші қалыпты формалардың талаптары

Үшінші қалыпты пішінде болу үшін дерекқордың екі негізгі талаптары бар:

Негізгі кілттерге тәуелділік туралы

Келіңіздер, барлық бағандар бастапқы кілтке тәуелді болу керек деген сөзбен не болатынын зерттейік.

Егер бағанның мәні кестедегі бастапқы кілт пен басқа бағандан алынса, ол 3NF-ті бұзады. Қызметкерлер кестесін осы бағандармен қарастырыңыз:

Both LastName және FirstName тек EmployeeID мәніне байланысты бола ма? Сонда, LastName Name дегенге байланысты бола ма? Жоқ, өйткені LastName-ге тән ештеңе FirstName мәнін білдірмейді. FirstName LastName-ге байланысты болады ма? Тағы бірдеңе жоқ, өйткені бұл дұрыс: кез-келген LastName болуы мүмкін, ол FirstName мәніне қатысты кеңес бере алмады. Сондықтан бұл кесте 3NF-ге сәйкес келеді.

Бірақ бұл көлік құралдарының кестесін қарастырыңыз:

Өндіруші мен моделі VehicleID-дан алынуы мүмкін - бірақ модель өндірушіден де шығарылуы мүмкін, себебі көлік моделі нақты өндірушімен ғана жасалады. Бұл кесте дизайны 3NF-ге сәйкес емес, сондықтан деректердің ауытқуларына әкелуі мүмкін. Мысалы, модельді жаңартпастан, өндірушіні жаңартпастан, қателерді енгізе аласыз.

Оны үйлесімді ету үшін біз қосымша тәуелді бағаны басқа кестеге жылжытуымыз керек және оны шетел кілтін қолдану керек. Бұл екі кестеге әкеледі:

Көлік құралдары кестесі

Төмендегі кестеде ModelID - Үлгілер кестесіне арналған сыртқы кілт:

Модельдер кестесі

Бұл жаңа кесте модельдері өндірушілерге арналған. Егер модельге тән кез-келген көліктік туралы ақпаратты жаңартқыңыз келсе, бұл кестеде Көліктер кестесінде емес, оны осы кестеде жасайтын боласыз.

3NF үлгісіндегі алынған өрістер

Кесте кестеден алынған басқа бағандар негізінде есептелетін, өрнекті өрісті қамтуы мүмкін. Мысалы, осы виджет тапсырыстарының кестесін қараңыз:

Толық үзілістер 3NF сәйкестігі, себебі оны бастапқы кілтге толықтай тәуелді емес, бірлік бағасын санға көбейту жолымен алуға болады. Үшінші қалыпты пішінге сәйкес келу үшін оны кестеден алып тастауымыз керек.

Шын мәнінде, ол алынғаннан кейін, оны дерекқорда сақтамау жақсы.

Дерекқор сұрауларын орындау кезінде оны «ұшақта» есептеу мүмкін. Мысалы, біз бұрын осы сұрауды тапсырыс нөмірлерін және қорытындыларды алу үшін қолданған болармыз:

SELECT OrderNumber, Барлығы WidgetOrders

Енді келесі сұранысты пайдалана аламыз:

SELECT OrderNumber, UnitPrice * Саны AS Барлығы WidgetOrders

нормалау ережелерін бұзбай бірдей нәтижелерге жету.