title: Architecture Question - One Central Database and Many Different Programs Accessing It
body: <p>I am designing a program that will build and maintain a database, and act as a central server.  This is the 'first stage' of a grander plan.  Coming later will be 3-5 remote programs built around the information put into this database.</p>
  
  <p>The requirements are:</p>
  
  <ol>
  <li>The remote programs must be able to access the information in the database.</li>
  <li>The remote programs must be able to set alerts when information in the database changes.</li>
  <li>The remote programs must be able to request the central server to go out and fetch new / different data.</li>
  </ol>
  
  <p>So, the question is this: how do I expose this data and events to the outside world?  My two choices are:</p>
  
  <ol>
  <li>Have them communicate directly with my 'server' application.  This seems easier to:
  <ul>
  <li>do event notifications (although I suppose I'm probably missing something in SQL). </li>
  <li>It also seems like this is more 'upgradeable' - that is I don't need to worry about the database updating and crashing all my remote programs because something changed.  I can account for this and transform it the data to a version the child program will understand.</li>
  </ul></li>
  <li>Just go ahead and let them connect directly to the database.
  <ul>
  <li>This nice thing about this is that it's <em>solved</em>.  I can use LINQ for SQL.  The only thing the main server application needs to do is let the remote programs know where the database is.</li>
  <li>I'm unsure how to trigger / relay 'events' for field changes in a database over different programs that may or may not be on the same computer.</li>
  </ul></li>
  </ol>
  
  <p>Forgive my ignorance on this question.  I feel woefully unprepared to ask it, but I'm having a hard time figuring out where to get started with this.  It is my first real DB project :-/</p>
  
  <p>Thanks!</p>