sql >> Database >  >> RDS >> Mysql

Entiteit-kenmerk-waardetabelontwerp

Ik ga een tegengestelde mening geven over de meeste opmerkingen over deze vraag. Terwijl EAV KWAAD is om alle redenen die hier op SO en DBA.SE en elders vaak grondig worden uitgelegd, is er één echt veel voorkomende toepassing waarvoor de meeste dingen die mis zijn met EAV grotendeels irrelevant zijn en de (weinig) voordelen van EAV zijn zeer relevant. Die applicatie is online productcatalogi.

Het grootste probleem met EAV is dat het de database niet laat doen waar het echt goed in is, namelijk helpen om de juiste context te geven aan verschillende attributen van informatie over verschillende entiteiten door ze in een schema . Het hebben van een schema biedt vele, vele voordelen met betrekking tot toegang tot, interpretatie en handhaving van de integriteit van uw gegevens.

Het feit over productcatalogi is dat de kenmerken van een product bijna helemaal niet relevant zijn voor het catalogussysteem zelf. Productcatalogussystemen doen (maximaal) drie dingen met productkenmerken.

  1. Geef de productkenmerken in een lijst weer aan eindgebruikers in de vorm:{attribute name}:{attribute value}.

  2. Geef de attributen van meerdere producten weer in een vergelijkingsraster waar attributen van verschillende producten tegenover elkaar staan ​​(producten zijn meestal kolommen, attributen zijn meestal rijen)

  3. Regel regels voor iets (bijv. prijzen) op basis van bepaalde combinaties van kenmerken en waarden.

Als uw systeem alleen maar informatie uitbraakt die semantisch niet relevant is (voor het systeem), dan is het schema voor deze informatie in feite nutteloos. In feite staat het schema in de weg in een online productcatalogus, vooral als uw catalogus veel verschillende soorten producten heeft, omdat u altijd terug moet gaan naar het schema om eraan te sleutelen om nieuwe productcategorieën of kenmerktypen mogelijk te maken.

Vanwege de manier waarop het wordt gebruikt, is zelfs het gegevenstype van een attribuutwaarde in een productcatalogus niet noodzakelijk (van vitaal belang). Voor sommige kenmerken wil je misschien beperkingen opleggen, zoals "moet een getal zijn" of "moet van deze lijst komen {...}". Dat hangt af van hoe belangrijk attribuutconsistentie is voor uw catalogus en hoe uitgebreid u wilt dat uw implementatie is. Als ik naar de productcatalogi van verschillende online retailers kijk, zou ik zeggen dat de meesten bereid zijn eenvoud in te ruilen voor consistentie.

Ja, EAV is slecht, behalve wanneer dat niet zo is.



  1. Hoe cbrt() werkt in PostgreSQL

  2. Hoe kan SQL Workload Analysis u helpen?

  3. SQL Server 2017 Stap voor stap installatie -1

  4. Hoe voer je dezelfde aggregatie uit op elke kolom, zonder de kolommen op te sommen?