Kasalahan umum Dijieun dina databés Desain

Naha anjeun gawé bareng database nu nyepeng ratusan rékaman atawa jutaan rékaman, desain database ditangtoskeun sok penting. Henteu ngan bakal dinya nyieun retrieving informasi nu loba gampang, éta ogé bakal simplify ngembangna database dina mangsa nu bakal datang. Hanjakal, éta gampang turun kana sababaraha sarap nu bisa nyieun hal hésé dina mangsa nu bakal datang.

Aya sakabéh buku ditulis dina subyek normalizing database, tapi lamun ngan saukur ulah ieu kasalahan umum, anjeun bakal on lagu katuhu kana desain database alus.

Database kasalahan # 1: Repeating Widang dina Table a

Hiji aturan dasar jempol keur desain database alus nyaeta ngakuan data repeating sarta nempatkeun jalma kolom repeating dina tabél sorangan. Repeating huma di méja geus ilahar pikeun maranéhanana anu geus datangna ti alam dunya spreadsheets, tapi bari spreadsheets condong jadi datar ku rarancang, basis data kedah relational. Ieu kawas akang ti 2D kana 3D.

Kabeneran, sawah repetitive téh biasana gampang titik. Ngan butuh katingal di tabel ieu:

OrderID Product1 Product2 Product3
1 Teddy ngasuh jelly Kacang
2 jelly Kacang

Naon kajadian nalika hiji urutan ngandung opat produk? Urang bakal butuh pikeun nambahkeun widang séjén pikeun tabel pikeun ngarojong leuwih ti tilu produk. Tur upami urang geus ngawangun hiji aplikasi klien sabudeureun tabél pikeun mantuan kami data input, urang bisa kudu ngarobah éta kalayan widang produk anyar. Na kumaha urang neangan sadaya pesenan kalawan Jellybeans dina urutan ka? Urang bakal kapaksa pamundut unggal widang produk di tabél kalawan pernyataan SQL anu bisa kasampak kawas: Pilih * FROM Produk WHERE Product1 = 'Jelly Kacang' OR Product2 = 'Jelly Kacang' OR Product3 = 'Jelly Kacang'.

Gantina gaduh tabel tunggal nu stuffs sagala informasi babarengan, urang kudu boga tilu tabel nu unggal nyekel sapotong béda inpormasi. Dina conto ieu, urang bakal hoyong hiji méja pesenan kalayan informasi ngeunaan urutan sorangan, hiji méja Produk kalayan sakabéh produk urang sarta tablet ProductOrders anu numbu produk mun ordo.

OrderID CustomerID Tanggal urutan total
1 7 1/24/17 19,99
2 9 1/25/17 24,99
ProductID barang ngitung
1 Teddy ngasuh 1
2 jelly Kacang 100
ProductOrderID ProductID OrderID
101 1 1
102 2 1

Perhatikeun kumaha unggal méja boga sawah ID unik na sorangan. Ieu tombol primér. Urang numbu tabel ku maké nilai konci primér salaku konci asing dina tabél sejen. Baca leuwih seueur tentang kenop primér sarta kenop asing.

Database kasalahan # 2: Embedding Table di Table a

Ieu kasalahan umum sejen, tapi teu salawasna nangtung kaluar rada saloba widang repetitive. Nalika ngarancang database a, rék mastikeun sakabéh data dina méja relates to sorangan. Ieu kawas kaulinan anu anak urang ngeunaan spotting naon béda. Upami Anjeun gaduh cau, strawberry hiji, peach a sarta set televisi, dina set televisi meureun milik tempat sejenna.

Sapanjang garis sarua, lamun boga daptar jalma jualan, sakabéh informasi dina tabel anu sakuduna pakaitna husus pikeun nu baé jualan. Sagala informasi tambahan nu teu unik pikeun nu baé jualan bisa milik tempat sejenna di databés anjeun.

SalesID kahiji panungtungan alamat Nomer telepon kantor OfficeNumber
1 Sam Elliot 118 Main St, Austin, TX (215) 555-5858 Austin kota (212) 421-2412
2 Alice Smith 504 2nd Street, New York, NY (211) 122-1821 New York (nusa tenggara timur) (211) 855-4541
3 Joe paroki 428 Aker St, Austin, TX (215) 545-5545 Austin kota (212) 421-2412

Bari tabel ieu bisa kasampak kawas eta sadayana patali jeung salesperson individual, eta sabenerna ngabogaan tabel study dina meja. Perhatikeun kumaha Kantor na OfficeNumber ulang ku "Austin kota". Kumaha lamun hiji nomer telepon kantor robah? Anjeun bakal peryogi pikeun ngapdet sacara gembleng set data pikeun hiji sapotong tunggal ngarobah informasi, nu pernah hiji hal anu alus. Widang ieu kudu dipindahkeun ka méja sorangan.

SalesID kahiji panungtungan alamat Nomer telepon 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 paroki 428 Aker St, Austin, TX (215) 545-5545 1
OfficeID kantor OfficeNumber
1 Austin kota (212) 421-2412
2 New York (nusa tenggara timur) (211) 855-4541

jenis ieu design oge mere Anjeun kamampuhan pikeun nambahkeun émbaran tambahan kana méja Kantor tanpa nyieun hiji ngimpina of clutter dina tabel jualan jalma. Ngabayangkeun sabaraha pagawean eta bakal ka saukur ngalacak kodeu alamat jalan, kota, kaayaan sarta pos lamun sakabéh informasi anu dina tabel jualan baé!

Database kasalahan # 3: Putting Dua atawa More Potongan tina Émbaran Kana hiji Lapang Tunggal

Embedding informasi kantor kana méja jualan baé éta teu hijina masalah database éta. Widang alamat ngandung tilu potongan informasi: alamat jalan, kotana jeung nagara. Unggal widang dina database kedah ngan ngandung hiji sapotong tunggal informasi. Lamun anjeun boga sababaraha potongan informasi dina widang tunggal, eta bisa jadi harder kana pamundut databés pikeun informasi.

Contona, kumaha lamun urang hayang ngajalankeun hiji pamundut on sakabeh jalma jualan ti Austin? Urang bakal perlu neangan dina widang alamat, nu teu ukur episien, tapi bisa balik deui informasi goréng. Barina ogé, naon kajadian lamun batur cicing dina Austin jalan di Portland, Oregon?

Di dieu Kang naon tabél kedah kasampak kawas:

SalesID kahiji panungtungan Alamat 1 Address2 kota kaayaan pos telepon
1 Sam Elliot 118 Main St Austin TX 78720 2155555858
2 Alice Smith 504 2nd St York énggal Ny 10022 2111221821
3 Joe paroki 428 Aker St apt 304 Austin TX 78716 2155455545

Aya sababaraha hal anu dicatet di dieu. Kahiji, "Address1" jeung "Address2" sigana bakal tumiba dina repetitive kasalahan widang.

Sanajan kitu, dina hal ieu sipatna ngarujuk kana potongan misah data anu nyaritakeun langsung ka jalma jualan tinimbang grup repeating data nu kudu indit dina tabél sorangan.

Ogé, sakumaha kasalahan bonus ulah, perhatikeun kumaha pormat keur nomer telepon geus dilucuti kaluar tina tabél. Anjeun kedah ulah aya nyimpen format widang nalika pisan mungkin. Dina kasus nomer telepon, aya sababaraha cara jalma nulis nomer telepon: 215-555-5858 atawa (215) 555-5858. Ieu bakal nyieun neangan hiji jalma jualan ku nomer telepon maranéhanana atawa ngalakonan pilarian jalma jualan di wewengkon sarua kode beuki hésé.

Database kasalahan # 4: Teu Maké Key primér bener

Dina kalolobaan instansi, anjeun bakal hoyong nganggo hiji angka otomatis incrementing atawa sababaraha angka dihasilkeun séjén atawa alpanumérik pikeun konci primér Anjeun. Anjeun kedah ulah aya maké informasi aktual wae kanggo konci primér malah lamun keur disada kawas eta bakal ngadamel identifier alus.

Contona, urang masing-masing boga angka jaminan sosial individu urang sorangan, jadi ngagunakeun jumlah jaminan sosial pikeun database karyawan bisa disada kawas mangrupakeun ide nu sae. Tapi bari langka, éta mungkin keur malah sababaraha jaminan sosial pikeun ngarobah, sarta kami pernah hoyong konci primér urang pikeun ngaganti.

Na yén teh masalah kalayan ngagunakeun informasi aktual salaku nilai konci. Ieu bisa ngarobah.

Database kasalahan # 5: Henteu Maké Konvénsi pangaranan

Hal ieu bisa teu disada kawas deal badag sawaktos Anjeun pertama ngamimitian ngarancang databés anjeun, tapi sakali anjeun meunang ka point of tulisan queries ngalawan databés pikeun meunangkeun informasi, gaduh konvénsi ngaran baris mantuan anjeun ngapalkeun ngaran lapangan.

Ngan ngabayangkeun sabaraha leuwih hese anu proses bakal jadi lamun ngaran anu disimpen salaku FirstName, LastName dina hiji méja na first_name, last_name dina tabél sejen.

Dua Konvénsi ngaran pang populerna anu capitalizing hurup mimiti unggal kecap dina widang atawa misahkeun kecap maké hiji underscore. Anjeun oge bisa ningali sababaraha pamekar capitalizing hurup mimiti unggal kecap iwal kecap munggaran: firstName, lastName.

Anjeun oge bakal hoyong mutuskeun dina ngagunakeun tunggal ngaran méja atawa ngaran tabel jamak. Éta hiji méja Orde atanapi hiji méja pesenan? Éta hiji méja Palanggan atanapi Konsumén méja? Deui, anjeun teu hayang jadi nyangkut jeung hiji méja Orde sarta méja Konsumén.

Konvénsi pangaranan anjeun milih henteu sakumaha penting minangka prosés sabenerna milih na nempel ka konvénsi pangaranan.

Database kasalahan # 6: Indexing bener

Indexing mangrupa salah sahiji hal hardest mun meunang katuhu, hususna keur jalma nu anyar dina desain database. Kabéh kenop primér sarta kenop asing kudu saestuna. Ieu naon ieu numbu tabel babarengan, jadi tanpa hiji indéks, anjeun bakal nempo pagelaran miskin pisan kaluar tina databés anjeun.

Tapi naon teuing mindeng lasut téh huma lianna. Di handap ieu mangrupakeun "WHERE" huma. Mun anjeun mindeng bade ngahususkeun pilarian Anjeun ku ngagunakeun sawah dina klausa WHERE, rék mikir ngeunaan putting hiji indéks dina widang éta. Najan kitu, anjeun teu hayang overly indéks tabél, nu ogé bisa menyakiti kinerja.

Kumaha carana mutuskeun? Ieu bagian tina seni desain database. Aya henteu wates teuas dina sabaraha indexes anjeun kudu ditunda méja. Utamina, rék indéks naon widang anu remen dipake dina klausa WHERE. Baca leuwih seueur tentang leres indexing databés anjeun.