Verilənlər bazasında edilən səhvlər

Yüzlərlə qeydlər və ya milyonlarla qeydlər tutan bir verilənlər bazası ilə işləməyin, müvafiq verilənlər bazası dizaynı həmişə vacibdir. Yalnız məlumatları daha asan əldə etməklə yanaşı gələcəkdə də məlumat bazasını genişləndirməyi asanlaşdıracaq. Təəssüf ki, gələcəkdə çətinləşdirə biləcək bir neçə tələlərə düşmək asandır.

Bir verilənlər bazasını normallaşdırmaq mövzusunda yazılmış bütün kitablar var, amma bu ümumi səhvlərdən qaçınırsan yaxşı veritabanı dizaynına doğru yolda olursunuz.

Verilənlər bazası səhvi # 1: Cədvəldə təkrarlanan sahələr

Yaxşı verilənlər bazası dizaynı üçün əsas məqsədi təkrarlanan məlumatları tanımaq və təkrarlanan sütunları öz masalarına qoymaqdır. Cədvəldə təkrarlanan sahələr cədvəllər dünyasından gələnlər üçün ümumi olur, ancaq elektron tablolar dizaynla düz olur, məlumat bazaları isə relational olmalıdır. 2D'den 3D'ye gedir kimi.

Xoşbəxtlikdən, təkrarlanan sahələr odurda asan olur. Yalnız bu cədvələ baxın:

Sifariş kodu Product1 Məhsul2 Məhsul3
1 Teddy Bears Jelly Fasulye
2 Jelly Fasulye

Sifarişdə dörd məhsul varsa nə olur? Üç məhsuldan daha çoxunu dəstəkləmək üçün cədvəldə başqa sahə əlavə etmək lazımdır. Və məlumatların daxil olmasına kömək etmək üçün masa ətrafında bir müştəri proqramı qurduqda, onu yeni məhsul sahəsində dəyişməliyik. Sifarişdə Jellybeans ilə bütün sifarişləri necə tapırıq? Biz hər bir məhsul sahəsini sütundakı hər bir məhsul sahəsinə sorgulamaya məcbur edə bilərik: SELECT * FROM PRODUCTS WHERE Product1 = 'Jelly Beans' OR Product2 = 'Jelly Beans' OR Product3 = 'Jelly Beans'.

Bütün məlumatları bir araya gətirən bir cədvəl yaratmaq əvəzinə, hər birinə ayrı bir məlumat verən üç masa olmalıdır. Bu misalda, siparişin özü, bütün ürünlerimizle bir məhsullar masası və məhsulları siparişe bağlayan ProductOrders tableti haqqında bir Sipariş tablosu isteriz.

Sifariş kodu Müştəri identifikasiya nömrəsi Sifariş tarixi Ümumi
1 7 1/24/17 19.99
2 9 1/25/17 24.99
ProductID Məhsul Sayı
1 Teddy Bears 1
2 Jelly Fasulye 100
ProductOrderID ProductID Sifariş kodu
101 1 1
102 2 1

Hər bir masanın öz unikal ID sahəsi necə olduğunu nəzərə al. Bu birincil əsasdır. Başqa bir masada xarici bir əsas kimi bir əsas əsas dəyərdən istifadə edərək, masaları bağlayırıq. Birincil düymələr və xarici düymələr haqqında ətraflı oxuyun.

Veritabanı Mistake # 2: Cədvəldə bir cədvəl yerləşdirmək

Bu başqa bir səhvdir, amma həmişə təkrarlayan sahələr kimi çox deyil. Bir verilənlər bazasını layihələndirərkən, bir masa içindəki bütün məlumatlar özü ilə əlaqəli olduğundan əmin olmaq istəyir. Bu fərqli olanları təsvir etmə haqqında uşaq oyununa bənzəyir. Bir muz, bir çiyələk, bir şaftalı və televiziya dəstiniz varsa, televiziya başqa yerdə başqa bir yerə aiddir.

Eyni xəttlərdə, satış adamlarının bir cədvəli varsa, o cədvəldə olan bütün məlumatlar həmin satış şəxsinə aid olmalıdır. Bu satış şəxsinə aid olmayan hər hansı əlavə məlumat veritabanınızın başqa bir yerində ola bilər.

SalesID Birincisi Sonuncu Ünvanı Telefon nömrəsi Ofis OfficeNumber
1 Sam Elliot 118 Main St, Austin, TX (215) 555-5858 Austin Downtown (212) 421-2412
2 Alice Smith 504 2nd Street, New York, NY (211) 122-1821 New York (Şərq) (211) 855-4541
3 Joe Parish 428 Aker St, Austin, TX (215) 545-5545 Austin Downtown (212) 421-2412

Bu cədvəl fərdi satışçı ilə əlaqəli olsa da, həqiqətən cədvəl daxilində yerləşdirilən bir stol var. Office və OfficeNumber "Austin Downtown" ilə necə təkrarlanır. Bir ofis telefon nömrəsi dəyişirsə nə olur? Yaxşı bir şey olmayan bir məlumatın dəyişdirilməsi üçün bir bütün verilənlər məlumatını yeniləməlisiniz. Bu sahələr öz masalarına köçürülməlidir.

SalesID Birincisi Sonuncu Ünvanı Telefon nömrəsi OfficeID
1 Sam Elliot 118 Main St, Austin, TX (215) 555-5858 1
2 Alice Smith 504 2nd Street, New York, NY (211) 122-1821 2
3 Joe Parish 428 Aker St, Austin, TX (215) 545-5545 1
OfficeID Ofis OfficeNumber
1 Austin Downtown (212) 421-2412
2 New York (Şərq) (211) 855-4541

Bu tip dizayn da satış şəxsə cədvəlində dəhşət bir kabus yaratmadan Office masasına əlavə məlumat əlavə etmək imkanı verir. Bütün məlumatların satış şəxsinin cədvəlində olması halında, sadəcə küçə ünvanını, şəhər, dövlət və poçt kodunu izləmək üçün nə qədər iş görəcəyini düşünün!

Veritabanı Mistake # 3: İki və ya daha çox məlumat vahidinə bir sahəyə qoymaq

Ofis məlumatlarını satılan şəxsin cədvəlinə yerləşdirmək həmin verilənlər bazası ilə tək problem deyildir. Ünvan sahəsində üç ədəd məlumat var idi: küçə ünvanı, şəhər və dövlət. Verilənlər bazasında hər bir sahə yalnız bir ədəd məlumat ehtiva etməlidir. Bir sahədə birdən çox ədəd məlumatınız olduqda, məlumat bazası üçün sorğu vermək daha çətin ola bilər.

Məsələn, Austin'deki bütün satış insanlarına bir sorğu yayınlamak isteyip istemedik? Yalnız ünvanlı sahədə axtarış aparmaq lazımdır, bu yalnız səmərəsiz deyil, lakin pis məlumatları geri ala bilər. Axı, Portland, Oregon əyalətinin Austin küçəsində yaşayan kimsə nə olardı?

Masanın aşağıdakı kimi görünməsi lazım:

SalesID Birincisi Sonuncu Ünvan 1 Ünvan 2 Şəhər Dövlət Zip Telefon
1 Sam Elliot 118 Main St Austin TX 78720 2155555858
2 Alice Smith 504 2nd St New York NY 10022 2111221821
3 Joe Parish 428 Aker St. Apt 304 Austin TX 78716 2155455545

Burada qeyd etmək üçün bir neçə şey var. Birincisi, "Address1" və "Address2" təkrarlanan sahələr səhvinə düşə bilər.

Bununla belə, bu halda onlar birbaşa satış şöbəsinə aid olan məlumatların ayrı-ayrı hissələrinə istinad edirlər.

Bundan əlavə, qarşısını almaq üçün bonus səhv olaraq, telefon nömrəsinin biçimlendirilmesinin masadan necə çıxarıldığına diqqət edin. Mümkün olan zaman sahələrin formatını saxlamamalıyıq. Telefon nömrələri halında, insanlar bir telefon nömrəsini yazmaq üçün bir çox yol var: 215-555-5858 və ya (215) 555-5858. Bu, bir satış şəxsini öz telefon nömrələri ilə axtarmağa və ya eyni sahədə kod axtarışda olan insanların axtarışını çətinləşdirə bilər.

Veritabanı Mistake # 4: Doğru Bir İbtidai Açar İstifadə etmir

Ən çox hallarda, birincil açarınız üçün avtomatik olaraq artan nömrəni və ya digər yaradılan nömrəni və ya alfasayısal istifadə etmək istəyə bilərsiniz. Yaxşı bir identifikator edəcəyinə dair səslənirsə belə, birincil əsas üçün hər hansı bir faktiki məlumatdan istifadə etməməlisiniz.

Məsələn, hər birimiz öz fərdi sosial təhlükəsizlik nöqtəmiz var, buna görə də bir işçi bazasının sosial təhlükəsizlik nömrəsini istifadə yaxşı bir fikir kimi səslənə bilər. Ancaq nadir hallarda, hətta bir sosial təhlükəsizlik nömrə dəyişdirmək mümkündür və biz heç də əsas əsas dəyişməyimizi istəmirik.

Və faktiki informasiyanın əsas dəyər kimi istifadə edilməsi problemdir. Bu dəyişə bilər.

Verilənlər bazası səhvi # 5: Adlandırma Konvensiyasını istifadə etmir

Veritabanınızı ilk dəfə işə salmağa başlayanda bu böyük bir şey kimi səslənə bilməz, ancaq məlumat əldə etmək üçün verilənlər bazasına qarşı sorgu yazma nöqtəsinə gəldikdən sonra, bir adlandırma konvensiyası olan sahə adlarını yadda saxlayanda kömək edəcəkdir.

Sadəcə adın FirstName, LastName bir masa və first_name, last_name başqa bir masa kimi saxlandığı zaman bu prosesin nə qədər çətin olacağını təsəvvür edin.

İki ən məşhur adlandırma konvensiyası, hər bir sözün sahənin içindəki ilk məktubunu və ya alt sütun istifadə edərək sözləri ayırmaqdır. Bir sözlə, ilk sözdən başqa, hər bir sözün birinci harfi başqasını genişləndirən bəzi developers-də baxa bilərsiniz: firstName, lastName.

Siz ayrıca cədvəl adları və ya çoğul masa adlarını istifadə etmək qərarına gəlmək istəyir. Sifariş masası və ya Sifarişlər masası mı? Müştəri masası və ya Müştərilər cədvəli mi? Yenə bir Sifariş masası və Müştərilər cədvəli ilə sıxışdırmaq istəmirsiniz.

Seçdiyiniz adlandırma konvensiyası, adlandırma konvensiyasına həqiqətən seçmə və bağlanma prosesi kimi əhəmiyyətli deyil.

Veritabanı Mistake # 6: Yanlış Indexing

İndeksləşmə, xüsusilə verilənlər bazası dizaynında yeni olanlar üçün sağ olmaq üçün ən çətin şeylərdən biridir. Bütün əsas düymələr və xarici düymələr endekslenmelidir. Bunlar bir-birinə bağlanma masalarıdır, buna görə indeks olmadan, verilənlər bazasından çox pis performans görürsünüz.

Ancaq çox vaxt qaçırılan digər sahələrdir. Bunlar "WHERE" sahələri. Ümumiyyətlə WHERE bəndində bir sahəni istifadə edərək axtarışınızı daraltacaksanız, bu sahədə bir endeks qoymağı düşünmək istəyirsən. Buna baxmayaraq, cədvəlin həddən artıq indeksləşdirilməsini istəmirsiniz.

Necə qərar verə bilərəm? Bu verilənlər bazası dizayn sənətinin bir hissəsidir. Bir masaya qoymaq üçün neçə indeksə sərt bir məhdudiyyət yoxdur. Əvvəla, bir WHERE bəndində tez-tez istifadə olunan hər hansı bir sahədə endekslemek istersiniz. Verilənlər bazasını düzgün şəkildə indeksləşdirmək haqqında oxuyun.