డేటాబేస్ డిజైన్ లో మేడ్ మిస్టేక్స్

మీరు వందల రికార్డులను లేదా మిలియన్ల రికార్డులను కలిగి ఉన్న డేటాబేస్తో పని చేస్తున్నా, సరైన డేటాబేస్ రూపకల్పన ఎల్లప్పుడూ ముఖ్యం. ఇది సమాచారాన్ని మరింత సులభతరం చేస్తుంది, ఇది భవిష్యత్తులో డేటాబేస్ను విస్తరించడాన్ని సులభతరం చేస్తుంది. దురదృష్టవశాత్తు, భవిష్యత్తులో కష్టతరం చేయగల కొన్ని ఉచ్చులు వస్తాయి.

ఒక డేటాబేస్ను సాధారణీకరించే అంశంపై వ్రాసిన మొత్తం పుస్తకాలు ఉన్నాయి, కానీ మీరు ఈ సాధారణ తప్పులను నివారించినట్లయితే, మీరు మంచి డేటాబేస్ రూపకల్పనకు సరైన మార్గంలో ఉంటారు.

డేటాబేస్ తప్పు # 1: రిపీటింగ్ ఫీల్డ్స్ ఇన్ ఎ టేబుల్

మంచి డాటాబేస్ డిజైన్ కోసం thumb యొక్క ఒక ప్రాథమిక నియమం పునరావృత డేటా గుర్తించడం మరియు వారి సొంత పట్టికలో ఆ పునరావృత నిలువు ఉంచాలి. స్ప్రెడ్ షీట్ ల ప్రపంచం నుండి వచ్చిన వారికి ఒక పట్టికలో పునరావృత ఖాళీలను ఉంటాయి, కానీ స్ప్రెడ్షీట్లు డిజైన్ ద్వారా ఫ్లాట్గా ఉండగా, డేటాబేస్లు రిలేషనల్గా ఉండాలి. ఇది 2D నుండి 3D కు వెళుతున్నట్లుగా ఉంది.

అదృష్టవశాత్తూ, పునరావృత ఖాళీలను సాధారణంగా గుర్తించడం సులభం. ఈ పట్టికను పరిశీలించండి:

ఆర్డర్ గుర్తింపు సంఖ్యా ఉత్పత్తి 1 Product2 Product3
1 టెడ్డి ఎలుగుబంట్లు జెల్లీ బీన్స్
2 జెల్లీ బీన్స్

ఒక ఆర్డర్ నాలుగు ఉత్పత్తులను కలిగి ఉన్నప్పుడు ఏమి జరుగుతుంది? మేము మూడు కంటే ఎక్కువ ఉత్పత్తులకు మద్దతివ్వడానికి మరొక ఫీల్డ్ను పట్టికలో చేర్చాలి. మనము ఇన్పుట్ డాటాకు సహాయం చేయడానికి పట్టిక చుట్టూ క్లయింట్ అప్లికేషన్ ను నిర్మించినట్లయితే, దాన్ని కొత్త ఉత్పత్తి ఫీల్డ్తో సవరించాలి. మరియు మేము క్రమంలో జెల్లీబీన్స్తో అన్ని ఆర్డర్లు ఎలా కనుగొనగలం? ఉత్పన్నమయ్యే SQL ప్రకటనతో పట్టికలో ప్రతి ఉత్పాదక క్షేత్రాన్ని ప్రశ్నించడానికి మేము బలవంతం అవుతాము: ఉత్పత్తుల నుండి SELECT * WHERE ఉత్పత్తి 1 = 'జెల్లీ బీన్స్' OR ఉత్పత్తి 2 = 'జెల్లీ బీన్స్' OR ప్రొడక్షన్ 3 = 'జెల్లీ బీన్స్'.

అన్ని సమాచారంతో కలిసి ఒకే పట్టికను కలిగి ఉండటానికి బదులుగా, మనకు ప్రతి ఒక్కటి సమాచారాన్ని కలిగి ఉన్న మూడు పట్టికలు ఉండాలి. ఈ ఉదాహరణలో, మన ఆర్డర్స్ టేబుల్, మా ఉత్పత్తుల అన్ని ఉత్పత్తుల పట్టిక మరియు ఉత్పత్తి ఉత్పత్తులను ఆ ఉత్పత్తులతో అనుసంధానించే ఒక ProductOrders టాబ్లెట్ గురించి సమాచారాన్ని కలిగి ఉంటుంది.

ఆర్డర్ గుర్తింపు సంఖ్యా CustomerID ఆర్డర్ తేదీ మొత్తం
1 7 1/24/17 19.99
2 9 1/25/17 24.99
ProductID ఉత్పత్తి కౌంట్
1 టెడ్డి ఎలుగుబంట్లు 1
2 జెల్లీ బీన్స్ 100
ProductOrderID ProductID ఆర్డర్ గుర్తింపు సంఖ్యా
101 1 1
102 2 1

ప్రతి పట్టిక దాని స్వంత ప్రత్యేక ID ఫీల్డ్ను ఎలా కలిగి ఉందో గమనించండి. ఇది ప్రాథమిక కీ. మేము మరొక పట్టికలో ఒక విదేశీ కీ వలె ప్రాధమిక కీ విలువను ఉపయోగించి పట్టికలను లింక్ చేస్తాము. ప్రాథమిక కీలు మరియు విదేశీ కీల గురించి మరింత చదవండి.

డేటాబేస్ మిస్టేక్ # 2: టేబుల్లో పట్టికను పొందుపర్చడం

ఇది మరొక సాధారణ తప్పు, కానీ ఇది పునరావృతమయ్యే రంగాలలో చాలా వరకు నిలబడదు. ఒక డేటాబేస్ రూపకల్పన చేసినప్పుడు, మీరు ఒక పట్టికలో డేటా అన్ని దానికదే సంబంధం కలిగి నిర్ధారించుకోవాలి. ఇది భిన్నమైనది ఏమిటో గుర్తించడం గురించి ఆ పిల్లల ఆట లాగా ఉంటుంది. మీకు అరటి ఉంటే, ఒక స్ట్రాబెర్రీ, ఒక పీచ్ మరియు ఒక టెలివిజన్ సెట్ ఉంటే, టెలివిజన్ సెట్ బహుశా వేరే చోట ఉంటుంది.

అదే మార్గాల్లో, మీరు అమ్మకాల ప్రజల పట్టికను కలిగి ఉంటే, ఆ పట్టికలోని మొత్తం సమాచారాన్ని ఆ విక్రయ వ్యక్తికి ప్రత్యేకంగా చెప్పాలి. ఆ విక్రయ వ్యక్తికి ప్రత్యేకంగా లేని ఏదైనా అదనపు సమాచారం మీ డేటాబేస్లో వేరే దేశానికి చెందినది కావచ్చు.

SalesID ప్రధమ చివరి చిరునామా ఫోను నంబరు ఆఫీసు OfficeNumber
1 సామ్ ఇలియట్ 118 మెయిన్ స్ట్రీట్, ఆస్టిన్, TX (215) 555-5858 ఆస్టిన్ డౌన్టౌన్ (212) 421-2412
2 ఆలిస్ స్మిత్ 504 2 వ వీధి, న్యూయార్క్, NY (211) 122-1821 న్యూయార్క్ (ఈస్ట్) (211) 855-4541
3 జో పారిష్ 428 అకర్ స్టెల్, ఆస్టిన్, TX (215) 545-5545 ఆస్టిన్ డౌన్టౌన్ (212) 421-2412

ఇది వ్యక్తిగత విక్రయదారుడికి సంబంధించినది లాగానే ఈ టేబుల్ కనిపించవచ్చు, ఇది వాస్తవానికి టేబుల్ లోపల పొందుపర్చిన టేబుల్ ఉంది. Office మరియు OfficeNumber "ఆస్టిన్ డౌన్టౌన్" తో ఎలా పునరావృతం అవుతుందో గమనించండి. ఒక కార్యాలయ ఫోన్ నంబర్ మారితే? మీరు ఒక మంచి విషయం ఎప్పుడూ ఇది మారుతున్న సమాచారం యొక్క ఒకే భాగం కోసం డేటా మొత్తం సెట్ అప్డేట్ చేయాలి. ఈ ఖాళీలను వారి సొంత పట్టికకు తరలించబడాలి.

SalesID ప్రధమ చివరి చిరునామా ఫోను నంబరు OfficeID
1 సామ్ ఇలియట్ 118 మెయిన్ స్ట్రీట్, ఆస్టిన్, TX (215) 555-5858 1
2 ఆలిస్ స్మిత్ 504 2 వ వీధి, న్యూయార్క్, NY (211) 122-1821 2
3 జో పారిష్ 428 అకర్ స్టెల్, ఆస్టిన్, TX (215) 545-5545 1
OfficeID ఆఫీసు OfficeNumber
1 ఆస్టిన్ డౌన్టౌన్ (212) 421-2412
2 న్యూయార్క్ (ఈస్ట్) (211) 855-4541

ఈ విధమైన రూపకల్పన కూడా ఆఫీస్ టేబుల్కు అదనపు సమాచారాన్ని జోడించే సామర్ధ్యం ఇస్తుంది, అమ్మకాలు వ్యక్తి పట్టికలో అయోమయ కవచం సృష్టించడం లేదు. ఆ సమాచారాన్ని అమ్మకాల వ్యక్తి పట్టికలో ఉన్నట్లయితే, వీధి చిరునామా, నగరం, రాష్ట్రం మరియు జిప్ కోడ్ను ట్రాక్ ఎలా ఉంటుందో ఊహించండి!

డేటాబేస్ మిస్టేక్ # 3: ఇన్ఫర్మేషన్ రెండు లేదా అంతకంటే ఎక్కువ పీసీలు ఒకే ఫీల్డ్ లో ఉంచడం

అమ్మకాల వ్యక్తి పట్టికలో కార్యాలయ సమాచారాన్ని పొందుపరచడం ఆ డేటాబేస్తో మాత్రమే సమస్య కాదు. చిరునామా రంగంలో మూడు భాగాలు ఉన్నాయి: వీధి చిరునామా, నగరం మరియు రాష్ట్రం. డేటాబేస్లోని ప్రతి ఫీల్డ్లో ఒకే ఒక్క సమాచారాన్ని మాత్రమే కలిగి ఉండాలి. మీరు ఒకే ఫీల్డ్లో సమాచారాన్ని అనేక భాగాలు కలిగి ఉన్నప్పుడు, సమాచారం కోసం డేటాబేస్ను ప్రశ్నించడం కష్టం అవుతుంది.

ఉదాహరణకు, ఆస్టిన్ నుంచి విక్రయదారులందరిపై ప్రశ్నని అమలు చేయాలని మేము కోరుకున్నాము. మేము చిరునామా ఫీల్డ్లో శోధించవలసి ఉంటుంది, ఇది అసమర్థమైనది కాదు, అయితే చెడ్డ సమాచారాన్ని తిరిగి పొందవచ్చు. అన్ని తరువాత, ఒరెగాన్, పోర్ట్ లాండ్లోని ఆస్టిన్ స్ట్రీట్లో ఎవరైనా జీవిస్తే ఏమి జరుగుతుంది?

ఇక్కడ టేబుల్ ఎలా ఉండాలి:

SalesID ప్రధమ చివరి చిరునామా 1 Address2 సిటీ రాష్ట్రం జిప్ ఫోన్
1 సామ్ ఇలియట్ 118 ప్రధాన సెయింట్ ఆస్టిన్ TX 78720 2155555858
2 ఆలిస్ స్మిత్ 504 సెకండ్ సెయింట్ న్యూయార్క్ NY 10022 2111221821
3 జో పారిష్ 428 అకర్ స్ట్రీట్ Apt 304 ఆస్టిన్ TX 78716 2155455545

ఇక్కడ గమనించవలసిన కొన్ని విషయాలు ఉన్నాయి. మొదటిది, "అడ్రస్ 1" మరియు "అడ్రస్ 2" లు పునరావృత ఖాళీలను పొరపాటున వస్తాయి అనిపించవచ్చు.

ఏదేమైనా, ఈ సందర్భంలో అవి తమ సొంత పట్టికలో వెళ్లవలసిన డేటా యొక్క పునరావృత సమూహంగా కాకుండా విక్రయాల వ్యక్తికి నేరుగా సంబంధించిన డేటాను సూచిస్తాయి.

కూడా, నివారించేందుకు ఒక బోనస్ తప్పుగా, ఫోన్ నంబర్ కోసం ఫార్మాటింగ్ పట్టిక నుండి తొలగించారు ఎలా గమనించండి. సాధ్యమయ్యేటప్పుడు ఖాళీలను ఫార్మాట్ నిల్వ మీరు దూరంగా ఉండాలి. ఫోన్ నంబర్ల విషయంలో, ప్రజలు ఒక ఫోన్ నంబర్ను వ్రాస్తారు: 215-555-5858 లేదా (215) 555-5858. అమ్మకందారుని వారి ఫోన్ నంబర్ ద్వారా వెతకటం లేదా అమ్మకపు ప్రజల శోధనను అదే ప్రాంత కోడ్లో మరింత కష్టతరం చేస్తుంది.

డేటాబేస్ తప్పు # 4: సరైన ప్రాథమిక కీ ఉపయోగించడం లేదు

చాలా సందర్భాల్లో, మీరు మీ ప్రాథమిక కీ కోసం స్వయంచాలకంగా అధిక సంఖ్యలో లేదా కొన్ని ఇతర ఉత్పత్తి సంఖ్య లేదా ఆల్ఫాన్యూమరిక్ ఉపయోగించాలనుకుంటున్నాను. మీరు ఒక మంచి ఐడెంటిఫైయర్ చేస్తారన్నదాని లాగానే ప్రాధమిక కీకి ఏవైనా వాస్తవ సమాచారాన్ని ఉపయోగించకుండా ఉండకూడదు.

ఉదాహరణకు, ప్రతి ఒక్కరికి మన స్వంత వ్యక్తిగత సాంఘిక భద్రతా నంబరు ఉంటుంది, కనుక ఉద్యోగి డేటాబేస్ కోసం సామాజిక భద్రతా నంబరును ఉపయోగించడం మంచి ఆలోచనలాగా ఉంటుంది. కానీ అరుదుగా, సామాజిక భద్రతా నంబర్ మార్చడానికి కూడా అవకాశం ఉంది, మరియు మా ప్రాథమిక కీ మార్చడానికి ఎప్పుడూ ఉండకూడదు.

అసలు సమాచారం కీ విలువగా ఉపయోగించడం సమస్య. ఇది మార్చవచ్చు.

డేటాబేస్ తప్పు # 5: నామకరణ కన్వెన్షన్ ఉపయోగించడం లేదు

మీరు మొదట మీ డేటాబేస్ను రూపకల్పన చేయటం ప్రారంభించినప్పుడు ఇది పెద్ద ఒప్పందంగా ఉండకపోవచ్చు, కానీ మీరు సమాచారాన్ని తిరిగి పొందటానికి డేటాబేస్కు వ్యతిరేకంగా ప్రశ్నలను వ్రాసే సమయంలో, నామకరణ కన్వెన్షన్ మీకు క్షేత్ర పేర్లను గుర్తుంచుకోవడంలో సహాయపడుతుంది.

మరొక పేజిలో పేర్లు మొదటి పేజి, LastName ఒక టేబుల్ మరియు మొదటి_పేరు, last_name లాగా నిల్వ చేయబడితే ఆ ప్రక్రియ ఎంత కష్టంగా ఉంటుందో ఊహించు.

రెండు ప్రముఖ నామకరణ విధానాలు క్షేత్రంలోని ప్రతి పదంలోని మొదటి అక్షరాన్ని లేదా అండర్ స్కోర్ను ఉపయోగించి పదాలను వేరు చేస్తాయి. మీరు మొదటి పదాన్ని తప్ప ప్రతి పదం యొక్క మొదటి అక్షరాన్ని క్యాప్చర్ చేసే కొందరు డెవలపర్లు చూడవచ్చు: firstName, lastName.

మీరు ఏక పట్టిక పేర్లను లేదా బహువచన పట్టిక పేర్లను ఉపయోగించడాన్ని కూడా నిర్ణయించుకోవాలి. ఇది ఒక ఆర్డర్ పట్టిక లేదా ఒక ఆర్డర్స్ టేబుల్? ఇది కస్టమర్ టేబుల్ లేదా కస్టమర్స్ పట్టికగా ఉందా? మళ్ళీ, మీరు ఒక ఆర్డర్ పట్టిక మరియు వినియోగదారుల పట్టికతో కూర్చొని ఉండకూడదు.

వాస్తవానికి ఎంచుకోవడం మరియు నామకరణ కన్వెన్షన్కు అంటుకోవడం వంటి ప్రక్రియ మీరు ఎంచుకునే నామకరణ కన్వెన్షన్ అంత ముఖ్యమైనది కాదు.

డేటాబేస్ తప్పు # 6: అక్రమ ఇండెక్స్

ఇండెక్స్ అనేది ముఖ్యంగా డేటాబేస్ రూపకల్పనలో కొత్తగా, సరిగ్గా పొందడానికి కష్టతరమైన విషయాలలో ఒకటి. అన్ని ప్రాథమిక కీలు మరియు విదేశీ కీలు ఇండెక్స్ చేయాలి. ఈ ఇండెక్స్ లేకుండా ఏ లింక్ పట్టికలు కలిసి ఉన్నాయి, మీరు మీ డాటాబేస్ నుండి చాలా తక్కువ పనితీరును చూస్తారు.

కానీ చాలా తరచుగా ఇతర ఖాళీలను ఉన్నాయి తప్పిన ఉన్నాయి. ఇవి "WHERE" ఫీల్డ్లు. మీరు WHERE నిబంధనలో క్షేత్రాన్ని ఉపయోగించడం ద్వారా తరచుగా మీ శోధనను పరిమితం చేస్తుంటే, ఆ ఫీల్డ్లో ఒక ఇండెక్స్ పెట్టడం గురించి ఆలోచించదలిచారు. అయితే, మీరు పనితీరును గాయపరచగల పట్టికను అతిగా ఇండెక్స్ చేయకూడదు.

ఎలా నిర్ణయిస్తారు? ఇది డేటాబేస్ రూపకల్పనలో భాగంగా ఉంది. మీరు పట్టికలో ఉంచాలి ఎన్ని సూచికలపై ఎటువంటి కఠినమైన పరిమితులు లేవు. ప్రధానంగా, మీరు WHERE నిబంధనలో తరచూ ఉపయోగించే ఏ ఫీల్డ్ ఇండెక్స్ అయినా కావలసిన. సరిగ్గా మీ డేటాబేస్ను సూచిస్తూ గురించి మరింత చదవండి.