sql >> Database teknologi >  >> RDS >> Mysql

Entity-Attribute-Value Tabeldesign

Jeg vil give en modsat mening til de fleste af kommentarerne til dette spørgsmål. Mens EAV er OND af alle de grunde, som du kan finde grundigt forklaret mange gange her på SO og DBA.SE og andre steder, er der en virkelig almindelig applikation, hvor de fleste af de ting, der er galt med EAV, stort set er irrelevante, og de (få) fordele ved EAV er meget germane. Denne applikation er online produktkataloger.

Hovedproblemet med EAV er, at den ikke lader databasen gøre, hvad den er rigtig god til at gøre, hvilket er med til at give korrekt kontekst til forskellige attributter for information om forskellige entiteter ved at arrangere dem i et skema . At have et skema giver mange, mange fordele omkring adgang til, fortolkning og håndhævelse af integriteten af ​​dine data.

Faktum om produktkataloger er, at et produkts egenskaber er næsten fuldstændig irrelevante for katalogsystemet sig selv. Produktkatalogsystemer gør (højst) tre ting med produktattributter.

  1. Vis produktattributterne på en liste til slutbrugere i form:{attributnavn}:{attributværdi}.

  2. Vis attributterne for flere produkter i et sammenligningsgitter, hvor attributterne for forskellige produkter står på linje med hinanden (produkter er normalt kolonner, attributter er normalt rækker)

  3. Drev regler for noget (f.eks. prissætning) baseret på bestemte attribut-/værdikombinationer.

Hvis alt, dit system gør, er at regurgitere information, der er semantisk irrelevant (for systemet), så er skemaet for denne information dybest set uhensigtsmæssigt. Faktisk kommer skemaet i vejen i et online produktkatalog, især hvis dit katalog har mange forskellige typer produkter, fordi du altid skal gå tilbage til skemaet for at pille ved det for at tillade nye produktkategorier eller attributtyper.

På grund af hvordan det bruges, er selv datatypen for en attributværdi i et produktkatalog ikke nødvendigvis (vitalt) vigtig. For nogle egenskaber vil du måske pålægge begrænsninger, såsom "skal være et tal" eller "skal komme fra denne liste {...}". Det afhænger af, hvor vigtig attributkonsistens er for dit katalog, og hvor omfattende du ønsker, at din implementering skal være. Når jeg ser på produktkatalogerne fra flere online-forhandlere, vil jeg sige, at de fleste er parate til at afveje enkelhed for at opnå konsistens.

Ja, EAV er ond, undtagen når den ikke er det.



  1. MySQL MariaDB – Forespørgsel ved hjælp af Temp-tabel

  2. Forskellen mellem Oracle jdbc driver klasser?

  3. Skal jeg indeksere et bitfelt i SQL Server?

  4. MySQL-ydelse:Identifikation af lange forespørgsler