salve,
mkel84 wrote:
Premetto che lo schema de db è una piccola parte di uno schema relazionale molto più grande. Se non ho capito male la tua idea io non posso valorizzare alcuni campi. Io non ho il censimento solo di Napoli ma di altre città, così facendo io non riesco ad inserire i valori. Ricorda che per ogni evento storico posso associare più centri di riferimento e per ognuna di queste occorrenze posso inserire un elemento. Ad esempio
Evento Storico -> Censimenti 1611
Centro Riferimento -> Napoli; Matera; Foggia;
E cioè ho che nel 1611 avevo a Napoli 1000 persone, a Matera 800 e a Foggia 700. Quindi ne deduci che dal tuo schema io dovrei creare ogni volta un nuovo evento storico. Il Centro Riferimento deve rimanere così perché è associato ad altre entità che in questo caso non servono ecco perché è un'entità a parte e non posso metterlo solo come attributo dell'Attestazione Storica. Posso dirti che le entità hanno tutte un loro significato sono le associazioni che dovrebbero essere riviste.
forse allora
SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE dbo.EventoStorico (
Id int NOT NULL PRIMARY KEY,
Descrizione varchar(15) NOT NULL
);
CREATE TABLE dbo.CentroRiferimento (
Id int NOT NULL PRIMARY KEY,
IdEvento int NOT NULL
CONSTRAINT fk$CentroRiferimento$has$Evento
FOREIGN KEY REFERENCES dbo.EventoStorico (Id),
Descrizione varchar(15) NOT NULL
);
CREATE TABLE dbo.Attestazione (
Id int NOT NULL PRIMARY KEY,
IdCentroRiferimento int NOT NULL
CONSTRAINT fk$Attestazione$has$CentroRiferimento
FOREIGN KEY REFERENCES dbo.CentroRiferimento (Id),
Descrizione varchar(15) NOT NULL
);
CREATE TABLE dbo.Elemento (
Id int NOT NULL PRIMARY KEY,
IdAttestazione int NOT NULL
CONSTRAINT fk$Elemento$has$Attestazione
FOREIGN KEY REFERENCES dbo.Attestazione (Id),
Descrizione varchar(50) NOT NULL
);
GO
INSERT INTO dbo.EventoStorico VALUES ( 1, 'Censimenti 1611' ); INSERT INTO dbo.EventoStorico VALUES ( 2, 'Guerre 2008' );
INSERT INTO dbo.CentroRiferimento VALUES ( 1, 1, 'Napoli' ); INSERT INTO dbo.CentroRiferimento VALUES ( 2, 1, 'Matera' ); INSERT INTO dbo.CentroRiferimento VALUES ( 3, 1, 'Foggia' );
INSERT INTO dbo.CentroRiferimento VALUES ( 4, 2, 'Irak' );
INSERT INTO dbo.CentroRiferimento VALUES ( 5, 2, 'Afghanistan' ); INSERT INTO dbo.CentroRiferimento VALUES ( 6, 2, 'Angola' );
INSERT INTO dbo.Attestazione VALUES ( 1, 1, 'Giustiniani' ); INSERT INTO dbo.Attestazione VALUES ( 2, 1, 'Mazzella' );
INSERT INTO dbo.Attestazione VALUES ( 3, 2, 'testo Matera' ); INSERT INTO dbo.Attestazione VALUES ( 4, 3, 'testo Foggia' );
INSERT INTO dbo.Attestazione VALUES ( 5, 4, 'CNN' );
INSERT INTO dbo.Attestazione VALUES ( 6, 4, 'SKY News' );
INSERT INTO dbo.Attestazione VALUES ( 7, 5, 'CNN' );
INSERT INTO dbo.Attestazione VALUES ( 8, 5, 'SKY News' );
INSERT INTO dbo.Attestazione VALUES ( 9, 5, 'BBC' );
INSERT INTO dbo.Attestazione VALUES ( 10, 6, 'BBC' );
no dichiarazione
INSERT INTO dbo.Elemento VALUES ( 1, 1, '1000 pax' );
INSERT INTO dbo.Elemento VALUES ( 2, 2, '998 pax' );
INSERT INTO dbo.Elemento VALUES ( 3, 3, '800 pax' );
INSERT INTO dbo.Elemento VALUES ( 4, 4, '700 pax' );
INSERT INTO dbo.Elemento VALUES ( 5, 5, 'Bagdad 50 deceduti' ); INSERT INTO dbo.Elemento VALUES ( 6, 5, 'Nassirya 10 deceduti' ); INSERT INTO dbo.Elemento VALUES ( 7, 6, 'Bagdad 48 deceduti' );
INSERT INTO dbo.Elemento VALUES ( 8, 7, 'Herat - scontro militare no vittime civili' );
INSERT INTO dbo.Elemento VALUES ( 9, 8, 'Herat - scontro militare solo vittime militari' );
INSERT INTO dbo.Elemento VALUES ( 10, 9, 'Herat - scontro militare vittime civili e militari' );
GO
SELECT es.Descrizione AS [Evento Storico],
ce.Descrizione AS [Centro di Riferimento],
a.Descrizione AS [Fonte],
e.Descrizione AS [Dichiarazione]
FROM dbo.EventoStorico es
LEFT JOIN dbo.CentroRiferimento ce ON ce.IdEvento = es.Id
LEFT JOIN dbo.Attestazione a ON a.IdCentroRiferimento = ce.Id LEFT JOIN dbo.Elemento e ON e.IdAttestazione = a.Id
ORDER BY es.Id
GO
DROP TABLE dbo.Elemento, dbo.Attestazione, dbo.CentroRiferimento, dbo.EventoStorico;
--<-------
Evento Storico Centro di Riferimento Fonte Dichiarazione -------------
-------------------
-------------
------------------------------------------------
Censimenti 1611 Napoli Giustiniani 1000 pax Censimenti 1611 Napoli Mazzella 998 pax Censimenti 1611 Matera testo Matera 800 pax Censimenti 1611 Foggia testo Foggia 700 pax Guerre 2008 Irak CNN Bagdad 50 deceduti Guerre 2008 Irak CNN Nassirya 10 deceduti Guerre 2008 Irak SKY News Bagdad 48 deceduti Guerre 2008 Afghanistan CNN Herat - scontro militare no vittime civili
Guerre 2008 Afghanistan SKY News Herat - scontro militare solo vittime militari
Guerre 2008 Afghanistan BBC Herat - scontro militare vittime civili e militari
Guerre 2008 Angola BBC NULL
hai "pluralita'" di "informazione" per quanto riguarda sia le fonti che le relative informazioni..
saluti