Vincolo del database da un'altra colonna della tabella

1

Consideriamo i seguenti oggetti:

  • Articolo che può essere di tipi diversi
  • Apparecchiature che indicano un articolo, alcuni campi sull'attrezzatura sono usati solo per alcuni tipi.

Voglio aggiungere un vincolo all'apparecchiatura, questo vincolo dipende dal tipo o dall'articolo. Ho tre scelte:

  1. Utilizza i trigger in modo da poter interrogare il tipo di articolo con un'altra selezione
    • Pro: solo lavori nel database
    • Monete: selezione extra. Fino ad ora mi astenevo dall'usare i trigger per il vincolo "statico (/ generico?)" (= Non dipendente dal vecchio valore come si può fare nel trigger e non in CHECK).
  2. copia il article_type in una colonna dedicata di attrezzature in modo che io possa applicare un CONTROLLO DI CONTROLLO.
    • Pro: facili da implementare, tutti si inseriscono nella stessa tabella
    • Monete: colonna extra dedicata.
  3. Utilizzare l'ereditarietà per ogni tipo di articolo e ogni tipo di attrezzatura
    • Pro: applica un vincolo differente su ciascuna tabella risultante
    • Monete: più tabelle da gestire, UNION / JOINS a seconda dell'implementazione.

La seconda soluzione sarebbe implementata in questo modo nella parte ORM:

// ensure we're accessing using getter and not the non-existant field.
@Access(AccessType.PROPERTY)
@Enumerated(EnumType.STRING)
public ArticleTypeEnum getTypeOfArticle(){
    return article.getType();
};
protected void setTypeOfArticle(ArticleTypeEnum aEnum){
    // ignore silently
}

Quindi questo è abbastanza facile e l'articolo non sarà mai nullo quando verrà chiamato il getter.

La terza soluzione non è attualmente considerata da me, ma fa parte della domanda.

Questo è a causa di altri requisiti: essere in grado di interrogare in modo trasparente tra ogni tipo dalla stessa vista. Questo non è tecnicamente possibile per JPA per interrogare campi specifici per uno dei tipi, avrei bisogno di una soluzione complicata per questo, se è fattibile, considerando il mio stack corrente.

Quindi la mia analisi è giusta? Ci sono altre alternative?

La mia domanda non si applica solo per l'analisi di questo solo campione ma dell'intero database, che probabilmente si tradurrà in una risposta dipende .

Finaly è il metodo 2 ha un nome? Quindi potrei cercare forse ulteriori informazioni qui in rete.

    
posta Walfrat 16.11.2016 - 11:03
fonte

0 risposte

Leggi altre domande sui tag