sql >> Databasteknik >  >> RDS >> Mysql

Databastabeller, fler desto bättre?

Problemet här är undertypning . Det finns tre grundläggande tillvägagångssätt för att hantera undertyper.

  1. Sätt in varje posttyp i en helt separat tabell;
  2. Sätt en post i en överordnad tabell och sedan en post i en undertypstabell; och
  3. Sätt alla poster i en tabell, med nullbara kolumner för "valfri" data (dvs saker som inte gäller den typen).

Varje strategi har sina fördelar.

Till exempel är (3) särskilt användbar om det är liten eller ingen skillnad mellan olika undertyper. I ditt fall, har olika loggposter extra kolumner om de är av en viss typ? Om de inte gör det eller om det finns få fall när de gör det är det helt logiskt att lägga dem alla i en tabell.

(2) används ofta för ett festbord. Detta är en vanlig modell i CRM som involverar ett överordnat partiobjekt som har undertyper för person och organisation (Organisationen kan också ha undertyper som företag, förening, etc). Person och organisation har olika egenskaper (t.ex. hälsning, förnamn, födelsedatum, etc för person) så det är vettigt att dela upp detta istället för att använda nollbara kolumner.

(2) är potentiellt mer utrymmeseffektiv (även om overheaden för NULL-kolumner i moderna DBMS är mycket låg). Det större problemet är att (2) kan vara mer förvirrande för utvecklare. Du kommer att få en situation där någon behöver lagra ett extra fält någonstans och kommer att slå det i en kolumn som är tom för den typen bara för att det är lättare att göra det än att få godkännande för DBA:erna att lägga till en kolumn (nej, jag skojar inte ).

(1) är förmodligen det minst använda schemat av de 3 enligt min erfarenhet.

Slutligen måste skalbarhet övervägas och är förmodligen det bästa fallet för (1). Vid vissa tillfällen skalas JOINs inte effektivt och du måste använda någon form av partitioneringsschema för att minska dina bordsstorlekar. (1) är en metod för att göra det (men en grov metod).

Jag skulle dock inte oroa mig så mycket för det. Du behöver vanligtvis komma åt hundratals miljoner eller miljarder poster innan det blir ett problem (om inte dina poster är riktigt stora, i så fall kommer det att hända tidigare).



  1. Bäst att använda * när du anropar många fält i mysql?

  2. Oracle sql för att räkna instanser av olika värden i en kolumn

  3. PostgreSQL Skapa schema

  4. Automatisk ökning återställs inte i MySQL