Мэдээллийн сан гуравдагч хэвийн маягт (3NF)

Гурав дахь хэвийн хэлбэр (3NF) нь өгөгдлийн нэгдмэл байдлыг дэмждэг өгөгдлийн сангийн зарчим юм. Эхний ээлжийн маягт (1NF) болон хоёрдох жирийн маягт (2NF) өгөгдлийн санг үүсгэх мэдээллийн сан .

Гуравдагч ердийн маягтын шаардлага

Өгөгдлийн сангийн хоёр үндсэн шаардлага нь гуравдагч хэвийн хэлбэрээр байна:

Хүүхдийн Хэсгийн үндсэн хамаарлын талаар

Бүх багана нь анхдагч түлхүүрээс хамаарах ёстой гэсэн утгаар бид юуг хэлэхийг цааш нь үргэлжлэцгээе.

Хэрэв баганын утга нь үндсэн түлхүүрийн болон хүснэгтийн өөр баганаас үүссэн бол энэ нь 3NF-ийг зөрчдөг. Эдгээр баганатай Ажилчдын хүснэгтийг авч үзье:

LastName болон FirstName хоёулаа зөвхөн EmployeeID-н үнээс хамаарна уу? За, LastName нь FirstName-ээс хамаарч болох уу? Үгүй, LastName-д ямар ч зүйл байхгүй тул FirstName-ийн утгыг санал болгоно. LastName-ээс LastName-ээс хамаарч болох уу? Дахин хэлэхэд, энэ нь үнэн юм: ямар ч LastName байж болох юм, энэ нь FirstName-ийн үнэ цэнийг зааж өгөх боломжгүй юм. Тиймээс энэ хүснэгтэд 3NF нийцсэн байна.

Гэхдээ энэ Тээврийн хэрэгслийн хүснэгтийг авч үзье.

Үйлдвэрлэгч ба Загвар нь VehicleID-ээс авч болно. Гэхдээ Загвар нь үйлдвэрлэгчээс гарган авч болно. Яагаад гэвэл тээврийн хэрэгслийн загвар нь зөвхөн үйлдвэрлэгчээр хийгдсэн байдаг. Энэ хүснэгтийн загвар нь 3NF бус нийцэмжтэй байдаг тул өгөгдлийн гажуудлыг бий болгодог. Жишээлбэл, та үйлдвэрлэгчийг загварыг шинэчлэхгүйгээр алдаатай мэдээллийг оруулж болох юм.

Үүнийг дагаж мөрдөхийн тулд нэмэлт тэжээл баганыг өөр хүснэгтэд нүүлгэж, гадаад түлхүүрийн хэрэглүүрийг ашиглан хөрвүүлэх шаардлагатай болно. Энэ нь хоёр хүснэгтэнд хүргэнэ.

Тээврийн хэрэгсэл

Доорх хүснэгтэнд ModelID нь модулийн хүснэгтэнд гадаад түлхүүр юм:

Загварын хүснэгт

Энэхүү шинэ хүснэгтэд үйлдвэрлэгчийн загварыг загварчилдаг. Загварт зориулсан тээврийн хэрэгслийн ямар нэгэн мэдээллийг шинэчлэхийг хүсч байгаа бол Тээврийн хэрэгслийн хүснэгтээс бус харин энэ хүснэгтэнд хийнэ.

3NF загварт орсон талбаруудыг үүсгэсэн

Хүснэгтэд хүснэгтийн бусад баганууд дээр тулгуурлан тооцоологдсон хүснэгтэд хүснэгтэд байж болно. Жишээлбэл, виджет захиалгын хүснэгтийг авч үзье.

Нийт хэмжээ нь 3NF мерделтийг дагаж мердегдеж байгаа тул нэгжийн унэ нь тоон утгаараа анхдагч түлшээс хамаарах бус харин тоо хэмжээгээр үржүүлж өгдөг. Гурав дахь хэвийн маягтыг даган хүснэгтээс хасах хэрэгтэй.

Үнэнийг хэлэхэд энэ нь өгөгдлийн санд хадгалагдахгүй байх нь илүү дээр юм.

Бид өгөгдлийн сангийн хүсэлтийг хийж байхдаа үүнийг шууд "тооцоолох" боломжтой. Жишээлбэл, бид энэ хайлтыг захиалгын дугаар, нийт дүнг авахын тулд өмнө нь хэрэглэж байсан байж болох юм:

Захиалгын тоо SELECT, Нийт FROM WidgetOrders

Дараах асуултыг бид одоо ашиглаж болно:

SELECT OrderNumber, UnitPrice * Тоо хэмжээ Нийт FROM WidgetOrders

хэвийн болгох журмыг зөрчихгүйгээр ижил үр дүнд хүрэх.