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.