You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
783 lines
25 KiB
783 lines
25 KiB
12 years ago
|
<!--
|
||
|
<!DOCTYPE appendix PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" "dtd/kdex.dtd">
|
||
|
-->
|
||
|
|
||
|
<appendix id="database">
|
||
|
<title
|
||
|
>Inleiding in databases</title>
|
||
|
|
||
|
<sect1 id="what-is-a-database">
|
||
|
<title
|
||
|
>Wat is een database?</title>
|
||
|
<para
|
||
|
>Een database kan gedefinieerd worden als een verzameling gegevens over één onderwerp. Deze is zo georganiseerd dat men gemakkelijk naar informatie kan zoeken, wijzigingen kan maken en nieuwe items toe kan voegen. </para>
|
||
|
<para
|
||
|
>Bekijk het onderstaande diagram voor één van de bovenstaande voorbeelden: een telefoonboek. </para>
|
||
|
<screenshot>
|
||
|
<screeninfo
|
||
|
>Een diagram van een database met telefoonnummers</screeninfo>
|
||
|
<mediaobject>
|
||
|
<imageobject>
|
||
|
<imagedata fileref="contact-example.png" format="PNG"/>
|
||
|
</imageobject>
|
||
|
<textobject>
|
||
|
<phrase
|
||
|
>Een diagram van een database met telefoonnummers</phrase>
|
||
|
</textobject>
|
||
|
</mediaobject>
|
||
|
</screenshot>
|
||
|
<para
|
||
|
>In de bovenstaande afbeelding ziet u de gegevens van twee contactpersonen, elk op een aparte kaart. Een kaart kan ook een enkele rij in een tabel voorstellen. </para>
|
||
|
|
||
|
<para
|
||
|
><emphasis
|
||
|
>De tabel <guilabel
|
||
|
>Contacten</guilabel
|
||
|
></emphasis
|
||
|
></para>
|
||
|
<informaltable>
|
||
|
<tgroup cols="2">
|
||
|
<tbody>
|
||
|
<row>
|
||
|
<entry
|
||
|
><guilabel
|
||
|
>Naam</guilabel
|
||
|
></entry>
|
||
|
<entry
|
||
|
><guilabel
|
||
|
>Tel. nr.</guilabel
|
||
|
></entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry
|
||
|
>Joan</entry>
|
||
|
<entry
|
||
|
>699 23 43 12</entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry
|
||
|
>Adam</entry>
|
||
|
<entry
|
||
|
>711 19 77 21</entry>
|
||
|
</row>
|
||
|
</tbody>
|
||
|
</tgroup>
|
||
|
</informaltable>
|
||
|
|
||
|
<para
|
||
|
><emphasis
|
||
|
>Termen en definities</emphasis
|
||
|
>: Een enkel gegeven dat deel uitmaakt van een grotere verzameling kan een <firstterm
|
||
|
>rij</firstterm
|
||
|
> of een <firstterm
|
||
|
>record</firstterm
|
||
|
> genoemd worden. De verzameling wordt gewoonlijk een <firstterm
|
||
|
>tabel</firstterm
|
||
|
> genoemd. Een logische naam voor de tabel beschrijft de gegevens die erin opgeslagen zijn, in dit geval is dat <guilabel
|
||
|
>Contacten</guilabel
|
||
|
>. Verder bestaat elke rij in de tabel uit <firstterm
|
||
|
>kolommen</firstterm
|
||
|
>, ook wel <firstterm
|
||
|
>velden</firstterm
|
||
|
> genoemd. In de tabel <guilabel
|
||
|
>Contacten</guilabel
|
||
|
> zijn er twee kolommen (velden): <guilabel
|
||
|
>Naam</guilabel
|
||
|
> en <guilabel
|
||
|
>Tel. nr.</guilabel
|
||
|
>. </para>
|
||
|
<para
|
||
|
>Voor eenvoudig gebruik kan een <firstterm
|
||
|
>database</firstterm
|
||
|
> uit een enkele tabel bestaan. Vaak worden deze twee ook als gelijkwaardig gezien. zoals u zult zien, gebruiken we voor echte databases gewoonlijk meer dan één tabel. </para>
|
||
|
<para
|
||
|
>Kortom, u hebt al een eenvoudige database met één tabel <guilabel
|
||
|
>Contacten</guilabel
|
||
|
>. </para>
|
||
|
</sect1>
|
||
|
|
||
|
|
||
|
<sect1 id="database-and-spreadsheet">
|
||
|
<title
|
||
|
>Database en spreadsheet</title>
|
||
|
<para
|
||
|
>Hoogstwaarschijnlijk hebt u al spreadsheet-toepassingen gebruikt, zoals KSpread, OpenOffice.org Calc of Microsoft Excel. In dat geval vraagt u zich misschien af: spreadsheets en databases hebben allebei tabellen, waarom zou ik de laatste gebruiken? </para>
|
||
|
<para
|
||
|
>Bij het vergelijken van spreadsheets en databases kunt u de volgende punten tegenkomen die later gedetailleerder ter sprake komen: </para>
|
||
|
<itemizedlist>
|
||
|
<listitem
|
||
|
><para
|
||
|
><link linkend="referential-data-integrity"
|
||
|
>Integriteit van referentiegegevens</link
|
||
|
></para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
><link linkend="data-redundyncy"
|
||
|
>Overtollige gegevens</link>
|
||
|
</para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
><link linkend="data-integrity-and-validity"
|
||
|
>Integriteit en geldigheid van gegevens</link
|
||
|
></para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
><link linkend="data-limiting"
|
||
|
>Beperking van gegevensweergave</link
|
||
|
></para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
><link linkend="performance-and-capacity"
|
||
|
>Prestatie en capaciteit</link
|
||
|
></para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
><link linkend="convenient-data-entry"
|
||
|
>Gemakkelijke gegevensinvoer</link
|
||
|
></para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
><link linkend="reports"
|
||
|
>Rapporten</link
|
||
|
></para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
><link linkend="programming"
|
||
|
>Programmeren</link
|
||
|
></para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
><link linkend="multiuse"
|
||
|
>Gebruik door meer personen tegelijk</link
|
||
|
></para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
><link linkend="security"
|
||
|
>Veiligheid</link
|
||
|
></para
|
||
|
></listitem>
|
||
|
</itemizedlist>
|
||
|
|
||
|
<sect2 id="difference-database-and-spreadsheet">
|
||
|
<title
|
||
|
>Waarin verschilt een database van een spreadsheet?</title>
|
||
|
|
||
|
<para
|
||
|
>Om de capaciteit groter dan die van een mobiele telefoon te maken, voegt u een kolom (veld) <guilabel
|
||
|
>Adres</guilabel
|
||
|
> aan de tabel <guilabel
|
||
|
>Contacten</guilabel
|
||
|
> toe. Voeg voor iedere persoon meer telefoonnummers (werk, thuis) toe en voeg achternamen aan namen toe. Om het eenvoudiger te maken nemen we het volgende aan: </para>
|
||
|
<itemizedlist>
|
||
|
<listitem
|
||
|
><para
|
||
|
>de tabel is beperkt tot twee personen (in een echte database kunnen dat er honderden of duizenden zijn)</para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
>er zijn geen twee personen met dezelfde naam en achternaam</para>
|
||
|
</listitem>
|
||
|
</itemizedlist>
|
||
|
<para
|
||
|
><emphasis
|
||
|
>De tabel "Contacten"</emphasis
|
||
|
></para>
|
||
|
<informaltable>
|
||
|
<tgroup cols="3">
|
||
|
<tbody>
|
||
|
<row>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Naam en achternaam</emphasis
|
||
|
></entry>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Tel</emphasis
|
||
|
></entry>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Adres</emphasis
|
||
|
></entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry
|
||
|
>Joan Smith</entry>
|
||
|
<entry
|
||
|
>699 23 43 12</entry>
|
||
|
<entry
|
||
|
>Western Gate 1, Warsaw</entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry
|
||
|
>Adam Willson</entry>
|
||
|
<entry
|
||
|
>711 19 77 21</entry>
|
||
|
<entry
|
||
|
>London, Frogs Drive 5</entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry
|
||
|
>Joan Smith</entry>
|
||
|
<entry
|
||
|
>110 98 98 00</entry>
|
||
|
<entry
|
||
|
>Western Gate 1</entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry
|
||
|
>Smith Joan</entry>
|
||
|
<entry
|
||
|
>312 43 42 22</entry>
|
||
|
<entry
|
||
|
>Warsaw, Western Gate 1</entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry
|
||
|
>ADAM Willson</entry>
|
||
|
<entry
|
||
|
>231 83 02 04</entry>
|
||
|
<entry
|
||
|
>Frogs Drive 5, London</entry>
|
||
|
</row>
|
||
|
</tbody>
|
||
|
</tgroup>
|
||
|
</informaltable>
|
||
|
|
||
|
<para
|
||
|
>Zo'n tabel kan zowel in een spreadsheet als in een database gemaakt worden. In een spreadsheet is dat natuurlijk gemakkelijk te doen. Welk probleem komen we op dit punt tegen? </para>
|
||
|
|
||
|
<sect3 id="referential-data-integrity">
|
||
|
<title
|
||
|
>Integriteit van referentiegegevens</title>
|
||
|
<para
|
||
|
>Veronderstel dat u een spreadsheet gebruikt en dat u het adres van ten minste één persoon moet veranderen. Er is een klein probleem: u moet het adres vaak in veel rijen veranderen. Joan staat bijvoorbeeld op drie rijen. Er ontstaat een echt probleem als u vergeet om het adres in één van de rijen te veranderen - het adres dat bij deze persoon hoort, is <emphasis
|
||
|
>dubbelzinnig</emphasis
|
||
|
>, hierdoor <emphasis
|
||
|
>verliezen uw gegevens hun integriteit</emphasis
|
||
|
>. </para>
|
||
|
<para
|
||
|
>Bovendien is er geen eenvoudige manier om een persoon uit de tabel te verwijderen, omdat u eraan moet denken dat alle rijen met betrekking tot die persoon verwijderd moeten worden. </para>
|
||
|
</sect3>
|
||
|
|
||
|
|
||
|
<sect3 id="data-redundyncy">
|
||
|
<title
|
||
|
>Overtollige gegevens</title>
|
||
|
<para
|
||
|
>Dit houdt direct verband met het vorige probleem. In de velden <guilabel
|
||
|
>Naam en achternaam</guilabel
|
||
|
> en <guilabel
|
||
|
>Adres</guilabel
|
||
|
> zijn dezelfde gegevens meerdere keren ingevoerd. Dit is typerend voor de manier waarop spreadsheets gegevens opslaan, de database wordt onnodig groot en vereist daardoor meer van de computer (meer te verwerken gegevens vereisen meer tijd). </para>
|
||
|
<para
|
||
|
>Hoe kunt u deze problemen met behulp van een database oplossen? U kunt de informatie in kleinere stukken opsplitsen door een aanvullende tabel <emphasis
|
||
|
>Personen</emphasis
|
||
|
> te creëren, deze tabel heeft slechts twee kolommen: <guilabel
|
||
|
>Naam en achternaam</guilabel
|
||
|
> en <guilabel
|
||
|
>Adres</guilabel
|
||
|
>: </para>
|
||
|
|
||
|
<para
|
||
|
><emphasis
|
||
|
>De tabel <guilabel
|
||
|
>Personen</guilabel
|
||
|
></emphasis
|
||
|
></para>
|
||
|
<informaltable>
|
||
|
<tgroup cols="2">
|
||
|
<tbody>
|
||
|
<row>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Naam en achternaam</emphasis
|
||
|
></entry>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Adres</emphasis
|
||
|
></entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry
|
||
|
>Joan Smith</entry>
|
||
|
<entry
|
||
|
>Western Gate 1, Warsaw</entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry
|
||
|
>Adam Willson</entry>
|
||
|
<entry
|
||
|
>Frogs Drive 5, London</entry>
|
||
|
</row>
|
||
|
</tbody>
|
||
|
</tgroup>
|
||
|
</informaltable>
|
||
|
|
||
|
<para
|
||
|
>Elke rij in de tabel <guilabel
|
||
|
>Personen</guilabel
|
||
|
> komt overeen met een <emphasis
|
||
|
>enkele persoon</emphasis
|
||
|
>. De tabel <guilabel
|
||
|
>Contacten</guilabel
|
||
|
> is vanaf nu een relatie naar de tabel <guilabel
|
||
|
>Personen</guilabel
|
||
|
>. </para>
|
||
|
|
||
|
</sect3>
|
||
|
|
||
|
<sect3 id="data-integrity-and-validity">
|
||
|
<title
|
||
|
>Integriteit en geldigheid van gegevens</title>
|
||
|
<para
|
||
|
>Let op de manier waarop gegevens in de velden <guilabel
|
||
|
>Naam en achternaam</guilabel
|
||
|
> en <guilabel
|
||
|
>Adres</guilabel
|
||
|
> zijn ingevuld. Mensen die gegevens intypen kunnen fouten maken en soms slordig zijn. In ons voorbeeld hebben we namen in verschillende volgordes en vormen (Joan Smith en Smith Joan; Adam en ADAM) en ook verschillende manieren om hetzelfde adres in te typen. Er zijn vast nog meer verschillende manieren te bedenken. </para>
|
||
|
<para
|
||
|
>Het bovenstaande laat zien dat, wanneer u ⪚ het telefoonnummer van een persoon met het adres "Western Gate 1, Warsaw" zoekt, u niet alle resultaten ziet. U krijgt slechts één rij te zien in plaats van drie. Ook vindt u niet alle telefoonnummers voor "Joan Smith" in het veld <guilabel
|
||
|
>Naam en achternaam</guilabel
|
||
|
>, omdat "Smith Joan" niet hetzelfde is als "Joan Smith". </para>
|
||
|
<para
|
||
|
>Hoe kunt u deze problemen oplossen door een database te gebruiken? U kunt dit doen door het ontwerp van de tabel <guilabel
|
||
|
>Personen</guilabel
|
||
|
> te veranderen: </para>
|
||
|
<orderedlist>
|
||
|
<listitem
|
||
|
><para
|
||
|
><emphasis
|
||
|
>Splits de gegevens</emphasis
|
||
|
> in het veld <guilabel
|
||
|
>Naam en achternaam</guilabel
|
||
|
> in twee aparte velden: <guilabel
|
||
|
>Naam</guilabel
|
||
|
> en <guilabel
|
||
|
>Achternaam</guilabel
|
||
|
>. </para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
><emphasis
|
||
|
>Splits de gegevens</emphasis
|
||
|
> in het veld <guilabel
|
||
|
>Adres</guilabel
|
||
|
> in drie aparte velden: <guilabel
|
||
|
>Straat</guilabel
|
||
|
>, <guilabel
|
||
|
>Huisnummer</guilabel
|
||
|
> en <guilabel
|
||
|
>Plaats</guilabel
|
||
|
>. </para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
><emphasis
|
||
|
>Geldigheid van gegevens garanderen:</emphasis
|
||
|
> door er zeker van te zijn dat er geen lege velden zijn, u moet ⪚ altijd een huisnummer invullen. </para
|
||
|
></listitem>
|
||
|
</orderedlist>
|
||
|
|
||
|
<para
|
||
|
>Een gewijzigde tabel ziet er ongeveer zo uit: </para>
|
||
|
|
||
|
<para
|
||
|
><emphasis
|
||
|
>De tabel "Personen"</emphasis
|
||
|
></para>
|
||
|
<informaltable>
|
||
|
<tgroup cols="5">
|
||
|
<colspec colnum="1" colname="c1"
|
||
|
></colspec>
|
||
|
<colspec colnum="2" colname="c2"
|
||
|
></colspec>
|
||
|
<colspec colnum="3" colname="c3"
|
||
|
></colspec>
|
||
|
<colspec colnum="4" colname="c4"
|
||
|
></colspec>
|
||
|
<colspec colnum="5" colname="c5"
|
||
|
></colspec>
|
||
|
<tbody>
|
||
|
<row>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Naam</emphasis
|
||
|
></entry>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Achternaam</emphasis
|
||
|
></entry>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Straat</emphasis
|
||
|
></entry>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Huisnummer</emphasis
|
||
|
></entry>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Plaats</emphasis
|
||
|
></entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry
|
||
|
>Joan</entry>
|
||
|
<entry
|
||
|
>Smith</entry>
|
||
|
<entry
|
||
|
>Western Gate</entry>
|
||
|
<entry
|
||
|
>1</entry>
|
||
|
<entry
|
||
|
>Warsaw</entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry
|
||
|
>Adam</entry>
|
||
|
<entry
|
||
|
>Willson</entry>
|
||
|
<entry
|
||
|
>Frogs Drive</entry>
|
||
|
<entry
|
||
|
>5</entry>
|
||
|
<entry
|
||
|
>London</entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry namest="c1" nameend="c5"
|
||
|
><emphasis
|
||
|
>Voorwaarden</emphasis
|
||
|
></entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry
|
||
|
>vereist veld</entry>
|
||
|
<entry
|
||
|
>vereist veld</entry>
|
||
|
<entry
|
||
|
>vereist veld</entry>
|
||
|
<entry
|
||
|
>vereist veld</entry>
|
||
|
<entry
|
||
|
>vereist veld</entry>
|
||
|
</row>
|
||
|
</tbody>
|
||
|
</tgroup>
|
||
|
</informaltable>
|
||
|
|
||
|
<para
|
||
|
>Dankzij het introduceren van de voorwaarde <guilabel
|
||
|
>vereist veld</guilabel
|
||
|
> kunnen we er zeker van zijn dat ingevulde gegevens compleet zijn. Bij andere tabellen kunt u natuurlijk toestaan dat bepaalde velden leeg blijven. </para>
|
||
|
|
||
|
</sect3>
|
||
|
|
||
|
<sect3 id="data-limiting">
|
||
|
<title
|
||
|
>Beperking van gegevensweergave</title>
|
||
|
<para
|
||
|
>Een spreadsheet geeft alle rijen en kolommen van de tabel weer, wat lastig kan zijn als er veel gegevens zijn. U kunt in spreadsheets natuurlijk rijen filteren en sorteren, maar dat vereist extra voorzichtigheid. Wanneer u een spreadsheet gebruikt, loopt u het risico dat u vergeet dat de gegevens gefilterd zijn, wat tot vergissingen kan leiden. Bij het berekenen van totalen kunt u denken dat u 100 rijen met gegevens hebt, terwijl er nog 20 extra rijen verborgen zijn. </para>
|
||
|
<para
|
||
|
>Als u met een klein gedeelte van de gegevens wilt werken, ⪚ om deze gegevens door een ander te laten bewerken, kunt u deze naar een ander spreadsheet kopiëren en, nadat ze bewerkt zijn weer terugkopiëren. Deze "handmatige " bewerking kan echter de oorzaak zijn van gegevensverlies of van onjuiste berekeningen. </para>
|
||
|
<para
|
||
|
>Om de <emphasis
|
||
|
>zichtbare gegevens</emphasis
|
||
|
> te beperken, kunnen database-toepassingen <emphasis
|
||
|
>query's</emphasis
|
||
|
>, <emphasis
|
||
|
>formulieren</emphasis
|
||
|
> en <emphasis
|
||
|
>rapporten</emphasis
|
||
|
> maken. </para>
|
||
|
<para
|
||
|
>Een praktische manier om de gegevens te beperken is de volgende uitgebreide versie van de eerder beschreven tabel <guilabel
|
||
|
>Personen</guilabel
|
||
|
>: </para>
|
||
|
|
||
|
<para
|
||
|
><emphasis
|
||
|
>De tabel "Personen"</emphasis
|
||
|
></para>
|
||
|
<informaltable>
|
||
|
<tgroup cols="6">
|
||
|
<tbody>
|
||
|
<row>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Naam</emphasis
|
||
|
></entry>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Achternaam</emphasis
|
||
|
></entry>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Straat</emphasis
|
||
|
></entry>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Huisnummer</emphasis
|
||
|
></entry>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Plaats</emphasis
|
||
|
></entry>
|
||
|
<entry
|
||
|
><emphasis
|
||
|
>Inkomen</emphasis
|
||
|
></entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry
|
||
|
>Joan</entry>
|
||
|
<entry
|
||
|
>Smith</entry>
|
||
|
<entry
|
||
|
>Western Gate</entry>
|
||
|
<entry
|
||
|
>1</entry>
|
||
|
<entry
|
||
|
>Warsaw</entry>
|
||
|
<entry
|
||
|
>2300</entry>
|
||
|
</row>
|
||
|
<row>
|
||
|
<entry
|
||
|
>Adam</entry>
|
||
|
<entry
|
||
|
>Willson</entry>
|
||
|
<entry
|
||
|
>Frogs Drive</entry>
|
||
|
<entry
|
||
|
>5</entry>
|
||
|
<entry
|
||
|
>London</entry>
|
||
|
<entry
|
||
|
>1900</entry>
|
||
|
</row>
|
||
|
</tbody>
|
||
|
</tgroup>
|
||
|
</informaltable>
|
||
|
|
||
|
<para
|
||
|
>We nemen aan dat de nieuwe kolom <guilabel
|
||
|
>Inkomen</guilabel
|
||
|
> vertrouwelijke gegevens bevat. Hoe kunt u informatie over de personen door uw medewerkers laten inzien, zonder <emphasis
|
||
|
>de inkomens bekend te maken</emphasis
|
||
|
>? Dit is mogelijk als u ze <emphasis
|
||
|
>alleen een query en niet de gehele tabel</emphasis
|
||
|
> geeft. De query kan alle kolommen behalve <guilabel
|
||
|
>Inkomen</guilabel
|
||
|
> selecteren. In de wereld van de database staat zo'n query ook bekend als <guilabel
|
||
|
>weergave</guilabel
|
||
|
>. </para>
|
||
|
|
||
|
</sect3>
|
||
|
|
||
|
<sect3 id="performance-and-capacity">
|
||
|
<title
|
||
|
>Prestatie en capaciteit</title>
|
||
|
<para
|
||
|
>U werkt waarschijnlijk met een vrij snelle computer, maar u zult ook inzien dat dat bij grote, logge spreadsheets niet echt helpt. Het gebrek aan efficiëntie wordt ten eerst veroorzaakt door het ontbreken van indexen die het zoekproces versnellen (databases hebben die wel). Ook het gebruik van een klembord om gegevens te kopiëren kan na verloop van tijd lastig worden. </para>
|
||
|
<para
|
||
|
>Het duurt lang om spreadsheets die veel gegevens bevatten te openen. Een spreadsheet laadt heel veel gegevens in het computergeheugen. De meeste van deze gegevens hebt u waarschijnlijk niet direct nodig. Databases laden, in tegenstelling tot spreadsheets, de gegevens alleen wanneer ze nodig zijn. </para>
|
||
|
<para
|
||
|
>In de meeste gevallen hoeft u er niet om te denken hoe de database de gegevens opslaat. Dit betekent dat het volgende voor databases, in tegenstelling tot spreadsheets, niet uitmaakt: </para>
|
||
|
<itemizedlist>
|
||
|
<listitem
|
||
|
><para
|
||
|
>De volgorde van de rijen, u kunt deze immers veranderen als dat nodig is. Bovendien kunt u dezelfde gegevens in andere volgorden in meer weergaven tegelijk zien. </para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
>Hetzelfde geldt voor de kolommen (velden) in de tabel. </para
|
||
|
></listitem>
|
||
|
</itemizedlist>
|
||
|
|
||
|
<para
|
||
|
>Samen met <link linkend="data-limiting"
|
||
|
>Beperking van gegevensweergave</link
|
||
|
> in het vorige gedeelte, bepalen deze eigenschappen het voordeel van databases. </para>
|
||
|
|
||
|
</sect3>
|
||
|
|
||
|
<sect3 id="convenient-data-entry">
|
||
|
<title
|
||
|
>Gegevensinvoer</title>
|
||
|
<para
|
||
|
>De nieuwere versies van toepassingen om spreadsheets te creëren bieden de mogelijkheid om formulieren voor gegevensinvoer te ontwerpen. Zulke formulieren zijn nuttig als de gegevens niet gemakkelijk in een tabel getoond kunnen worden, ⪚ omdat de tekst te lang is of omdat niet alle kolommen op het scherm passen. </para>
|
||
|
<para
|
||
|
>In dit geval is de manier waarop de spreadsheet werkt problematisch. Velden voor gegevensinvoer worden her en der in de spreadsheet geplaatst en zijn vaak niet beschermd tegen (bedoelde of onbedoelde) bewerking door andere gebruikers. </para>
|
||
|
</sect3>
|
||
|
|
||
|
<sect3 id="reports">
|
||
|
<title
|
||
|
>Rapporten</title>
|
||
|
<para
|
||
|
>In databases kunnen gegevens gegroepeerd, beperkt en verzameld worden in de vorm van een <emphasis
|
||
|
>rapport</emphasis
|
||
|
>. Spreadsheets worden gewoonlijk in de vorm van kleine tabellen afgedrukt zonder volledige automatische controle over de verdeling van de pagina's en de indeling van de velden. </para>
|
||
|
</sect3>
|
||
|
|
||
|
<sect3 id="programming">
|
||
|
<title
|
||
|
>Programmeren</title>
|
||
|
<para
|
||
|
>Toepassingen voor het creëren van databases beschikken vaak over volwaardige programmeertalen. Nieuwere spreadsheets hebben deze mogelijk ook, maar berekeningen worden nog steeds gedaan door het wijzigen van de velden en het kopiëren van gegevens, zonder rekening te houden met de eerder genoemde regels voor relevantie en integriteit. </para>
|
||
|
<para
|
||
|
>In een spreadsheet worden de gegevens gewoonlijk in een grafische gebruikersinterface verwerkt, waardoor de snelheid achteruit kan gaan. Databases kunnen in de achtergrond werken, buiten de grafische interface om. </para>
|
||
|
</sect3>
|
||
|
|
||
|
<sect3 id="multiuse">
|
||
|
<title
|
||
|
>Gebruik door meer personen tegelijk</title>
|
||
|
<para
|
||
|
>Het is moeilijk om met meer personen tegelijk aan een spreadsheet te werken. Zelfs als het technisch mogelijk is, zoals bij de nieuwste toepassingen, dan vereist het nog een hoge mate van discipline, aandacht en kennis van de gebruikers; en deze eigenschappen kunnen niet gegarandeerd worden. </para>
|
||
|
<para
|
||
|
>Een klassieke manier om gegevens in een spreadsheet met anderen te delen is: het gehele bestand versturen (gewoonlijk per email) of het bestand op een netwerk opslaan. Deze manier van werken is niet effectief voor grote groepen - gegevens die op een bepaalde tijd nodig zijn, kunnen geblokkeerd zijn doordat iemand anders eraan werkt. </para>
|
||
|
<para
|
||
|
>Databases zijn juist ontworpen om de gegevens voor meer personen tegelijk toegankelijk te maken. Zelfs in de eenvoudigste versies kunnen rijen in een bepaalde tabel geblokkeerd worden, waardoor de tabelgegevens gemakkelijk gedeeld kunnen worden. </para>
|
||
|
</sect3>
|
||
|
|
||
|
<sect3 id="security">
|
||
|
<title
|
||
|
>Veiligheid</title>
|
||
|
<para
|
||
|
>Het beveiligen van een spreadsheet of bepaalde delen ervan met een wachtwoord is vaak niet meer dan symbolisch. Nadat een spreadsheet op een computernetwerk opgeslagen is, kan iedereen die het bestand kan kopiëren ook proberen het wachtwoord te achterhalen. Dit is vaak niet eens moeilijk als het wachtwoord in hetzelfde bestand als de spreadsheet opgeslagen is. </para>
|
||
|
<para
|
||
|
>Functies om het bewerken of het kopiëren van een spreadsheet (of een deel ervan) te blokkeren, zijn eveneens gemakkelijk te kraken. </para>
|
||
|
<para
|
||
|
>Databases (behalve die in een bestand opgeslagen zijn in plaats van op een server) hoeven niet als een enkel bestand beschikbaar te zijn. U krijgt toegang tot een database via een computernetwerk, gewoonlijk moet u een gebruikersnaam een een wachtwoord opgeven. U krijgt alleen toegang tot de delen (tabellen, formulieren of zelfs alleen bepaalde rijen en kolommen) die aan u toegewezen zijn door het instellen van toegangsrechten. </para>
|
||
|
<para
|
||
|
>Toegangsrechten bepalen of gegevens bewerkt of alleen gelezen kunnen worden. Als bepaalde gegevens niet voor u beschikbaar zijn, worden die ook niet naar uw computer gestuurd, er is dan ook geen mogelijkheid om de gegevens zo gemakkelijk te kopiëren, zoals dat wel bij spreadsheets kan. </para>
|
||
|
|
||
|
</sect3>
|
||
|
</sect2>
|
||
|
</sect1>
|
||
|
|
||
|
<sect1 id="database-design">
|
||
|
<title
|
||
|
>Database-ontwerp</title>
|
||
|
<para
|
||
|
>Over het ontwerpen van een database moet zorgvuldig nagedacht worden. U kunt waarschijnlijk wel inzien dat het wijzigen van de tabel <guilabel
|
||
|
>Contacten</guilabel
|
||
|
>, zoals voorgesteld werd in hoofdstuk 1.2, problemen kan opleveren als de tabel veel gegevens bevat. Bijvoorbeeld: een veld hernoemen is gemakkelijk, maar het splitsen van het veld <guilabel
|
||
|
>Adres</guilabel
|
||
|
> in aparte velden is lastig werk en vereist veel aandacht. </para>
|
||
|
<para
|
||
|
>Om zulke situaties te vermijden moet u <emphasis
|
||
|
>nadenken over uw databaseproject</emphasis
|
||
|
> voordat u het daadwerkelijk op de computer creëert en voordat anderen het gaan gebruiken. Door in het begin wat meer tijd te investeren, kunt u later vrijwel zeker veel tijd bij uw dagelijks werk besparen. </para>
|
||
|
</sect1>
|
||
|
|
||
|
<sect1 id="who-needs-a-database">
|
||
|
<title
|
||
|
>Wie heeft een database nodig?</title>
|
||
|
<itemizedlist>
|
||
|
<title
|
||
|
>Gebruik een spreadsheet als:</title>
|
||
|
<listitem
|
||
|
><para
|
||
|
>u de uitgebreide mogelijkheden niet nodig hebt en als de hoeveelheid gegevens niet steeds groter wordt (maar kunt u dat met zekerheid voorspellen?) </para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
>u niet in staat bent om de methodes om een database te maken te leren. U zou er dan over kunnen denken om deze taak uit te besteden of om eenvoudigere hulpmiddelen te gebruiken. </para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
>u ingewikkelde spreadsheets gebruikt en het ontbreekt u aan tijd of geld om over te schakelen naar databases. Bedenk of dit geen doodlopende weg is. Reken niet op magische hulpmiddelen die uw spreadsheet (hoe goed ontworpen ook) in een database veranderen. </para
|
||
|
></listitem>
|
||
|
</itemizedlist>
|
||
|
|
||
|
<itemizedlist>
|
||
|
<title
|
||
|
>Overweeg om databases te gebruiken als:</title>
|
||
|
<listitem
|
||
|
><para
|
||
|
>uw verzameling gegevens met de week groeit.</para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
>u vaak nieuwe spreadsheets maakt, tussen spreadsheets heen en weer kopieert, en het gevoel krijgt dat het werk steeds lastiger wordt. In dit geval wordt de moeite van het overschakelen snel terugverdiend. </para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
>u rapporten en overzichten maakt waarvoor de tabelweergave van een spreadsheet niet geschikt is. U kunt overwegen om over te schakelen naar een database met formulierweergaven. </para
|
||
|
></listitem>
|
||
|
</itemizedlist>
|
||
|
</sect1>
|
||
|
|
||
|
<sect1 id="database-software">
|
||
|
<title
|
||
|
>Software voor het maken van databases</title>
|
||
|
<para
|
||
|
>Tot nu toe hebt u iets geleerd over de algemene eigenschappen van databases zonder details over specifieke toepassingen om ze te ontwerpen. </para>
|
||
|
<para
|
||
|
>De eerste databases zijn tegelijk met grote mainframes in de jaren 60 gebouwd, ⪚ IBM System/360. Dat was voordat de pc's hun intrede deden. Deze databases werden onderhouden door gespecialiseerd personeel. Hoewel de hardware van die computers onberekenbaar was, ze erg langzaam waren en weinig opslagruimte hadden, blijft één van de eigenschappen van de databases ook nu nog een aantrekkelijk voordeel: veel gebruikers kunnen tegelijkertijd toegang tot de gegevens hebben via een netwerk. </para>
|
||
|
<para
|
||
|
>In de jaren 70 ontwikkelden wetenschappers de theorie van relationele databases (termen zoals: <firstterm
|
||
|
>tabel</firstterm
|
||
|
>, <firstterm
|
||
|
>record</firstterm
|
||
|
>, <firstterm
|
||
|
>veld</firstterm
|
||
|
>, <firstterm
|
||
|
>relationeel</firstterm
|
||
|
> en vele anderen). Op basis van deze theorie zijn de IBM DB2 en Oracle-databases gecreëerd, die verder ontwikkeld werden en nog steeds gebruikt worden. Aan het einde van de jaren 70 kwamen de eerste pc's op de markt. Hun gebruikers konden langzaamaan steeds meer verschillende toepassingen gebruiken, ook die voor het creëren van databases. </para>
|
||
|
<para
|
||
|
>Voor grote databases van bedrijven is de situatie niet veranderd: ze hebben nog steeds krachtige computers of aan elkaar geschakelde computers, <firstterm
|
||
|
>clusters</firstterm
|
||
|
> genoemd, nodig. Dit valt echter buiten het bereik van dit handboek. </para>
|
||
|
<para
|
||
|
>Op het gebied van "toegankelijke" databases met een grafische gebruikersinterface voor pc's kunt u kiezen uit de volgende mogelijkheden: </para>
|
||
|
|
||
|
<itemizedlist>
|
||
|
<listitem
|
||
|
><para
|
||
|
><ulink url="http://www.dbase.com/"
|
||
|
>DBase</ulink
|
||
|
> - een hulpmiddel om databases te beheren voor DOS, populair in de jaren 80. Bestanden in DBase-formaat worden nog steeds in speciale gevallen gebruikt omdat hun structuur zo eenvoudig is. </para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
><ulink url="http://msdn.microsoft.com/vfoxpro/productinfo/overview/"
|
||
|
> FoxPro</ulink
|
||
|
> - een toepassing die op DBase lijkt (begin jaren 90). Na de overname door Microsoft werd er een grafische gebruikersinterface aan toegevoegd, sinds die tijd werd het gebruikt om databases op pc's te creëren. Het product is nog steeds op de markt, hoewel het een beetje verouderd lijkt. </para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
><ulink url="http://office.microsoft.com/access/"
|
||
|
>Microsoft Access</ulink
|
||
|
> - een toepassing voor databases (gegevens en ontwerpen van grafische interfaces) met veel vereenvoudigingen en daarom geschikt voor beginners, ontworpen eind jaren 80, gebaseerd op 16-bits architectuur. Dit is ook nu nog op de markt en wordt nog veel gebruikt, vooral door kleine bedrijven waar efficiëntie en de toegang van meer gebruikers tegelijk niet zo belangrijk zijn. </para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
><ulink url="http://www.filemaker.com/"
|
||
|
>FileMaker</ulink
|
||
|
> - een populaire toepassing die wel wat op MS Access lijkt wat betreft eenvoud, draait op Windows en Macintosh platforms, op de markt sinds 1985. </para
|
||
|
></listitem>
|
||
|
<listitem
|
||
|
><para
|
||
|
><ulink url="http://www.kexi.pl/"
|
||
|
>&kexi;</ulink
|
||
|
> - een toepassing voor verscheidene platforms (Unix/Linux, Windows, Mac OS X), ontworpen in 2003, ontwikkeld volgend de "OpenSource" principes, maakt deel uit van het <ulink url="http://www.kde.org/"
|
||
|
>K Desktop Environment</ulink
|
||
|
>-project, dit is een grafische omgeving voor Unix/Linux-systemen. Een belangrijke bijdrage aan de ontwikkeling van &kexi; wordt geleverd door de "OpenOffice Poland company". </para
|
||
|
></listitem>
|
||
|
</itemizedlist>
|
||
|
|
||
|
</sect1>
|
||
|
|
||
|
</appendix>
|