Spero che tu possa sopportare me nelle prossime righe. Non sono d'accordo con le convenzioni sui nomi che hai fornito. Data Modeling ha lo scopo di farci riflettere in modo più dettagliato sul business e non solo generare DDL. Se usiamo lo sforzo e il tempo speso per costruire il modello per saperne di più sul business, potremmo guadagnare molto. Adesso dici:
A user can (have) multiple widgets and a widget can be owned by multiple users.
Per me, usare la parola have non è completamente sincronizzato. con la parola proprietà .
Se insisti sulla parte "un oggetto può essere posseduto da ...", devi dire "un utente può possedere 0,1 o più widget". Questo per chiarire che abbiamo a che fare con 1 associazione (o relazione) in entrambe le direzioni.
Analizzando ulteriormente, cosa vuol dire "un utente possiede un widget"? Non è molto chiaro a tutti. La proprietà è avvenuta a seguito di un processo di acquisto? (come in: utente acquista un widget) o un processo di concessione? (come in concessione di privilegi)? Se la proprietà si è verificata a causa di un processo di acquisto, la tabella di intersezione tra il widget e l'utente è la tabella che acquisisce la cronologia degli acquisti (o i dettagli di acquisto) dell'utente.
Ora puoi decidere se vuoi usare un nome descrittivo come "UserPurchaseDetail" (un nome migliore è suggerito di seguito da @Joel Brown) o usare solo un nome come UserWidget.
Ancora una volta, qualunque sia la tua scelta del nome, il mio punto è che si dovrebbe sempre cercare di fare più analisi e usare un nome che rifletta il più possibile la tabella utilizzata in termini di business.
Modifica: nome aggiunto suggerito dalla nota sotto come nome alternativo.