Uppgift att skapa en modell företagsdata? Behöver du bygga en relationsdatabas som kan inrymma terabyte värde av data?
Steg
- 1Oroa dig inte om tabeller ännu. Det är uppenbart att du bygger en databas och databaser (relationsdatabaser och kära ändå) är i första hand består av tabeller, som består av rader och kolumner (tupler och attribut om du verkligen in i det).
- 2Oroa sig företagets relationer. Ditt första mål är att kartlägga de relationer som olika Business Objects har. Detta är den "logiska modeling" delen. Den "fysiska modellen" är själva genomförandet. Förväxla / kombinera de två på egen risk.
- 3Kraven är svåra att få och smärtsam. En begåvad företag analytiker vid denna tidpunkt skulle vara himlen skickas.
- 4Vara beredd att föra en solo krig, med bara dig för att förbättra kvaliteten normalisering. De flesta databaser är bitar av skräp eftersom de som utformar dem är lata och "bara vill få något där ute. Vi alltid kan fixa det senare." Jo, rätt.
- 5När är det dags att skriva tabeller, koncentrera sig på uppslagningar och tabeller typ (postnummer, status, produktkategorier, etc). Du behöver dem för utländska viktiga relationer på din "riktiga" tabeller. Plus, det ger dig en liten värma upp innan du kommer in i kärnan transaktionella tabeller.
- 6Som en tumregel: inte lagra data som kan härledas från andra fält. Om du känner till födelsedatum och lite startdatum, då vet du också att ålder vid startdatum, så att inte inkludera denna ålder i tabellen.
- 7Inga nollor. Ett null-värde representerar en odefinierad egenskap hos en enhet. Om enheter kan ha eller inte ha en viss egenskap, så det måste hanteras via ett skär tabellen.
- 8Motsägelse NULL-värden i sig användbara för att identifiera attribut som ännu inte befolkas av användarna. Detta är särskilt användbart när en användare behöver för att välja ett default värde för att fastställa lämpliga affärsregler att gälla. Mål 2 Hur skulle du designa en adress bord där Address1 befolkades och Address2 var inte skyldig, men om Address2 befolkades den måste överensstämma med de affärsregler i fältet. Visst du skulle ställa ett tomt utrymme, är det bättre än att veta att användaren inte redigera fältet? Försök 3: e normala formen på en internationell adress... Kan det göras sannolikt men titta på komplexiteten i omstrukturera data på ett meningsfullt sätt.
- 9Null / NOT NULL kontrollera eventuella databas forum och detta är ett hett ämne förespråkare på båda sidor fördelar / nackdelar för varje.
- Dock är alla överens om att man aldrig ska låta nollor i viktiga variabler. Dessa är områden som används för att identifiera en post unikt, t.ex. ett kundnummer.
- Den null skolan säger att du ska använda nollorna fritt i alla andra områden. Till exempel kunder inte är skyldiga att ha en mobiltelefon, inte heller för att berätta deras antal. Använda ett noll och ingenting, men en null är det mest effektiva för att registrera att mobilen inte är tillgänglig.
- Om det verkligen är viktigt att veta varför det inte finns är det bättre att införa en ny variabel som anger orsaken, i motsats till införandet tjusiga koder som ska lagras i platshållaren för mobilnummer. Vara ovilliga att lägga till fält som dessa, eftersom a) kunden är inte heller skyldig att berätta anledningen till att han inte ger sitt mobilnummer, inte heller denna fråga gör en trevlig konversation, inte heller är det troligt att han berätta sina skäl spontant, och b) ingen kommer någonsin titta på dem på grund av a). Varför saknade variabler allmänhet bara slösa tid.
- Var medveten om att ja / nej-variabler (Booleans) ofta inte kan hålla en null. Därför de innehåller ofta värdelös information, såsom "antingen han var republikan, eller han vägrade att svara".
- 10Få bekväm med skär (många till många) tabeller. Du kommer att använda dem överallt om man byggde saker rätt. Ett exempel skulle vara en high school databas där en tabell är en lista över lärare och annan för studenter. Studenter har mer än en lärare, och lärarna har mer än en elev, så det skär tabellen, separat från "lärare" och "elev", skulle ha två kolumner: främmande nycklar som pekar på både dessa två. Primärnyckeln skulle då kunna vara en kombination av de två.
- 11Använd en bra namnkonventionen. För fakturor, lägg dem i en tabell som heter "faktura". Produkter gå in "produkt". Den skär skulle vara "invoiceProduct", eller "productInvoice", beroende på vilken tabell är verkligen centrum av relationen.
- 12Om du ska ha replikering eller log shipping, försök att ha att ställa upp som du utvecklar så att du kan se hur det fungerar.
- 13Inre kopplingar är stor, men det finns förmodligen en massa vänster yttre koppling uttalanden som du kommer att göra också. Vänj dig vid de olika förenar sina uttalanden (utom unionen).
- 14Om du måste ta itu med ett äldre program, bygga din schema oberoende av dess (inte ens titta på det). Fokus på affärsregler och relationer som det försöker genomdriva, men du kan bli distraherad om man tittar på det sätt som någon satt upp. Se steg # 4.
- 15Migrera från dina befintliga system till en stramare modell med ordentlig normalisering är svårt, men kan göras lite mer hanterbar genom att använda temporära tabeller för dina import. Håll också koll på de äldre ID för folk att söka efter.
Tips
- Förvänta dig inte replikering, log shipping, eller spegling att fungera när du går in i produktionen. Utveckla och testa med det från början. Gör det till en del av din ansökan.
- Säkerhetskopior är viktiga i utvecklingen också. Se till att de är minst nattliga. Verifiera dem varje vecka för att se till att du inte förlorar månader till ett värde av arbete (och eventuellt ditt jobb) om det finns en massiv hårdvara olycka.
- I fråga om att företagets relationer, som ett exempel, kan en klient ha många telefonnummer. En klient kan också ha många kontakter, och var och en av dessa kontakter kan ha många telefonnummer. En faktura kan endast associeras med en klient, dock. Det finns ett konto rep som kan tilldelas till en kund, utom i vissa fall där det finns två, etc. Dessa är de typer av saker du behöver för att kartlägga väl innan du skriver en enda rad SQL.
- Eftersom du definierar absoluta relationer, är ett bra sätt att få frågor från motvilliga deltagare att fråga saker som "Så är det absolut sant att det bara kan vara en klient på en faktura?" Frågor som det tenderar att åberopa ett svar i människor.
- Låt "s" av dina tabellnamn ("faktura" table), det är underförstått att eftersom det är en databas finns det en god chans att det kommer att bli mer än en faktura där.
- Den flexibilitet och kraft från en relationell modell är sinnesrörelser jämfört med en plattare struktur.
- Det finns några mycket specifika fall där du behöver denormalisera tabeller av prestandaskäl. Men det är lätt att göra, fokusera på den hårda delen som är korrekt normalisering.
Varningar
- Datamodellering är en viktig färdighet, och mycket få människor att bygga relationsdatabaser är något bra på det.
- Gör inte billig ut och göra dåligt arbete bara för att det är lättare. Om de ville skräp, skulle de ha anställt någon annan.
- Om du gör billig ut (nollor, denormaliserade bord för dåliga skäl), kommer det att ha direkta och reella konsekvenser (föräldralösa, crummy dataintegritet, ansluter brukar fungera, etc).
- Om du inte normalisera korrekt då rapporter från databasen uppgifter kommer ibland att vara enkelt fel, och din chef kommer att vara mycket upprörd.