Le chiavi esterne devono essere rappresentate direttamente quando si mappano le tabelle del database in classi? [chiuso]

0

Ok, nel mio database ho un tavolo Event e un tavolo Room. Ogni stanza può avere molti eventi.

Room table
roomID-roomName
1     - cafe102
...

Event table
eventID- Time  -type -roomID
1      - 11:20 - 1   - 1
2      - 15:20 - 1   - 1
...

Quindi voglio creare una struttura di classe che simuli la struttura del DB.

public class Event{
  private int eventID;
  private String time;
  private int roomID; // or
  private Room room;
  public Event(){
  }
  /// all set and get methods here
} 

public class Room{
  private int roomID;
  private String roomName;
  public Room(){
  }
  //all Set and Get methods here
}

La mia domanda è, nella classe Event , dovrei digitare private int roomID; o private Room room; ?

C'è anche qualche motivo per mettere private Event event; in Room class? O dipende solo dalla necessità e non esiste uno standard?

    
posta Tum 30.09.2014 - 16:19
fonte

3 risposte

3

ID è un modo per il database di connettere una stanza a un evento, non è necessario duplicarlo nella classe. Quindi sceglierei sicuramente private Room room; . Questo creerà un modello di oggetti molto migliore rispetto a un gruppo di ID.

Per quanto riguarda la tua altra domanda, direi che dipende dalle tue esigenze se hai bisogno di un riferimento a due vie oppure no. Dal punto di vista della modellazione sembra più naturale che un evento abbia una stanza assegnata e che la stanza non abbia bisogno di conoscere gli eventi. Ma se hai bisogno di mostrare lo stato di prenotazione di una particolare stanza o qualcosa del genere, aggiungere il riferimento potrebbe essere una buona idea.

Tuttavia, dovresti notare che si tratta di una relazione uno-a-molti, quindi una stanza può avere più di un evento. Quindi, se vuoi che la classe Room conosca gli eventi correlati, la tua variabile deve essere private List<Event> events; (ovviamente può anche essere una struttura diversa da una lista).

    
risposta data 30.09.2014 - 16:50
fonte
1

Non capisco perché sia necessario avere il roomID sull'evento sul codice stesso (si usa questa relazione solo per il DB). Direi piuttosto che puoi puntare direttamente all'oggetto Room. (stanza della stanza privata);

Ora, la seconda domanda perché dovresti inserire un attributo Event in una stanza? Direi che puoi creare nella tua applicazione un elenco di Eventi che hanno la stessa stanza, ma non capisco perché diresti che una Stanza ha eventi. Forse il concetto di stanza è la lista degli eventi che contiene?

Spero che questo aiuti.

    
risposta data 30.09.2014 - 16:42
fonte
0

Se hai bisogno di un riferimento a un Event nella tua classe Room , non vedo ragioni per cui non dovresti. In ORM come EntityFramework in .NET, ActiveRecord in Ruby, questo è permesso, quindi suppongo che sia OK farlo.

    
risposta data 30.09.2014 - 16:46
fonte

Leggi altre domande sui tag