Өгөгдлийн сангийн дизайны талаархи нийтлэг алдаанууд

Хэдэн зуун бичлэг, сая сая бичлэгийг агуулсан мэдээллийн сантай байгаа эсэхээс үл хамааран мэдээллийн санг зөв зохиох нь үргэлж чухал юм. Мэдээллийг дахин олж авах нь илүү хялбар болохоос гадна ирээдүйд мэдээллийн санг улам хялбар болгох болно. Харамсалтай нь, ирээдүйд хүнд хэцүү зүйлсийг бий болгох цөөн тооны хуруунд амархан ордог.

Мэдээллийн санг хэвшсэн сэдвээр бүхэлд нь ном бичдэг боловч хэрэв та эдгээр алдаанаас зайлсхийвэл сайн мэдээллийн сан дизайн хийхэд зөв зам дээр байх болно.

Өгөгдлийн сангийн алдаа # 1: Хүснэгт дэх талбаруудыг давтах

Өгөгдлийн сангийн сайн дизайныг эрэмбэлэх үндсэн дүрэм бол дахин давтагдах өгөгдлийг хүлээн зөвшөөрч, давтаж буй багануудыг өөрийн хүснэгтэд оруулах явдал юм. Хүснэгт дэх талбаруудыг дахин давтах нь дэлхийн хүснэгтээс ирсэн хүмүүст түгээмэл боловч хүснэгтүүд нь дизайнаар хавтгайруулсан хэвээр байгаа бол өгөгдлийн сан нь харилцан хамааралтай байх ёстой. Энэ нь 2D-ээс 3D руу явахтай адил юм.

Аз болоход давтагдашгүй талбарууд нь ихэвчлэн хялбархан байдаг. Зүгээр л энэ хүснэгтийг харна уу:

OrderID Бүтээгдэхүүн1 Бүтээгдэхүүн2 Бүтээгдэхүүн3
1 Тэдди баавгай Jelly Beans
2 Jelly Beans

Захиалга нь дөрвөн бүтээгдэхүүнийг агуулдаг бол яах вэ? Бид 3-аас дээш бүтээгдэхүүнийг дэмжихийн тулд өөр талбарыг нэмэх хэрэгтэй болно. Хэрэв бид өгөгдөл оруулахад туслахын тулд клиент програмыг бүтээсэн бол түүнийг шинэ бүтээгдэхүүний талбарт өөрчлөх хэрэгтэй болно. Захиалга дээр бид бүх захиалгыг яаж олох вэ? Бүтээгдэхүүний талбар бүрийг SQL илэрхийллээр бид дараах хүснэгтэд оруулах шаардлагатай болно: SELECT * FROM Products WHERE Product1 = 'Jelly Beans' OR Product2 = 'Jelly Beans' OR Product3 = 'Jelly Beans'.

Бүх мэдээллийг нэгтгэн нэг хүснэгттэй байхын оронд бид тусдаа гурван хэсгээс бүрдсэн гурван хүснэгттэй байх ёстой. Энэ жишээнд, Захиалгын хүснэгтэд захиалгатай холбоотой мэдээлэл, Бүтээгдэхүүний хүснэгтэд бүх бүтээгдэхүүн, Бүтээгдэхүүний Захиалга бүхий таблет бүхий бүтээгдэхүүнийг захиалгад холбохыг хүсч байна.

OrderID CustomerID Захиалгын огноо Нийт
1 7 1/24/17 19.99
2 9 1/25/17 24.99
ProductID Бүтээгдэхүүн Тоо
1 Тэдди баавгай 1
2 Jelly Beans 100
ProductOrderID ProductID OrderID
101 1 1
102 2 1

Хүснэгт бүр нь өөрийн өвөрмөц ID талбартай байгааг анхаарна уу. Энэ бол үндсэн түлхүүр юм. Бид өөр ширээн дээр гадаад түлхүүрийн үндсэн түлхүүрийг ашиглан хүснэгтүүдийг холбож өгдөг. Анхны түлхүүр болон гадаад түлхүүрүүдийн талаар дэлгэрэнгүй уншина уу.

Өгөгдлийн сангийн алдаа # 2: Хүснэгтэнд Хүснэгтийг оруулах

Энэ бол бас нэг нийтлэг алдаа юм, гэхдээ энэ нь үргэлж давтагдах талбар шиг үргэлжлэх зүйл биш юм. Өгөгдлийн санг зохион бүтээхдээ та хүснэгтэд байгаа бүх өгөгдөл өөрөө хамааралтай эсэхийг шалгаарай. Энэ нь хүүхдийн ялгавартай байдлыг олж хардаг тоглоом юм. Хэрэв та гадил жимсний, гүзээлзгэнэ, тоор, телевизийн багцтай бол телевизийн багц нь хаа нэгтээ өөр газар байдаг.

Хэрвээ та борлуулалтын хүмүүсийн хүснэгттэй бол эдгээр хүснэгтийн дагуу тэр хүснэгтэд байгаа бүх мэдээлэл тухайн борлуулагчтай холбоотой байх ёстой. Энэ борлуулалттай хэн нэгэн онцгой мэдээлэл таны мэдээллийн санд хаа нэгтээ байж болно.

Борлуулалтын үйлчилгээ Эхлээд Хамгийн сүүлд Хаяг Утасны дугаар Оффис OfficeNumber
1 Сэм Эллиот 118 Main St, Austin, TX (215) 555-5858 Austin хотхон (212) 421-2412
2 Алис Смит Нью Йорк, Нью-Йорк хотын 504 дугаар гудамж (211) 122-1821 Нью-Йорк (Зүүн) (211) 855-4541
3 Жо Parish 428 Aker St, Austin, TX (215) 545-5545 Austin хотхон (212) 421-2412

Хэдийгээр энэ хүснэгтэд борлуулалтын ажилтантай холбоотой бүхэл зүйлтэй адилхан боловч хүснэгтэд агуулагдсан хүснэгттэй байна. Office & OfficeNumber яаж "Austin Downtown" -аар давтаж байгааг санаарай. Албан утасны утасны дугаар өөрчлөгдвөл яах вэ? Та бүхэн нэг өгөгдлийг шинэчилдэг мэдээллийн нэг хэсгийг шинэчлэх хэрэгтэй бөгөөд энэ нь хэзээ ч сайн зүйл биш юм. Эдгээр талбаруудыг өөрийн ширээн дээр шилжүүлэх хэрэгтэй.

Борлуулалтын үйлчилгээ Эхлээд Хамгийн сүүлд Хаяг Утасны дугаар OfficeID
1 Сэм Эллиот 118 Main St, Austin, TX (215) 555-5858 1
2 Алис Смит Нью Йорк, Нью-Йорк хотын 504 дугаар гудамж (211) 122-1821 2
3 Жо Parish 428 Aker St, Austin, TX (215) 545-5545 1
OfficeID Оффис OfficeNumber
1 Austin хотхон (212) 421-2412
2 Нью-Йорк (Зүүн) (211) 855-4541

Энэ төрлийн загвар нь борлуулалтын хүний ​​ширээн дээр хар дарсан зүүдэнд хар дарсан зүүд зүүдэлэлгүйгээр Албан хүснэгтэд нэмэлт мэдээллийг нэмж өгөх боломжийг танд олгоно. Энэ бүх мэдээллийг борлуулалтын хүний ​​ширээнд байсан бол гудамжны хаяг, хот, муж, зип кодыг хянаж байхын тулд хэр их ажил хийхийг төсөөлөөд үз дээ!

Өгөгдлийн сангийн алдаа # 3: Нэг талбарт хоёр буюу түүнээс олон мэдээллийг оруулах

Борлуулалтын хүний ​​хүснэгтэд оффисын мэдээллийг оруулах нь уг мэдээллийн сантай холбоотой цорын ганц асуудал биш юм. Хаягийн талбар нь гурван төрлийн мэдээллийг агуулдаг: гудамжны хаяг, хот, муж. Өгөгдлийн сангийн талбар бүр нь зөвхөн ганц ширхэг мэдээлэл агуулна. Нэг талбарт олон тооны мэдээлэл байгаа тохиолдолд мэдээллийн баазыг асуухад илүү төвөгтэй болно.

Жишээ нь, бид Остинаас борлуулалтын бүх хүмүүс дээр асуулга явуулахыг хүсэж байгаа бол яах вэ? Бид хаягийн талбарт хайх хэрэгтэй бөгөөд энэ нь зөвхөн үр ашиггүй төдийгүй муу мэдээлэл буцааж өгдөг. Эцсийн эцэст, Орегоны Орегон муж дахь Остин гудамжинд амьдардаг хүн яах бол?

Энд хүснэгт дараах байдлаар харагдах ёстой:

Борлуулалтын үйлчилгээ Эхлээд Хамгийн сүүлд Хаяг 1 Хаяг 2 Хот Улс Zip Утас
1 Сэм Эллиот 118 гол St Остин TX 78720 2155555858
2 Алис Смит 504 дахь St Нью Йорк NY 10022 2111221821
3 Жо Parish 428 Aker St Apt 304 Остин TX 78716 2155455545

Энд тэмдэглэх хэд хэдэн зүйл бий. Нэгдүгээрт, "Address1" болон "Address2" нь давтагдсан талбайн алдаатай тулгардаг.

Гэсэн хэдий ч, энэ тохиолдолд тэд өөрсдийн хүснэгтэд байх ёстой өгөгдлийн давталтаас илүүтэй борлуулалттай хүнтэй шууд холбоотой холбоотой өгөгдлийг тусад нь авч үздэг.

Түүнчлэн зайлсхийхийн тулд урамшуулал алдааны улмаас утасны дугаарыг форматлах хүснэгтийг ширээнээс хэрхэн яаж харсаныг ажиглаарай. Аль болох боломжтой талбаруудын форматыг хадгалахаас зайлсхийх хэрэгтэй. Утасны дугаар нь утасны дугаарыг 215-555-5858 эсвэл (215) 555-5858 гэж бичих олон арга зам байдаг. Энэ нь борлуулалтын ажилтнуудыг утасны дугаараар нь эрж хайж олох эсвэл тухайн бүс нутгийн кодоор борлуулалтын хүмүүсийг хайж олоход илүү төвөгтэй болдог.

Өгөгдлийн сангийн алдаа # 4: Үндсэн түлхүүрийг зөв ашиглахгүй байх

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

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

Бодит мэдээлэлийг гол утга болгон ашиглах нь энэ асуудал юм. Энэ нь өөрчлөгдөж болно.

Өгөгдлийн сан алдаатай # 5: Нэршлийн конвенцийг ашиглахгүй байх

Эхлээд та өөрийн мэдээллийн санг зохион бүтээхэд ихээхэн анхаарал хандуулахгүй байж магадгүй ч мэдээллийн санд хандахын тулд өгөгдлийн сангийн эсрэг асуулт бичих хүртэл, талбарын нэрийг цээжилж байх үед нэр томъёоны тайлбар нь тус болно.

Нэрс нь FirstName, LastName гэсэн нэг хүснэгт, first_name, last_name гэсэн өөр нэг хүснэгтэд нэрүүдийг хадгалсан тохиолдолд илүү хэцүү үйл явцыг төсөөлөөд үзээрэй.

Хамгийн алдаршсан хоёр нэр томъёоны цуглуулга нь талбайн бүх үсгүүдийн эхний үсэг эсвэл доогуур зураас ашиглан үгсийг салгах явдал юм. Зарим хөгжүүлэгчид эхний үгнээс эхлээд үг бүрийг эхний үсэг болгон бичихийг та харах болно: firstName, lastName.

Та мөн ганц тооны хүснэгт эсвэл хүснэгт нэрийг ашиглахыг шийднэ. Энэ нь захиалгын хүснэгт эсвэл захиалгын хүснэгт үү? Хэрэглэгчийн хүснэгт эсвэл Хэрэглэгчийн хүснэгт үү? Дахин хэлэхэд захиалгын хүснэгт болон хэрэглэгчийн хүснэгтэд гацахыг хүсэхгүй байна.

Таны сонгосон нэр томъёоны зарчим нь тухайн нэр томъёоны тогтоолыг сонгох, дагах үйл явцтай адил чухал биш юм.

Өгөгдлийн сангийн алдаа # 6: Тохиромжгүй индексжүүлэлт

Индексжүүлэх нь зөв олж авахад хамгийн хэцүү зүйлсийн нэг юм. Анхдагч түлхүүрүүд болон гадаад түлхүүрүүдийг индексжүүлэх хэрэгтэй. Эдгээр нь холболтын хүснэгтүүдтэй хамт байх бөгөөд индексгүйгээр та мэдээллийн баазаас маш муу гүйцэтгэлийг харах болно.

Гэхдээ бусад талбаруудыг хэтэрхий ихээр алддаг. Эдгээр нь "WHERE" талбар юм. Хэрвээ та ДЭМБ-ын хэллэгээр талбарыг ашиглан хайхдаа нарийсч байгаа бол энэ талбарт индекс тавих талаар бодохыг хүсч байна. Гэсэн хэдий ч, та хүснэгтэд хэтэрхий индексжүүлэхийг хүсэхгүй байгаа бөгөөд энэ нь гүйцэтгэлийг гэмтээж болно.

Яаж шийдэх вэ? Энэ бол мэдээллийн сангийн дизайны нэг хэсэг юм. Хүснэгтэд хичнээн олон индекс тавих ёстойг хатуу хязгаарлахгүй. Үндсэндээ та WHERE -р хэсэгт олонтаа хэрэглэгддэг талбарыг индексжүүлэхийг хүсч байна. Мэдээллийн баазыг зөв индексжүүлэх талаар дэлгэрэнгүй уншина уу.