# Enum in der Datenbank



## Panda9296 (9. Dez 2020)

Hallo liebe Community,
ich habe eine Frage bezüglich meiner Datenbank. Ich habe eine Produktklasse in Java entwickelt, die als Attribut Produkttyp als Enum hat. Dieses Enum hat verschiedene Produkttypen als Attribut und jede Value hat ein eigenes Attribut als Period... also ich habe die Eigenschaft gesetzt, dass jeder Produkttyp eine eigene Haltbarkeit in Form einer Period hat, die natürlich einmalig gesetzt werden kann oder diese als Standardwert gesetzt wird. 

Ich denke ich komme deswegen um eine eigene Tabelle (im Bezug auf die erste Normalform) nicht rum, jetzt aber meine Frage: wie speichere ich einerseites diese values in eine Tabelle ab und andererseits wie speichere ich das in der Produkttabelle. 

Also ich denke, dass ein Produkt nur einen Produkttypen haben kann...es ist also eine 1:1 Beziehung. Eigentlich ganz simpel nur das Enum an sich macht mir also Probleme..

[CODE lang="java" title="Produkt und seine Eigenschaften"] private static final long serialVersionUID = -5220159028566792859L;
    private int productId;
    private  ProductTyp productTyp;
    private  String mark;
    private  String productName;
    private int pieces;
    private double amount;

    private Supplier<LocalDate> freezingDate;
    private Supplier<LocalDate> expirationDate;[/CODE]

[CODE lang="java" title="Produkttyp(Enum und seine Eigenschaft)"]import java.time.Period;

/**
 * @author Created by Miguel Gutierrez on 11.11.2020
 * @since 1.11
 */
public enum ProductTyp  {

    /**
     * a value for every product type. Every type has a period of durability
     * The value has a standard period of 4 weeks
     * every user can change the period for every product type
     */

    VEGETABLES(),BEEF(),PORK(),POULTRY(),CALF(),LAMB(),FRUIT(),ICE(),SAUCES(),MEALS(),OTHER(),PIZZA();

    /**
     *
     * @param period to set the period for storage live time
     */
    public void setStorageLiveTime(Period period){
        this.storageLiveTimeOfProduct = period;
    }
    public Period getStorageLiveTimeOfProduct(){
        return this.storageLiveTimeOfProduct;
    }


    private Period storageLiveTimeOfProduct;

    /**
     *
     * @param period set period of the value from user
     */

    private ProductTyp(Period period){
        this.storageLiveTimeOfProduct= period;
    }
    private ProductTyp(){
        //TODO: message for standard period
        storageLiveTimeOfProduct=Period.ofWeeks(4);
    }
}[/CODE]

Meine Idee wäre vielleicht mit einer Form eines Indexes irgendwie durch die Produkttypen zu navigieren, also genauer... durch die Values des Enums, aber es entsteht ein Knoten im Kopf, wenn ich mir dabei überlege, ob hier eine id dann notwendig ist(ich denke ja schon, da es sich um eine eigene Tabelle handelt?)


----------



## kneitzel (9. Dez 2020)

Also Enums, die auch einen State haben (Also einen veränderlichen Wert wenn man so will), bereiten mir immer etwas Kopfschmerzen.

Entweder ist es eine Enum, dann halte ich diese auch immer mehr oder weniger unveränderlich. Da kann man dann natürlich immer noch Dinge hinterlegen, also in den Klammern kommen feste Argumente für den Konstruktor.

Aber es gibt keine Setter, die etwas verändern. Also so wie Du es prinzipiell schon hast, nur der Standard Konstruktor geht, der Setter geht und jedes Element bekommt in den () noch den Parameter für die zu setzende Period.

Aber ist der ProduktTyp wirklich eine Enum? Ist das eine abschließende Auflistung? Oder will man da evtl. später nicht noch mehr hinzu fügen? Das sieht mir erst einmal nach einer normalen Entity aus....


----------

