Archenet Database

Da Wikipedia, l'enciclopedia libera.

Il database di archenet è già attivo. Attualmente, tuttavia, è creato in Plone (su Zope + database relazionale). L'esperienza maturata ci fa preferire il passaggio ad un altro framework: Ruby on Rails (RoR). I dati, in RoR, sono memorizzati anch'essi in database relazionale. Si recupera, dunque, parte del lavoro fatto.

Vediamo di seguito la struttura proposta per il nuovo database

Contents

Premessa

Il database è composto principalmente da 4 tabelle, corrispondenti ai 4 elementi (oggetti) principali del database:

  1. Organizzazioni
  2. Persone (facce)
  3. News
  4. Eventi

Questi elementi sono legati tra loro da diverse relazioni, vediamole nel dettaglio.

  • Ogni Organizzazione ha zero, una o più Persone
  • Ogni Organizzazione ha zero, una o più News
  • Ogni Organizzazione ha zero, uno o più Eventi

ora, è vero che

  • Ogni News appartiene ad una sola Organizzazione
  • Ogni Evento appartiene ad una sola Organizzazione

ma non è (sempre) vero che

  • Ogni Persona appartiene ad una sola Organizzazione (ci possono essere difatti persone che appartengono a più Organizzazioni, cioè non è vero che se una persona appartiene ad una organizzazione, non possa anche appartenere ad altre organizzazioni).

La tabella Organizzazioni e la tabella Persone sono difatti legate da una relazione molti a molti, mentre la tabella Organizzazioni e le tabelle News ed Eventi sono legate da relazioni uno a molti

Un ragionamento analogo vale per le tabelle:

  • GeneralContacts
  • MusicProgrammingContacts
  • MusicProgrammingContacts

La tabella GeneralContacts mi permette di sapere chi, tra le persone del database, rappresenta una persona di riferimento per contattare una certa Organizzazione. Ogni Organizzazione ha zero, una o più Persone con il ruolo di GeneralContacts, ma non è vero che se una persona è GeneralContacts di una organizzazione non lo possa anche essere di un'altra. Quindi la tabelle GeneralContacts è in relazione molti a molti con le tabelle Organizzazioni e Persone.

Stesso dicasi per MusicProgrammingContacts e MusicProgrammingContacts.

La tabella

  • LegalRepresentative

è invece in chiara relazione uno a molti con la tabella organizzazione (ogni organizzazione ha uno ed uno solo responsabile legale)

Infine la tabella

  • FriendsOf

E' una chiara tabelle molti a molti che memorizza le coppie di persone che si conoscono.

Organizations

La tabella Organizations ha come elementi (oggetti) le organizzazioni, e come variabili (attributi) le caratteristiche principali di una organizzazione.

Ogni organizzazione ha degli elementi nelle tabelle faces, news ed events.

Schema:

       id primary key 
       Name, stringa
       FullName, stringa
       OrganisationType, stringa
       WebAddress, stringa
       Photo, image
       Logo, image
       ShortDescription, text
       Why, text
       InitiatorsProfile, text
       * AddressField("BuildingAddress", 
       Latitude, float
       Longitude, float
       * AddressField("PostalAddress", 
       * AddressField("LegalAddress", 
       Phone1, stringa
       Phone2, stringa
       Fax, stringa
       EmailAddress1, stringa
       EmailAddress2, stringa
       Activities, LinesField
       OtherActivities, stringa
       HaveBuilding, stringa
       SquareMeters, integer
       Facilities, LinesField
       OtherFacilities, text
       PercentageOfWheelChairAccess, integer
       OpeningDate, stringa
       FormerUse, stringa
       ContractType, stringa
       ProprietyOfSpace, stringa
       NotesOnBuilding, text
       Open, stringa 
       PercentageOfFreeEvents, integer
       AverageTicketPrice, float
       CardIsMandatory, stringa
       CardFee, float
       CardAffiliateOrganisation, stringa
       AverageMembersPerYear, integer
       SelfFinanceSupport, integer
       PublicFinanceSupport, integer
       PrivateFinanceSupport, integer
       SponsorshipFinanceSupport, integer
       OthersFinanceSupport, integer
       Network, text
       Notes, text
       Link a feed news RSS, stringa
       Link a feed events iCal, stringa
       Num. of employee
       Yearly gross budget

Nella attuale versione del database ci sono anche i seguenti campi (che ora metteremo in apposite tabelle: vedi oltre)

       * ReferenceField("LegalRepresentative",
       * ReferenceField("GeneralContacts",
       * ReferenceField("MusicProgrammingContacts",
       * ReferenceField("WebmasterContacts",

Faces (persone)


La tabella Faces ha come elementi (oggetti) le persone, e come variabili (attributi) le caratteristiche principali di una persona.

Ogni persona (face) appartiene ad un elemento della tabella Organizations.

Schema:

   id primary key
   organization_id 
   StringField('Firstname',
   StringField('Surname',
   ComputedField('Fullname',
   StringField('Nickname',
   ImageField('Photo',
   StringField('Username',
   StringField('EmailAddress1',
   StringField('Skype',
   StringField('BusinessPhone',
   StringField('BusinessFax',
   StringField('HomePhone',
   StringField('MobilePhone',
   AddressField('PostalAddress',
   StringField('WebAddress',
   ReferenceField('Employer',
   StringField('JobTitle',
   StringField('Gender',
   DateTimeField('BirthDate',
   TextField('Notes',

News_items


La tabella News_items ha come elementi (oggetti) le notizie, e come variabili (attributi) le caratteristiche principali di una notizia.

Ogni notizia (news_item) appartiene ad un elemento della tabella Organizations.

Schema:

 id primary key 
 organization_id 
 titolo
 link a news
 descrizione
 categoria
 pubDate (data di pubblicazione)
 utente che ha creato la news
 link (url) all'immagine 


Come si vede lo schema include le variabili tipiche di un RSS. Ecco ad esempio un RSS di wordpress

preambolo (unico per tute le news)

<channel>
<title>TITOLO SITO WEB</title>
<link>LINK SITO WEB</link>
<description>BREVE DESCRIZIONE SITO WEB...</description>
<pubDate>Tue, 03 Apr 2007 16:05:02 +0000</pubDate>
<generator>http://wordpress.org/?v=2.1</generator>
<language>en</language>

ecco la news (i campi necessari per le specifiche RSS 2.0 sono title, link, description)

<item>
<title>TITOLO NEWS</title>
<link>LINK A NEWS</link>
<description><![CDATA[Descrizione ecc. ecc. ecc. ecc. ecc. ecc. ecc. ecc. ecc. [...]]></description>
<comments>LINK A PAGINA COMMENTI</comments>
<pubDate>Tue, 03 Apr 2007 15:30:01 +0000</pubDate>
<dc:creator>admin</dc:creator>
<category>Categoria</category>
<guid isPermaLink="false">http://www.migramedia.it/nuovo/2007/04/03/39/ </guid>
<content:encoded><p>Descrizione ecc. ecc. ecc. ecc. ecc. ecc. ecc. ecc. ecc.</p></content:encoded>Insert non-formatted text here
<wfw:commentRss>http://www.migramedia.it/nuovo/2007/04/03/39/feed/</wfw:commentRss>
</item>

chiusura del feed

</channel>
</rss>

Events

La tabella Events ha come elementi (oggetti) gli eventi, e come variabili (attributi) le caratteristiche principali di un evento.

Ogni evento (event) appartiene ad un elemento della tabella Organizations.

Schema:

 id primary key 
 luogo: (stato, città, provincia, indirizzo, coordinate geografiche)
 titolo evento
 data e ora inizio l'evento
 data e ora fine evento
 link a evento
 descrizione
 categoria
 pubDate (data di pubblicazione)
 utente che ha creato l'evento
 link (url) all'immagine 
 biglietto



Come si vede lo schema include le variabili tipiche del protocollo iCalendar:

Personal tools