Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Relazione molti a molti, colonne tabella di appoggio
lunedì 18 giugno 2012 - 15.43
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
.NET 2.0
|
Windows Server 2003
|
Visual Studio 2010
|
SQL Server 2005
gian77
Profilo
| Newbie
2
messaggi | Data Invio:
lun 18 giu 2012 - 15:43
Buongiorno a tutti
ecco la mia prima questione da niubbo ;-)
Nella mia applicazione web devo gestire Utenti e Gruppi in relazione molti a molti: ho quindi creato le 3 tabelle Utenti, Gruppi ed Utenti_gruppi; inoltre lo scenario prevede che un utente possa essere amministratore di diversi gruppi e che abbia un gruppo di default.
Al momento io ho modellato la cosa creando la seguente tabella di appoggio Utenti_gruppi:
CREATE TABLE [dbo].[utenti_gruppi](
[id_utente_gruppo] [int] IDENTITY(1,1) NOT NULL,
[id_utente] [int] NOT NULL,
[id_gruppo] [int] NOT NULL,
[is_admin] [bit] NOT NULL,
[is_gruppo_default] [bit] NOT NULL,
CONSTRAINT [PK_utenti_gruppi] PRIMARY KEY CLUSTERED
(
[id_utente_gruppo] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[utenti_gruppi] WITH CHECK ADD CONSTRAINT [FK_utenti_gruppi_gruppi] FOREIGN KEY([id_gruppo])
REFERENCES [dbo].[gruppi] ([id_gruppo])
GO
ALTER TABLE [dbo].[utenti_gruppi] CHECK CONSTRAINT [FK_utenti_gruppi_gruppi]
GO
ALTER TABLE [dbo].[utenti_gruppi] WITH CHECK ADD CONSTRAINT [FK_utenti_gruppi_utenti] FOREIGN KEY([id_utente])
REFERENCES [dbo].[utenti] ([id_utente])
GO
ALTER TABLE [dbo].[utenti_gruppi] CHECK CONSTRAINT [FK_utenti_gruppi_utenti]
GO
è corretto? oppure è meglio mettere il gruppo di default sulla tabella Utente?
Grazie mille!!
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
lun 18 giu 2012 - 21:12
>è corretto? oppure è meglio mettere il gruppo di default sulla
>tabella Utente?
Ciao,
A mio avviso è corretto dato che la tabella risulta in 3a NF.
L'unica cosa che farei è rimuovere la colonna IDENTITY [id_utente_gruppo] (che non serve a niente dal punto di vista logico) definendo la PK sulle colonne [id_utente] e [id_gruppo]. Essendo 2 int lo "spreco" di spazio è veramente trascurabile
>Grazie mille!!
Prego.
Ciao!
--
Lorenzo Benaglia
http://blogs.dotnethell.it/lorenzo/
gian77
Profilo
| Newbie
2
messaggi | Data Invio:
mar 19 giu 2012 - 08:53
Ciao Lorenzo e grazie delle dritte ;-)
>A mio avviso è corretto dato che la tabella risulta in 3a NF.
OK. Mi rimaneva il dubbio che l'informazione sul gruppo di default, essendo un attributo dell'Utente, andasse nella tabella Utente.
>L'unica cosa che farei è rimuovere la colonna IDENTITY [id_utente_gruppo]
>(che non serve a niente dal punto di vista logico) definendo
>la PK sulle colonne [id_utente] e [id_gruppo]. Essendo 2 int
>lo "spreco" di spazio è veramente trascurabile
Fatto, grazie; spesso ho l'abitudine, senza pensarci troppo, di usare come PK una identity: è in ogni caso da considerarsi una bad practice?
Grazie ancora
Ciao
Gianluca
lbenaglia
Profilo
| Guru
5.625
messaggi | Data Invio:
mar 19 giu 2012 - 21:26
>OK. Mi rimaneva il dubbio che l'informazione sul gruppo di default,
>essendo un attributo dell'Utente, andasse nella tabella Utente.
Non è un attributo del solo utente, ma dipende dall'intera PK (id_utente ed id_gruppo) pertanto è giusto che stia nella junction table.
>Fatto, grazie; spesso ho l'abitudine, senza pensarci troppo,
>di usare come PK una identity: è in ogni caso da considerarsi
>una bad practice?
No, solo un inutile spreco di spazio
>Grazie ancora
Prego.
Ciao!
--
Lorenzo Benaglia
http://blogs.dotnethell.it/lorenzo/
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !