>In pratica associo nella prima tabella il codice degli autori
>che usano questa parola
>poi è possibile prendere i numeri separati da virgole e mostrare
>i nomi degli autori correlati?
No.
>come imposto il database?
Quella che hai appena descritto è una classica relazione molti-a-molti: Ad 1 parola possono corrispondere più autori e ad 1 autore possono corrispondere più parole.
Per implementare questa relationship occorre servirsi di una tabella di giunzione, la cui Primary Key è data dalle Primary Key delle due tabelle che intendi relazionare.
Osserva questo esempio in T-SQL:
USE tempdb;
CREATE TABLE dbo.Parole(
ParolaID int NOT NULL PRIMARY KEY,
Parola varchar(10) NOT NULL
);
CREATE TABLE dbo.Autori(
AutoreID int NOT NULL PRIMARY KEY,
Autore varchar(10) NOT NULL
);
CREATE TABLE dbo.Parole_Autori(
ParolaID int NOT NULL,
AutoreID int NOT NULL,
CONSTRAINT PK_Parole_Autori PRIMARY KEY(ParolaID, AutoreID),
CONSTRAINT FK_Parole_Autori_Parole FOREIGN KEY(ParolaID)
REFERENCES dbo.Parole(ParolaID),
CONSTRAINT FK_Parole_Autori_Autori FOREIGN KEY(AutoreID)
REFERENCES dbo.Autori(AutoreID)
);
INSERT dbo.Parole VALUES(1, 'Amore');
INSERT dbo.Parole VALUES(2, 'Amicizia');
INSERT dbo.Parole VALUES(3, 'Baffi');
INSERT dbo.Parole VALUES(4, 'Mare');
INSERT dbo.Parole VALUES(5, 'Zucche');
INSERT dbo.Autori VALUES(1, 'Pippo');
INSERT dbo.Autori VALUES(2, 'Pluto');
INSERT dbo.Autori VALUES(3, 'Paperino');
INSERT dbo.Parole_Autori VALUES(1, 1);
INSERT dbo.Parole_Autori VALUES(1, 2);
INSERT dbo.Parole_Autori VALUES(1, 3);
INSERT dbo.Parole_Autori VALUES(2, 2);
INSERT dbo.Parole_Autori VALUES(2, 3);
INSERT dbo.Parole_Autori VALUES(3, 3);
INSERT dbo.Parole_Autori VALUES(3, 1);
INSERT dbo.Parole_Autori VALUES(4, 3);
INSERT dbo.Parole_Autori VALUES(4, 2);
INSERT dbo.Parole_Autori VALUES(5, 1);
SELECT A.Autore, P.Parola
FROM dbo.Autori AS A
INNER JOIN dbo.Parole_Autori AS PA
ON A.AutoreID = PA.AutoreID
INNER JOIN dbo.Parole AS P
ON PA.ParolaID = P.ParolaID
ORDER BY A.Autore;
/* Output:
Autore Parola
---------- ----------
Paperino Amore
Paperino Amicizia
Paperino Baffi
Paperino Mare
Pippo Amore
Pippo Baffi
Pippo Zucche
Pluto Amore
Pluto Amicizia
Pluto Mare
(10 row(s) affected)
*/
DROP TABLE dbo.Parole_Autori, dbo.Parole, dbo.Autori;
>se di ogni autore dovesi mettere anche
>i riferimenti alle opere in cui appare la parola quale tabella
>dovrei aggiungere?
Ah non lo so, spiega quello che hai in mente e parliamone
>grazie
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org