Kesalahan umum sing digawe ing Desain Database

Apa sampeyan nggarap database sing nduwe ratusan cathetan utawa mayuta-yuta cathetan, desain basis data sing bener tansah penting. Ora mung bakal nggawe informasi kasebut luwih gampang, bakal nyederhanakake database ing mangsa ngarep. Saliyane, gampang dicemplungake menyang sawetara jebakan sing bisa gawe masalah ing mangsa ngarep.

Ana kabeh buku sing ditulis ing subyek normalake basis data, nanging yen sampeyan mung ngilangi kesalahane umum, sampeyan bakal ing trek sing bener kanggo desain database sing apik.

Database Kesalahan # 1: Mbaleni Fields ing Tabel

Aturan dhasar kanggo desain basis data sing becik yaiku kanggo ngenali data mbaleni lan masang kolom-kolom sing mbaleni ing tabel dhewe. Kothak mbaleni ing tabel iki umum kanggo wong-wong sing wis teka saka jagad spreadsheet, nanging nalika spreadsheets cendhak kanthi desain, database kudu dadi hubungan. Iku kaya arep saka 2D kanggo 3D.

Untunge, kothak repetitive biasane gampang dicet. Cukup ndeleng tabel iki:

OrderID Product1 Product2 Product3
1 Teddy Bears Kacang Jelly
2 Kacang Jelly

Apa mengkono nalika urutan ngandhut papat produk? Kita bakal perlu nambah kolom liyane kanggo tabel kanggo ndhukung luwih saka telung produk. Lan yen kita wis mbangun aplikasi klien ing sekitar meja kanggo mbiyantu data input, kita kudu ngowahi karo lapangan produk anyar. Lan carane kita nemokake kabeh pesenan karo Jellybeans ing urutan? Kita bakal dipeksa nggoleki saben lapangan produk ing tabel karo statement SQL sing bisa katon: SELECT * FROM Products WHERE Product1 = 'Jelly Beans' utawa Product2 = 'Jelly Beans' utawa Product3 = 'Jelly Beans'.

Tinimbang gadhah meja siji sing ngemot kabeh informasi bebarengan, kita kudu duwe telung tabel sing saben-saben nduwe informasi sing béda-béda. Ing conto iki, kita bakal pengin Tabel Pesenan nganggo katrangan bab urutan kasebut, Tabel Produk karo kabeh produk kita lan tablet ProductOrders sing nggandheng produk supaya bisa.

OrderID CustomerID Order Tanggal Total
1 7 1/24/17 19.99
2 9 1/25/17 24.99
ProductID Produk Count
1 Teddy Bears 1
2 Kacang Jelly 100
ProductOrderID ProductID OrderID
101 1 1
102 2 1

Wara-wara carane saben meja duwe ID unik dhewe lapangan. Iki kunci utama. Kita link tabel kanthi nggunakake Nilai utama utami minangka tombol manca ing liyane Tabel. Maca liyane babagan kunci utama lan kunci manca.

Database kesalahan # 2: Nemokake Tabel ing Tabel

Iki minangka kesalahan umum liyane, nanging ora sengaja nyedhiyakake cukup minangka kothak repetitive. Nalika ngrancang database, sampeyan pengin nggawe manawa kabeh data ing tabel ngandut dhewe. Iku kaya game anak babagan nliti apa beda. Yen sampeyan duwe pisang, strawberry, peach lan pesawat televisi, pesawat televisi bisa uga ana ing panggon liya.

Bebarengan karo garis sing padha, yen sampeyan duwe tabel penjualan wong, kabeh informasi ing tabel kasebut kudu nyaritakake khusus marang wong sing dodol. Informasi tambahan sing ora unik kanggo wong sing dodol kasebut bisa dadi panggonan liya ing basis data sampeyan.

SalesID Pisanan Pungkasan Alamat PhoneNumber Kantor KantorNumber
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 (East) (211) 855-4541
3 Joe Paroki 428 Aker St, Austin, TX (215) 545-5545 Austin Downtown (212) 421-2412

Nalika tabel iki bisa katon kaya kabeh sing ana hubungane karo salesman, ana sing duwe tabel sing kasedhiya ing tabel. Kabar apa Kantor lan KantorNumber mbaleni karo "Austin Downtown". Apa yen ana owah-owahan telpon kantor? Sampeyan bakal perlu nganyari kabeh data kanthi siji informasi sing ganti, sing ora apik. Kothak iki kudu dipindhah menyang meja dhewe.

SalesID Pisanan Pungkasan Alamat PhoneNumber KantorID
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 Paroki 428 Aker St, Austin, TX (215) 545-5545 1
KantorID Kantor KantorNumber
1 Austin Downtown (212) 421-2412
2 New York (East) (211) 855-4541

Desain jinis iki uga menehi sampeyan kemampuan kanggo nambah informasi tambahan menyang meja Kantor tanpa nggawe ngipi elek saka keruwetan ing tabel wong sales. Bayangkan pinten karya sing bakal mung nglacak alamat werna, kutha, negara lan kode pos yen kabeh informasi kasebut ana ing meja pamrenta!

Database kesalahan # 3: Nganggo loro utawa luwih potongan informasi ing Lapangan Tunggal

Nemtokake informasi kantor menyang tabel wong sing dodolan ora mung masalah karo database kasebut. Bidang alamat iki nduweni telu informasi: alamat jalan, kutha lan negara. Saben lapangan ing basis data mung kudu ngemot siji informasi. Yen sampeyan duwe sawetara informasi ing sawijining kolom, bisa dadi luwih angel kanggo nggoleki basis data kanggo informasi.

Contone, apa yen kita pengin nglakoni pitakonan ing kabeh wong-wong sales saka Austin? Kita kudu nelusuri ing kolom alamat, sing ora mung ora efisien, nanging bisa ngowahi informasi sing ora apik. Sawise kabeh, apa sing kedadeyan yen wong urip ing dalan Austin ing Portland, Oregon?

Punika ingkang kedah dipuntingali tabel:

SalesID Pisanan Pungkasan Address1 Address2 Kutha Negara Zip Telpon
1 Sam Elliot 118 Utama St Austin TX 78720 2155555858
2 Alice Smith 504 2nd St. New York NY 10022 2111221821
3 Joe Paroki 428 Aker St Apt 304 Austin TX 78716 2155455545

Ana pirang-pirang prakara sing ana ing kene. Kaping pisanan, "Address1" lan "Address2" bakal katon ing kesalahan lapangan sing bola-bali.

Nanging, ing kasus iki, wong-wong mau nyebutake potongan-potongan data kapisah sing gegayutan langsung karo wong sing dodolan tinimbang grup data sing kudu diulang dhewe.

Uga, minangka kesalahan bonus kanggo nyegah, sok dong mirsani carane formatting kanggo nomer telpon wis diilangi saka meja. Sampeyan kudu supaya nyimpen format kothak yen kabeh bisa. Ing kasus nomer telpon, ana pirang-pirang cara wong nulis nomer telpon: 215-555-5858 utawa (215) 555-5858. Iki bakal nggawe nggoleki wong sing dodolan karo nomer telpon utawa ngupayakake panelusuran wong sales ing kode wilayah padha luwih angel.

Database kesalahan # 4: Ora nggunakake Kunci Utama sing bener

Ing sawetara kasus, sampeyan bakal pengin nggunakake nomer tambahan kanthi otomatis utawa sawetara nomer sing diwatesi utawa alfanumerik kanggo kunci utami. Sampeyan kudu supaya ora nggunakake informasi sing nyata kanggo kunci primèr sanajan sampeyan kaya iku bakal nggawe pengenal sing apik.

Contone, saben kita duwe nomer jaminan sosial kita dhewe, supaya nggunakake nomer jaminan sosial kanggo basis data pegawe bisa uga kaya swara. Nanging nalika langka, malah bisa uga nomer keamanan sosial sing bisa diganti, lan kita ora pengin tombol utami kanggo ngganti.

Lan kuwi masalah karo nggunakake informasi nyata minangka nilai tombol. Sampeyan bisa ngganti.

Database kesalahan # 5: Ora nggunakake Konvensi Naming

Iki mbokmenawa ora kaya swara gedhe nalika sampeyan miwiti nggawe utawa ngrancang database, nanging yen sampeyan kepengin nulis pitakonan babagan database kanggo njupuk informasi, nduwe konvensi penamaan bakal mbantu ngeling-eling jeneng lapangan.

Coba bayangno proses sing luwih angel yen jeneng kasebut disimpen minangka FirstName, LastName ing siji tabel lan first_name, last_name ing tabel liyane.

Konvensi penamaan umum sing paling populer yaiku ngginaake aksara pisanan saben tembung ing lapangan utawa misahake tembung sing nggunakake underscore. Sampeyan uga bisa ndeleng sawetara pangembang sing ngganti aksara pisanan saben tembung kajaba tembung pisanan: firstName, lastName.

Sampeyan uga pengin milih nggunakake jeneng tabel singular utawa jeneng tabel jamak. Punapa Tabel Urutan utawi Tabel Pesenan? Apa meja Pelanggan utawa meja Pelanggan? Maneh, sampeyan ora pengin macet karo Tabel Urutan lan tabel Pelanggan.

Konvènsi penamaan sing panjenengan pilih ora penting minangka proses milih lan nempel menyang konvènsi penamaan.

Database kesalahan # 6: Indexing samesthine

Indexing minangka salah sawijining hal sing paling angel kanggo nemtokake hak, utamane kanggo desain database sing anyar. Kabeh tombol utama lan kunci manca kudu diindeks. Iki minangka pranala tabel bebarengan, supaya tanpa indeks, sampeyan bakal weruh kinerja banget kurang saka database.

Nanging apa sing kerep ditemokake minangka lapangan liyane. Iki minangka "WHERE". Yen sampeyan kerep arep ngempet panelusuran kanthi nggunakake lapangan ing klausa WHERE, sampeyan pengin mikir babagan nglebokake indeks kasebut. Nanging, sampeyan ora pengin ngindeks kanthi cepet ing tabel, sing uga bisa ngrusak kinerja.

Carane arep? Iki minangka bagéan saka desain rancangan basis data. Ora ana watesan hard kanggo nggoleki indeks sing kudu dilebokake ing meja. Utamané, sampeyan pengin ngindeks lapangan apa wae sing kerep digunakake ing klausa WHERE. Maca luwih lengkap babagan ngindikasi database kanthi bener.