sql >> Databasteknik >  >> RDS >> Mysql

Databasdesign:EAV-alternativ?

Även om den är minimalistisk som visas, introducerar attributtabellen för Model2 konceptet metadata in i mixen, med allt det goda som kommer från den. Det finns andra fördelar med Model2, till exempel prestandavinsterna förknippas med mindre radstorlek (i värdetabellen), men jag skulle vilja fokusera på metadatakonceptet.

Till och med i befintligt skick Model2:s attributtabell utgör ett arkiv med alla giltiga attribut (med modell1 skulle man behöva köra en sorts samlad fråga för att få en sådan lista). Dessutom och i befintligt skick , är förvaret tillräckligt för att införa främmande nyckelbegränsningar för att hjälpa till att upprätthålla datauppsättningens integritet (med modell 1 skulle man behöva externa former av validering av värdena som lagras i attributkolumnen.

Med några enkla tillägg kan attributtabellen bli ett mångsidigt arkiv som kan användas för olika ändamål. Tabellen kan till exempel innehålla några av följande

  • information som visningsvänligt namn på varje attribut
  • några flaggor som anger typen av fält (numerisk vs. sträng kontra datum etc.), för differentierad hantering/bearbetning
  • den särskilda värdetabell där det underliggande attributet lagras (modellen visar bara en tabell men optimering/skalning kräver ibland att tabellerna delas upp)
  • det faktum att attributet kan lagras som en egen kolumn i "Värde"-tabellen (återigen en form av optimering, som i huvudsak får det bästa av två världar:flexibiliteten i schemat för EAV-modellen men prestandan hos traditionella relationsmodell för de attribut som är mest använda och/eller vanligast för alla enheter.
  • möjligheten att byta namn på attribut utan att störa huvudtabellen. Ändringar endast på metadatanivå.
  • olikt applikationsorienterad semantik. Till exempel indikatorer på att ett visst attribut bör erbjudas som ett av de grundläggande eller avancerade sökfälten.

I ett nötskal blir attributtabellen en resurs som gör att applikationen verkligen kan vara datadriven (eller mer exakt, meta data driven). Du kanske också gillar en entitetstabell, det vill säga en där metadata som hänför sig till de olika entitetstyperna samlas:vilka är de olika entitetstyperna, vilka attribut är tillåtna för vilken enhetstyp etc.

Nu... lyssna på kommentaren från zerkms , under själva frågan. Trots alla dess fördelar kommer EAV-modellen också med sin del av nackdelar och utmaningar, vilket antydde att frågornas komplexitet kommer att tänka på, och även prestandaproblem. Dessa farhågor bör dock inte diskvalificera, a priori, EAV:det finns många användningsfall där EAV är ett bättre tillvägagångssätt.
Förutsatt att EAV är valet än Model2, eller till och med något lite mer sofistikerat är definitivt överlägset modell1.



  1. mysql_real_escape_string() i .NET Framework

  2. Vad innebär det att dela upp en Microsoft Access-databas?

  3. MYSQL:Sequential Number Table

  4. Det gick inte att ladda sql-moduler till databasklustret under PostgreSQL-installationen