Sto cercando di trovare il modo migliore per modellare le relazioni 1: 0,1 ("può avere uno" o "ha al massimo uno"). Credo che questo si chiami cardinalità Z.Modellazione da uno a zero o una relazione (cardinalità Z)
Ad esempio, supponiamo di avere due classi Widget
e WidgetTest
. Non tutti i widget sono testati e il test è distruttivo, quindi può esserci al massimo un WidgetTest per Widget. Supponiamo inoltre che sia inappropriato aggiungere i campi WidgetTest al Widget.
vorrei che la mia interfaccia pubblica di essere:
Widget
WidgetTest { get; set; }
WidgetTest
Widget { get; }
Modello 1: Widget ha una proprietà WidgetTest e nella banca dati della tabella Widget ha una chiave esterna vincolata unicamente per WidgetTest. Il mio DBA sostiene che ciò consentirebbe a un record WidgetTest di esistere senza un Widget.
WidgetTable
WidgetTestId (FK, UQ)
Modello 2: Widget ha una collezione privata di WidgetTest e rafforza il rapporto 0,1 con l'aggiunta o la rimozione di un singolo oggetto della collezione controllato da una proprietà WidgetTest pubblica. Il database la modella come 1: m con WidgetTest che ha una chiave esterna vincolata in modo univoco al Widget. Io sostengo che questo significa adottare il modello per adattarlo allo schema del database (cioè più lavoro per me).
WidgetTestTable
WidgetId (FK, UQ)
Quale modello è migliore? Quale è più facile da ottenere con NHibernate? O c'è una terza via?
Modifica ... Ecco cosa ho finito con:
public class Widget
{
// This is mapped in NH using a access strategy
private IList<WidgetTest> _widgetTests = new List<WidgetTest>(1);
public WidgetTest
{
get { return _widgetTests.FirstOrDefault(); }
set
{
_widgetTests.Clear();
if (value != null)
{
_widgetTests.Add(value);
}
}
}
}
cosa è sbagliato con un 1 :? applicato da PK-PK. mappatura che abbastanza dritto .. –