Domanda

Voglio registrare ciò che le varie fonti dicono di un personaggio storico.cioè.

  • Il sito Wikipedia dice che Susan B.Anthony è nata il 15 febbraio 1820 e il suo colore preferito era il blu
  • Il libro Secolo di lotta dice che Susan B.Anthony è nata il 12 febbraio 1820 e il suo colore preferito era il rosso
  • Il libro Storia del suffragio femminile dice che Susan B.Anthony nacque il 15 febbraio 1820 e il suo colore preferito era il rosso ed era cugina di secondo grado di Abraham Lincoln

Voglio anche che i ricercatori possano esprimere la loro fiducia, ad esempio con una percentuale, nelle singole affermazioni di queste fonti.cioè.

  • L'utente A è sicuro al 90% che Susan B.Antonio è nato il 15 febbraio 1820;Il 75% è sicuro che il suo colore preferito fosse il blu e il 30% è sicuro che fosse cugina di secondo grado di Abraham Lincoln
  • L'utente B è sicuro al 30% che Susan B.Antonio è nato il 12 febbraio 1820;Il 60% è sicuro che il suo colore preferito fosse il blu e il 10% sicuro che fosse cugina di secondo grado di Abraham Lincoln

Desidero quindi che ogni utente abbia una visione di Susan B.Anthony che mostra la sua data di nascita, il colore preferito e le relazioni che gli utenti ritengono abbiano maggiori probabilità di essere vere.

Voglio anche utilizzare un archivio dati di database relazionale e il modo in cui posso pensare di farlo è creare una tabella separata per ogni singolo tipo di fatto atomico in cui voglio che gli utenti possano esprimere la loro fiducia.Quindi per questo esempio ci sarebbero otto tabelle in totale e tre tabelle separate per i tre fatti atomici separati.

Source(id)
Person(id)

Claim(claim_id, source, FOREIGN KEY(source) REFERENCES Source(id) )
Alleged_birth_date(claim_id, person, birth_date, FOREIGN KEY(claim_id) REFERENCES Claim(id), FOREIGN KEY(person) REFERENCES person(id))
Alleged_favorite_color(claim_id, person, color, FOREIGN KEY(claim_id) REFERENCES Claim(id), FOREIGN KEY(person) REFERENCES person(id)) 
Alleged_kinship(claim_id, person, relationship type, kin, FOREIGN KEY(claim_id) REFERENCES Claim(id), FOREIGN KEY(person) REFERENCES Person(id))

User(id)
Confidence_in_claim(user, claim, confidence, FOREIGN KEY(user) REFERENCES User(id), FOREIGN KEY(claim) REFERENCES claim(id))

Sembra che diventi molto complicato molto rapidamente, poiché in realtà si desidera registrare molti tipi di fatti atomici.Ci sono modi migliori per farlo?

Questo è, credo, lo stesso problema che Martin Fowler definisce Osservazioni contraddittorie.

È stato utile?

Soluzione

RDF è ottimo per questo.Di solito viene descritto come un formato per i metadati;ma in realtà è un modello grafico di "asserzioni" su triplette.

L'intera idea del "web semantico" è quella di pubblicare molti fatti su RDF, e i motori di ricerca sarebbero motori di inferenza che attraversano il grafico unificato per trovare relazioni.

Esistono anche alcuni meccanismi per fare riferimento a una terzina, quindi puoi dire qualcosa su un'affermazione, come la sua origine (chi lo dice?), o quando è stata affermata (quando l'ha detto?), o quanto ci credi essere vero, ecc.

Come grande esempio, il tutto OpenCyc La "base di conoscenza del buon senso" è interrogabile in RDF

Altri suggerimenti

Dovresti provare un modello di schema a stella, incentrato su una tabella "Fatti" e diverse tabelle "Dimensioni".Questo è un modello ben esplorato e ci sono molte ottimizzazioni del database per esso.

claim_fact(source_id, person_id, user_id, Details_id, peso)

Source_dimension(id, nome)

Persona_dimensione(id, nome)

Dimensione_utente(id, nome)

dettagli_dimension(id, nome NOT NULL, colore NULLABLE, parentela NULLABLE, compleanno NULLABLE)

Ogni affermazione avrebbe una fonte, una persona, un utente e dettagli.I valori NAME per i dettagli sarebbero valori come "parentela", "compleanno".

Tieni presente che questo è uno schema OLAP (piuttosto che una struttura OLTP) e, essendo tale, non è completamente normalizzato.I vantaggi superano qualsiasi problema che potresti incontrare a causa della ridondanza, poiché le query sugli schemi a stella sono altamente ottimizzate dai DBMS configurati per il data warehousing.

LETTURA CONSIGLIATA:Il toolkit del data warehouse (Kimball, et al.)

Penso che quello che vuoi usare sia una "borsa delle proprietà".Invece di modellare ogni singolo tipo di fatto che vuoi descrivere, vuoi avere una tabella che conterrà un ID, una "chiave" (in questo caso, la presunta informazione (come "parentela")) e un "valore " (in questo caso, il valore presunto (come "Abraham Lincoln)).Quindi vuoi avere una seconda tabella che leghi i tuoi ricorrenti a quella tabella, insieme al livello di fiducia che hanno in tali informazioni.Quella tabella avrebbe semplicemente l'ID della fonte, l'ID della proprietà e la fiducia che la fonte ha nelle informazioni.In questo modo, puoi avere una fonte che ha molte o poche informazioni;puoi anche modellare fonti diverse con diversi livelli di fiducia in un dato attributo;inoltre, non vi sono limiti al numero di tipi diversi di informazioni che è possibile archiviare.

È una soluzione piuttosto standard per situazioni come la tua in cui disponi di grandi quantità di informazioni opzionali a cui desideri fare riferimento incrociato.

Sembra che diventi molto complicato molto rapidamente

Non stai scherzando.Dai un'occhiata al lavoro su ontologia E rappresentazione della conoscenza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top