Ragazzi ho un piccolo problema con un progetto.

IMMAGINE

Guardando lo schema, vi sembra coerente?
Allora io ho un dubbio e mi piacerebbe sapere come la pensate, l'associazione "Avvenuto" come la rappresento in forma tabellare?

Cerco di fare un esempio per capire il contesto della base di dati. Es: In Iraq c’è la guerra, il New York Times afferma che a Bagdad sono morti 50 civili mentre a Nasiriyya sono morti 10 civili, mentre El Pais afferma che a Bagdad sono morti 48 civili e a Nasiriyya sono morti 10 civili. Come faccio a salvare queste informazioni nel DB? Con la configurazione attuale non lo posso fare.
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
mkel84 wrote:
Ragazzi ho un piccolo problema con un progetto.
IMMAGINE http://img709.imageshack.us/img709/4782/schemamb.jpg Guardando lo schema, vi sembra coerente?
Allora io ho un dubbio e mi piacerebbe sapere come la pensate, l'associazione "Avvenuto" come la rappresento in forma tabellare? Cerco di fare un esempio per capire il contesto della base di dati. Es: In Iraq c’è la guerra, il New York Times afferma che a Bagdad sono morti 50 civili mentre a Nasiriyya sono morti 10 civili, mentre El Pais afferma che a Bagdad sono morti 48 civili e a Nasiriyya sono morti 10 civili. Come faccio a salvare queste informazioni nel DB? Con la configurazione attuale non lo posso fare.

il dubbio e' piu' che legittimo.. ed hai di base un "grosso problema", nel senso che "non hai una verita'"..  lo stesso "evento" viene definito in 2 modi diversi, cioe' 48 deceduti E 50 deceduti.. sei tendenzialmente, dal punto di vista filosofico, nella medesima situazione "dell'uomo con 2 orologi", quindi "non potrai mai avere la certezza dell'ora corrente"
al di la' della "battuta" (che tendenzialmente non e' cosi' fuori luogo), ti trovi a dover defnire una moltitudine di "possibilita'" per lo stesso "evento", quindi, purtroppo, tutto il tuo modello (che tendenzialmente e' sia corretto che ovvio, al meno da un punto di vista superficiale come quello che posso avere io) non puo' gestirlo.. dovrai probabilmente modificare la relazione con una ridefinizione che consenta "al New York Times" di "esporre una realta'" ed a "El Pais" di definire la medisima realta' in maniera anche diametralmente diversa.. tale "esposizione" diventa quindi non legata all'evento in se', bensi' "a chi lo espone", perdendo "filosoficamente" il valore di verita' [e parlando di giornali mai deduzione e' stata piu' corretta  ] per addivenire semplicemente ad "un fatto" fine a se stesso, un'informazione asettica non sindacabile.. e' ovvio che ho voluto sottolineare l'aspetto filosofico dello scenario, ma semanticamente la soluzione porta la medesimo risultato.. il "fatto" non e' piu' legato all'evento bensi' al relatore..
saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
Ok, perfetto, avevo pensato anche io ad una soluzione del genere però adesso ho un dubbio che vorrei chiederti: secondo te è meglio fare un'associazione con tre entità (in questo caso avremo l'associazione Documenta con entità Elemento, Centro Riferimento e Attestazione Storica) oppure due associazioni con tre entità (in questo caso avremmo l'associazione Documenta tra le entità Elemento e Attestazione Storica ed anche l'associazione Riferito tra le entità Elemento e Centro Riferimento)?
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
mkel84 wrote:
Ok, perfetto, avevo pensato anche io ad una soluzione del genere però adesso ho un dubbio che vorrei chiederti: secondo te è meglio fare un'associazione con tre entità (in questo caso avremo l'associazione Documenta con entità Elemento, Centro Riferimento e Attestazione Storica) oppure due associazioni con tre entità (in questo caso avremmo l'associazione Documenta tra le entità Elemento e
Attestazione Storica ed anche l'associazione Riferito tra le entità Elemento e Centro Riferimento)?

fatico a comprendere bene le entita' nelle tue descrizioni, che non completamente combaciano alla tua descrizione della "realta' soggettiva" precedentemente verbalmente indicata, al meno nella mia comprensione.... ad ogni modo, dal puro punto di vista relazionale, le relazioni a mio parere cambiano molto.. brevemente (cosa che pero' non ha riscontro nel tuo modello)
- c'e' l'{attestazione storica} (in "Iraq c'e' la guerra")
- {Documenta} (New York Times)
- {Elemento} (Bagdad 50 civili)
- {Elemento} (Nassirya 10 civili)
- {Documenta} (El Pais)
- {Elemento} (Bagdad 48 civili)
- {Elemento} (Nassirya 10 civili)

oppure {Elemento} contiene "l'insieme completo" dell'informazione in maniera non strutturata, quindi
- {attestazione storica} (in "Iraq c'e' la guerra")
- {Documenta} (New York Times)
- {Elemento} (Bagdad 50 civili, Nassiriya 10 civili) - {Documenta} (El Pais)
- {Elemento} (Bagdad 48 civili, Nassiriya 10 civili)
e le relazioni restano in questo ambito solo 2, quella tra {attestazione storica} e (chi) {Documenta} ed ancora tra (chi) {Documenta} e il/gli {Elemento} di documentazione..
ma probabilmente non ho correttamente compreso cosa modelli e come.. poi {attestazione storica} potra' essere collegata a {centro riferimento} magari intendendo quest'ultimo come "medio oriente", ovvero ancora "storia moderna", su questo non ho informazioni..
l'{evento storico} non puo' ne' documentare ne' essere documentata da un {elemento} in termini di esistenza, in quanto "puoi avere" difformita' di informazione, questo almeno in senso filosofico.. brutalmente, {attestazione storica} "Atlantide esiste" e' {Documentato} da "Platone" nei "dialoghi", posizionandola oltre Gibilterra, ma {Documentato} da "Bacone" in "La nuova Atlandite" la posizione diventa "al largo della costa occidentale americana", mentre ancora, {Documentato} da "Aristotele" "L'uomo che l'ha sognata, l'ha anche fatta scomparire", quindi non esiste.. e la tua relazione "avvenuto" perde il suo motivo di esistenza in quanto tendenzialmente sarebbe ridondante con la {documentazione} e afferirebbe, nell'ultimo caso, ad una affermazione di negazione... quindi il modello si ri-semplifica nell'iniziale terna {attestazione storica} 1-8 {Documenta} 1-8 {Elemento}, dove {attestazione storica} e' a tutti gli effetti un generico "avvenimento" confermato o smentito da "qualcuno" che ha detto "qualche cosa".
il modello si estende poi con {centro riferimento} 1-8 {attestazione storica} per semplice riferimento rispetto al contenuto..
ma probabilmente non ho ben compreso il tuo disegno..
saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
Allora spiego un attimo il db così come l'ho concepito. Partiamo da un esempio più vicino al mio problema. Io ho un documento scritto da Giustiniani che parla della morfologia del Regno di Napoli. Nel documento io ho il numero degli abitanti per ogni città divisi in diversi anni. Oltre a questo ho anche un altro documento scritto da Mazzella che, sostanzialmente, ha prodotto un documento analogo a quello di Giustiniani. In concreto ho che nel 1611 per la città di Napoli sono stati censiti 1000 abitanti e questo me lo dice il documento di Giustiniani mentre il documento di Mazzella mi dice che nello stesso anno e nella stessa città ne erano 998. Io ho strutturato il db in maniera generale e con i dati che mi ritrovo li vado a salvare in questo modo: in Evento Storico io salvo l'evento che ho, in questo caso è il censimento del 1611. Dove è avvenuto il censimento? A Napoli e quindi salvo questa informazione nella tabella Centro Riferimento. Chi mi dice che è avvenuto questo evento storico? Me lo dicono sia Mazzella che Giustiniani, quindi salvo queste due fonti in Attestazione Storica (sono loro che mi attestano un evento storico). L'evento mi dice che c'è stato un censimento, quanti ne erano? Erano 1000, per Giustiniani, e 998, per Mazzella. Qui nasce il problema. Il numero delle persone censite va salvata nella tabella Elemento dove nella colonna Elemento salvo Persone Censite e nella colonna Valore ci metto 1000. Quindi lo schema che avevo prima era questo:

Link: Schema E-R vecchio

e questo mi permetteva di salvare le informazioni così come le ho esposte prima. Il problema nasce dal fatto che in questo caso ho che il numero delle persone differiscono in base alla fonte e così come ho implementato il db non posso né salvare il doppio valore ne posso sapere chi mi ha dato, delle due fonti, l'informazione. Cioè non posso salvare anche 998 e non posso sapere se 1000 lo ha scritto Giustiniani o lo ha scritto Mazzella. Quindi dato questo problema avevo pensato di mettere l'associazione Documenta per cercare di recuperare la fonte, ma mi sono accorto che la soluzione che avevo pensato non andava bene. Questo è lo schema con l'aggiunta dell'associazione sopra descritta:

Link: Schema E-R nuovo
Modificato da mkel84 il 02 giugno 2010 12.01 -
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
mkel84 wrote:
Allora vi spiego un attimo il db così come l'ho concepito. Partiamo da un esempio più vicino al mio problema. Io ho un documento scritto da Giustiniani che parla della morfologia del Regno di Napoli. Nel documento io ho il numero degli abitanti per ogni città divisi in diversi anni. Oltre a questo ho anche un altro documento scritto da Mazzella che, sostanzialmente, ha prodotto un documento analogo a quello di Giustiniani. In concreto ho che nel 1611 per la città di Napoli sono stati censiti 1000 abitanti e questo me lo dice il documento di Giustiniani mentre il documento di Mazzella mi dice che nello stesso anno e nella stessa città ne erano 998. Io ho
strutturato il db in maniera generale e con i dati che mi ritrovo li vado a salvare in questo modo: in Evento Storico io salvo l'evento che ho, in questo caso è il censimento del 1611. Dove è avvenuto il censimento? A Napoli e quindi salvo questa informazione nella tabella Centro Riferimento. Chi mi dice che è avvenuto questo evento storico? Me lo dicono sia Mazzella che Giustiniani, quindi salvo queste due fonti in Attestazione Storica (sono loro che mi attestano un evento storico). L'evento mi dice che c'è stato un censimento, quanti ne erano? Erano 1000, per Giustiniani, e 998, per Mazzella. Qui nasce il problema. Il numero delle persone censite va salvata nella tabella Elemento dove nella colonna Elemento salvo Persone Censite e nella colonna Valore ci metto 1000. Quindi lo schema che avevo prima era questo:
Link: Schema E-R vecchio
http://img203.imageshack.us/img203/4131/schemavecchioer.jpg e questo mi permetteva di salvare le informazioni così come le ho esposte prima. Il problema nasce dal fatto che in questo caso ho che il numero delle persone differiscono in base alla fonte e così come ho implementato il db non posso né salvare il doppio valore ne posso sapere chi mi ha dato, delle due fonti, l'informazione. Cioè non posso salvare anche 998 e non posso sapere se 1000 lo ha scritto Giustiniani o lo ha scritto Mazzella. Quindi dato questo problema avevo pensato di mettere l'associazione Documenta per cercare di recuperare la fonte, ma mi sono accorto che la soluzione che avevo pensato non andava bene. Questo è lo schema con l'aggiunta
dell'associazione sopra descritta:
Link: Schema E-R nuovo
http://img709.imageshack.us/img709/4782/schemamb.jpg

sinceramente ancora non mi e' chiaro come hai definito gli attributi di queste entita', ma tant'e', tagliamo la testa al toro
a livello relazionale puoi eventualmente anche scrivere
SET NOCOUNT ON;
USE tempdb;
GO
CREATE TABLE dbo.EventoStorico (
Id int NOT NULL PRIMARY KEY,
Descrizione varchar(20) 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(20) NOT NULL
);
CREATE TABLE dbo.AttestazioneStorica (
Id int NOT NULL PRIMARY KEY,
IdEvento int NOT NULL
CONSTRAINT fk$AttestazioneStorica$has$evento
FOREIGN KEY REFERENCES dbo.EventoStorico (Id),
Descrizione varchar(20) NOT NULL
);
CREATE TABLE dbo.Elemento (
Id int NOT NULL PRIMARY KEY,
IdAttestazioneStorica int NOT NULL
CONSTRAINT fk$Elemento$has$AttestazioneStorica
FOREIGN KEY REFERENCES dbo.AttestazioneStorica (Id),
Descrizione varchar(20) NOT NULL
);


INSERT dbo.EventoStorico VALUES ( 1, 'Censimento 1611' );
INSERT dbo.CentroRiferimento VALUES ( 1, 1, 'Napoli' );

INSERT dbo.AttestazioneStorica VALUES ( 1, 1, 'Giustiniani' ); INSERT dbo.Elemento VALUES ( 1, 1, '1000 pax' );

INSERT dbo.AttestazioneStorica VALUES ( 2, 1, 'Mazzella' );
INSERT dbo.Elemento VALUES ( 2, 2, '998 pax' );
GO
SELECT es.Descrizione AS [EventoStorico],
ce.Descrizione AS [CentroRiferimento],
a.Descrizione AS [AttestazioneStorica],
e.Descrizione AS [Esposizione]
FROM dbo.EventoStorico es
JOIN dbo.CentroRiferimento ce ON ce.IdEvento = es.Id
JOIN dbo.AttestazioneStorica a ON a.IdEvento = es.Id
JOIN dbo.Elemento e ON e.IdAttestazioneStorica = a.Id
WHERE es.Descrizione = 'Censimento 1611';
GO
DROP TABLE dbo.Elemento, dbo.AttestazioneStorica, dbo.CentroRiferimento, dbo.EventoStorico;
--<------
EventoStorico CentroRiferimento AttestazioneStorica Esposizione ------------------
------------------
------------------
------------------
Censimento 1611 Napoli Giustiniani 1000 pax Censimento 1611 Napoli Mazzella 998 pax
questa modellazione e' pero' completamente priva di possibilita' di "verifica" e di imposizione di vincoli di validazione...
per l'Esposizione (il "valore" di Elemento) non puoi definire un vero e proprio dominio in quanto puo' trattarsi di date, numeri, testo puro, o quant'altro.. teoricamente potrebbe anche contenere un valore strutturato quale una stringa XML che esprima altre valorizzazioni secondarie, pensa ad esempio a strutturare in tale tipo di contenitore i "deceduti civili di Bagdad e Nassirya", e la definizione relazionale cosi' libera ti evita di limitare Elemento ad una singola unita' per ogni AttestazioneStorica ... quindi, a tutti gli effetti, hai un vero e proprio "contenitore" generico.. mi esprimo in tal senso perche' ovviamente non conosco cosa debba essere la gestione del tuo dato in senso lato, e non penso si trattera' sempre e solo di censimenti...

tutte le interrogazioni richiederanno l'accesso ad almeno 3 entita', 4 se vuoi sapere il Centro di Riferimento relativo..
non mi convince pero' la definizione di {Centro di Riferimento} cosi' come si evince dalla tua esposizione.. potresti diversamente strutturarla in una referenza a qualche cosa (Napoli) e mantenerne il riferimento in {Avvenimento Storico}, oppure semplificare la tua "realta'" integrando direttamente l'attributo di {Centro di Riferimento} nell'entita' {Avvenimento Storico}, denormalizzando la tabella e perdendo pero' la possibilita' di "raggruppamento" vincolante ed omogeneo in tal senso... cosi' come ora implementata, diventa parte estesa dell'attributo di {Avvenimento Storico}, potenzialmente duplicabile (che potrebbe essere un vincolo richiesto e necessario)...
non so, dipende proprio tutto da "cosa tu stia in effetti implementando" e dall'approfondimento della realta' che vuoi raggiungere...
saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
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.
1.976 messaggi dal 27 luglio 2005
Contributi
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

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.