2016-01-02 14 views
13

Sto sviluppando un'applicazione sails.js con sequelize ORM. Sono un po 'confuso su quando BelongsTo e HasOne devono essere usati.Differenza tra HasOne e BelongsTo in Sequelize ORM

La documentazione afferma che:

Pertinenti associazioni sono associazioni in cui la chiave esterna per la relazione one-to-one esistente sul modello di origine.

HasOne associazioni sono le associazioni in cui esiste la chiave esterna per la relazione one-to-one sul modello di destinazione.

C'è qualche altra differenza oltre al luogo in cui sono specificati? Il comportamento continua a essere lo stesso in entrambi i casi?

risposta

24

Questo è un problema più universale.

La differenza principale è in semantica. devi decidere qual è la relazione (Qualche esempio stupido):

L'uomo ha un solo braccio destro. Il braccio destro appartiene a un uomo.

Dirlo sembra inversamente un po 'strano:

braccio destro ha un uomo. Un uomo appartiene al braccio destro.

Puoi avere un uomo senza braccio destro. Ma solo il braccio destro è inutile.

In sequelize se RightArm e uomini sono modelli, può assomiglia:

Man.hasOne(RightArm); 
RightArm.belongsTo(Man); 

E come si nota c'è anche differenza nella struttura della tabella db:

Pertinenti aggiungerà la ForeignKey sulla fonte dove hasOne aggiungerà sul target (Sequelize crea una nuova colonna 'ManId' nella tabella 'RightArm', ma non crea la colonna 'RightArmId' nella tabella 'Man').

Non vedo più differenze.

+0

Quindi, in questo caso, dovrei usare "Man.hasOne (RightArm);" o "RightArm.belongsTo (Man);'? O li usi entrambi? –

+0

Nella maggior parte dei casi li userei entrambi –