Koha

Relationships between tables in Koha

Relationships between tables in Koha Open Source ILS

Relationships between tables in Koha


Article Source: Read More

In an ongoing effort to help our partners write reports in Koha, I’d like to highlight the relationships between database tables in Koha.

A review of the basics of SQL

Just for review, let’s look at some elementary SQL. Let’s say that we have two tables, person and person_dates. The person table contains an id number, the person’s first name, and the person’s surname, like so:

+----+---------+-----------+
| id | surname | firstname |
+----+---------+-----------+
| 1  | Doe     | John      |
| 2  | Doe     | Jane      |
+----+---------+-----------+

The person_dates table has its own id number, but also contains a person_id number that refers to the id number from the person table:

+----+-----------+---------------+------------+
| id | person_id | label         | date       |
+----+-----------+---------------+------------+
| 1  | 1         | Date of Birth | 1970-11-22 |
| 2  | 1         | Married       | 2004-05-12 |
| 3  | 2         | Married       | 2004-05-12 |
| 4  | 2         | Date of Birth | 1975-12-26 |
+----+-----------+---------------+------------+

We can look up all of the values for firstname in the person table by using a SELECT statement:

SELECT
    firstname
FROM
    person

Which would give us

+-----------+
| firstname |
+-----------+
| John      |
| Jane      |
+-----------+

The sections in a SQL query are known as ‘clauses’. Fields in the SELECT clause are separated by commas. If we want to see both the first name and the surname, we can write

SELECT
    firstname,
    surname
FROM
    person

Which would give us

+-----------+---------+
| firstname | surname |
+-----------+---------+
| John      | Doe     |
| Jane      | Doe     |
+-----------+---------+

If we only want to see that information for Jane Doe, we can use a WHERE clause:

SELECT
    firstname, surname
FROM
    person
WHERE
    firstname = 'Jane'

+-----------+---------+
| firstname | surname |
+-----------+---------+
| Jane      | Doe     |
+-----------+---------+

Running queries on a single table doesn’t give us much information… who are John and Jane Doe? What’s their relationship? Inquiring minds want to know! Taking a page from the SELECT clause, let’s list the tables separated by commas:

SELECT
    *
FROM
    person,
    person_dates

+----+---------+-----------+----+-----------+---------------+------------+
| id | surname | firstname | id | person_id | label         | date       |
+----+---------+-----------+----+-----------+---------------+------------+
| 1  | Doe     | John      | 1  | 1         | Date of Birth | 1970-11-22 |
| 1  | Doe     | John      | 2  | 1         | Married       | 2004-05-12 |
| 1  | Doe     | John      | 3  | 2         | Married       | 2004-05-12 |
| 1  | Doe     | John      | 4  | 2         | Date of Birth | 1975-12-26 |
| 2  | Doe     | Jane      | 1  | 1         | Date of Birth | 1970-11-22 |
| 2  | Doe     | Jane      | 2  | 1         | Married       | 2004-05-12 |
| 2  | Doe     | Jane      | 3  | 2         | Married       | 2004-05-12 |
| 2  | Doe     | Jane      | 4  | 2         | Date of Birth | 1975-12-26 |
+----+---------+-----------+----+-----------+---------------+------------+

Well… that doesn’t look quite right… we’ve got two people, but four lines that say Date of Birth. Unless John and Jane Doe have the rather exceptional quality of being born twice, there’s a problem with our logic.

Let’s do a bit of trouble shooting…

SELECT
    *
FROM
    person_dates;

+----+-----------+---------------+------------+
| id | person_id | label         | date       |
+----+-----------+---------------+------------+
| 1  | 1         | Date of Birth | 1970-11-22 |
| 2  | 1         | Married       | 2004-05-12 |
| 3  | 2         | Married       | 2004-05-12 |
| 4  | 2         | Date of Birth | 1975-12-26 |
+----+-----------+---------------+------------+

So … we know that John Doe’s Date of Birth is 1970-11-22, but line 4 shows his date of birth as 1975-12-26. Anything stand out on that line? Ah! the person_id is 2 … that belongs to Jane Doe. So maybe we need to add a where clause:

SELECT
    *
FROM
    person, person_dates
WHERE
    person.id = person_dates.person_id

+----+---------+-----------+----+-----------+---------------+------------+
| id | surname | firstname | id | person_id | label         | date       |
+----+---------+-----------+----+-----------+---------------+------------+
| 1  | Doe     | John      | 1  | 1         | Date of Birth | 1970-11-22 |
| 1  | Doe     | John      | 2  | 1         | Married       | 2004-05-12 |
| 2  | Doe     | Jane      | 3  | 2         | Married       | 2004-05-12 |
| 2  | Doe     | Jane      | 4  | 2         | Date of Birth | 1975-12-26 |
+----+---------+-----------+----+-----------+---------------+------------+

Ah, that looks better!

It turns out, there’s a different way of writing the FROM clause, that makes this more explicit:

SELECT
    *
FROM
    person
    INNER JOIN person_dates ON person.id = person_dates.person_id

Let’s say that we’re doing some detective work… we’re thinking that people who are married on the same day are probably married to each other. We can use a WHERE clause to suss that out:

SELECT
    *
FROM
    person
    INNER JOIN person_dates ON person.id = person_dates.person_id
WHERE
    label = 'Married'

+----+---------+-----------+----+-----------+---------+------------+
| id | surname | firstname | id | person_id | label   | date       |
+----+---------+-----------+----+-----------+---------+------------+
| 1  | Doe     | John      | 2  | 1         | Married | 2004-05-12 |
| 2  | Doe     | Jane      | 3  | 2         | Married | 2004-05-12 |
+----+---------+-----------+----+-----------+---------+------------+

Oh, look they’re married to each other. How sweet.

… and …

SELECT
    *
FROM
    person
WHERE
    id > 2

+----+---------+-----------+
| id | surname | firstname |
+----+---------+-----------+
| 3  | Doe     | J.K.      |
+----+---------+-----------+

The miracle of life!

Now, let’s try an INNER JOIN again … we won’t use the WHERE clause, because we know that little J.K. is too young to be married…

SELECT
    *
FROM
    person
    INNER JOIN person_dates ON person.id = person_dates.person_id

+----+---------+-----------+----+-----------+---------------+------------+
| id | surname | firstname | id | person_id | label         | date       |
+----+---------+-----------+----+-----------+---------------+------------+
| 1  | Doe     | John      | 1  | 1         | Date of Birth | 1970-11-22 |
| 1  | Doe     | John      | 2  | 1         | Married       | 2004-05-12 |
| 2  | Doe     | Jane      | 3  | 2         | Married       | 2004-05-12 |
| 2  | Doe     | Jane      | 4  | 2         | Date of Birth | 1975-12-26 |
+----+---------+-----------+----+-----------+---------------+------------+

Wait? Where’s little J.K.??? Before we call the cops, let’s take a careful look around…

SELECT count(*) FROM person WHERE firstname = 'J.K.'

Shows count(*) is 1, so we know that ‘J.K.’ is still in the person table. (oh, thank goodness, I would never forgive myself… ). So what happened?

SELECT * from person_dates where person_id = 3;

Returns no rows… the doctor hasn’t filled out the birth certificate yet. In this case, we want a LEFT JOIN, instead of an INNER JOIN:

SELECT
    *
FROM
    person
    LEFT JOIN person_dates ON person.id = person_dates.person_id

+----+---------+-----------+----+-----------+---------------+------------+
| id | surname | firstname | id | person_id | label         | date       |
+----+---------+-----------+----+-----------+---------------+------------+
| 1  | Doe     | John      | 1  | 1         | Date of Birth | 1970-11-22 |
| 1  | Doe     | John      | 2  | 1         | Married       | 2004-05-12 |
| 2  | Doe     | Jane      | 3  | 2         | Married       | 2004-05-12 |
| 2  | Doe     | Jane      | 4  | 2         | Date of Birth | 1975-12-26 |
| 3  | Doe     | J.K.      |    |           |               |            |
+----+---------+-----------+----+-----------+---------------+------------+

… and J.K. Doe makes an appearance!

A Koha specific example

Most SQL queries are of the form SELECT ... from table1 LEFT JOIN table2 ... WHERE ... there are a few more wrinkles that can be thrown in, but that’s all you need to know about SQL. Here’s an example of finding out who checked out what, and when:

SELECT
    p.firstname,
    p.surname,
    b.title,
    co.issuedate as 'checked out'
FROM
    borrowers p
    LEFT JOIN issues co using (borrowernumber)
    LEFT JOIN items i using (itemnumber)
    LEFT JOIN biblio b using (biblionumber)

There are a couple of things to notice here: in the SELECT clause, we’ve written p.firstname … the p in this case is an alias, set in the FROM clause. Writing borrowers p says, essentially “We’re calling the borrowers table p“.

A word about aliases

Common aliases used in queries against the Koha database:

  • biblio b or biblio bib
  • items i
  • biblioitems bi
  • statistics s
  • borrowers p — for patrons
  • issues co — for check-outs
  • reserves h — for holds
  • deleteditems di — for deleted items
  • borrower_attributes a — for attribute
  • aqorders o — for orders

These are not required, but if you do use aliases, these work well, because they don’t conflict with each other (i.e. you can’t use biblio b and borrowers b in the same query).

The use of aliases isn’t strictly necessary… you could write SELECT borrowers.firstname, borrowers.surname, biblio.title..., and the query would work just as well. In fact, as long as the column names are unique, you can leave off the table names entirely: SELECT firstname, surname, .... There are cases where the column names are not unique … for instance, both borrowers and biblio have a title field. They’re entirely un-related. In this case, you must specify which table you’re asking for:

SELECT
    firstname,
    surname,
    title,
    issuedate as 'checked out'
FROM
    borrowers p
    LEFT JOIN issues co using (borrowernumber)
    LEFT JOIN items i using (itemnumber)
    LEFT JOIN biblio b using (biblionumber)

Gives the error message Column 'title' in field list is ambiguous.

The other thing to note is that rather than writing LEFT JOIN issues co ON co.borrowernumber = p.borrowernumber, we’re using LEFT JOIN statistics co using (borrowernumber). This also has the advantage of making SQL aware of the fact that borrowernumber is exactly the same between both tables … i.e. it’s unique. You can only do this if the column names are exactly the same between tables.

The rubber meets the road

You can almost always join on biblionumber, itemnumber, borrowernumber or branchcode. In Koha, there are 42 tables that use borrowernumber, 32 that use branchcode, 26 that use biblionumber and 20 that use itemnumber. This makes it very easy to join the biblio, biblioitems, items and borrowers tables with any other table that uses one of those keys.

The biblio table is the basic unit of bibliographic information — it contains biblio.title, which is the best way to show the title of a book in Koha. The items table shows actual copies that show up in Koha. The issues table shows currently checked out items — it contains both itemnumber and borrowernumber

Notice that the items table above is in the FROM clause, but not mentioned in the SELECT clause… this is necessary because there is no biblionumber field in the issues table. The art of writing tables lies in thinking about how to connect tables such as borrowers and items or biblio and issues.

In the case of Borrowers and Items, you have to think “What does a borrower do with an item?” … the answer is that a borrower checks out an item… so we look at the checkouts table … which, when Koha was designed, was thought of as ‘issuing an item to a borrower’, so we look in the issues table. Looking at the issues table, you can see that it has both borrowernumber and itemnumber, so it’s well suited to joining the two.

The case of biblio and issues is slightly more subtle. In this case, The biblio record contains information, but it doesn’t point to anything real that can be checked out… the biblio record is more like the idea of a book rather than a paper copy that you can lay your hands on. The item record actually points to the physical copy… you can’t check out the idea of a book, you have to take the physical book to the circ desk and check that out … and that’s what the item record represents… so the item record has an itemnumber as well as a biblionumber. The issues table only contains the itemnumber. If you want to see the title of the book that was checked out, you have to join biblios to issues via items.

Less obvious joins

After you get away from the big four columns biblionumber, itemnumber, borrowernumber and branchcode, things get a bit more challenging. Here are a few more that you should know about.

Authorized Values

This is a lookup table for various codes in the system — it holds human readable text to be displayed on the staff client or opac, for various codes in the system like collection codes or shelving location. Be aware, when using this table that it uses the British spelling authorised_values rather than the American authorised_values. The table consists of a category field, which specifies whether you’re looking up collection codes ( category ccode), lost statuses (category lost), shelving locations (category loc), etc. The column authorised_value will match to the code being looked up in the database, and the columns lib and lib_opac are the values that display in the staff client and opac, respectively.

Items

  • items.itype is used instead of items.itemtype. No one knows why.
  • items.homebranch, items.holdingbranch. Both can join to branchcode.
  • items.itemlost links to authorised_values.authorised_value where authorised_values.category = 'lost'.
  • items.location links to authorised_values using category = 'loc'.
  • items.ccode (Collection code) links to authorised_values using category = 'ccode'.

Serials

The subscription table is the backbone of the serials module. subscriptionid is the primary key, analogous to biblionumber for a biblio record – it is unique id). A subscription links to a bib record via biblionumber (allowing us to see the title). The subscription table also tracks the frequency with which serials are supposed to arrive (via subscription_frequencies) and the numbering of the serials (via subscription_numberpatterns).

Individual issues for a subscription are tracked as rows in the serials table. These may link to items using the serialitems table (if the subscription is set to create item records upon receipt of an issue). The serial table contains the key serialid as well as the subscriptionid and biblionumber (though not as foreign keys).

Logs

The action_logs table shows information logged when various things change in Koha — bibs and items cataloged, borrower information changed, item check-in and check out, system preference changes, etc. Because so many different aspects of Koha can be logged, it’s not always clear how action_logs links to other tables. You can find a table showing what logs are available, how they’re enabled, and what fields are linked to in the action_logs section of the Koha Reports Library.

Zebraqueue

The zebraqueue table contains information about whether or not an item has been indexed and is search-able in Koha. Because the zebra queue contains information about bout biblio data and authority record data, it must join to biblionumber via zebraqueue.biblio_auth_id.

Where to go from here.

There are a few advanced topics in SQL that I didn’t cover here — some operations such as min, max, sum and count are called “aggregate operations” … i.e. they work on groups of data rather than individual rows. These often require the use of a GROUP BY clause. You can find a simple example at Circ actions on date, which specifies a date in the where clause, then counts circulation grouped by type (issue, renew, return, etc.).

Querying MARC data: biblioitems.marcxml contains MARC data in XML format. This can be queried using MySQL’s ExtractValue function. See Query MARC. Please note that in Koha 17.05, MARC XML data will be stored in a table called biblio_metadata. Koha will have a tool available which will convert your old biblioitems.marcxml queries to use the new meta data table instead.


Cheat Sheet

Most queries have the form

SELECT
    A.aaa,
    B.bbb
FROM
    ASDF A
    LEFT JOIN BEEN_THERE_DONE_THAT B using (key)
WHERE
    A.xyz = 100

LEFT JOIN allows you to see the results from A and B, even if there is no matching row in B.(you will see blank fields on any rows selected from B).

INNER JOIN will not show any rows if data in B does not match (think about poor J.K. Doe, missing because her birthday hadn’t been entered into the database yet).

If you are joining on two tables where the names of the keys differ, you must use the syntax ... on T1.some_key = T2.some_other_key rather than ... USING (nifty_key)

Many tables in Koha can be joined by itemnumber, biblionumber, borrowernumber or branchcode.

These aliases are used a lot by the community because they don’t conflict with each other:

biblio b or biblio bib, items i, biblioitems bi, statistics s, borrowers p, issues co, reserves h, deleteditems di, borrower_attributes a, aqorders o.

Koha Plugins Database

Koha’s Plugin System (available in Koha 3.12+) allows for you to add additional tools and reports to Koha that are specific to your library. Plugins are installed by uploading KPZ ( Koha Plugin Zip ) packages. A KPZ file is just a zip file containing the perl files, template files, and any other files necessary to make the plugin work. Learn more about the Koha Plugin System in the Koha 3.18 Manual or watch Kyle’s tutorial video. To download our tutorials the links will take you to Github where you can see all of the releases:

 

Click on the releases link at the top.

From the release page you can download the relevant *.kpz file

 

Download the latest *.kpz file.

If the plugin you’re interested in is missing a release please let Kyle know and he’ll add one.

Below are plugins written by the team at ByWater Solutions.

Report Plugins

  • Cover Flow Adds a new covers widget to your OPAC. Learn more: http://bywatersolutions.com/2014/08/18/koha-coverflow-plugin/
  • Kitchen Sink Example This plugin doesn’t do anything useful. It is provided as an example for testing and development purposes.
  • MARC Checker This plugin will check a range of Koha records using MARC::Lint and tell you if they are not well formatted. Prepare to be surprised!
  • Patron Last Activity replica rolex  This report lists the last the date of a patrons last activity for all patrons enrolled within a given date range.
  • Records by Biblionumber Enter a list of biblionumbers, get a list of titles.

Tool Plugins

  • Batch Email Patrons A tool to generate a batch of emails to patrons.
  • Force Delete Record This plugin will allow you to forcefully delete a record in Koha, even if you cannot view it! This can be useful in the event that record corruption leads to a situation where you cannot delete a record via the standard methods.
  • Kitchen Sink Example This plugin doesn’t do anything useful. It is provided as an example for testing and development purposes.
  • Peoplesoft import for Koha Koha plugin to convert CSV file of peoplesoft data to Koha patron CSV file
  • Rolling Hard Due Dates This is a tool to allow you to set specific dates on which to update your hard due dates. On those dates, the circulation rules will be updated, and any current checkouts that are beyond that hard due date with have their due dates reduced to it.

What We Do For Arabic KOHA

Customized Arabic Koha Installations and Implementations:

To ensure the safety and security of your database, KnowledgeWare Technologies offers a complete hosted environment on KnowledgeWare rented equipment placed in the AWS virtual networking cloud. This also delivers improved performance for both your staff and your users. Other functions include the maintenance of your Linux server, the management of databases with real-time backups, and the installation of updates and upgrades to both the Linux server and your Koha ILS software. We also have options for installing Koha on local servers at your library. With the correct remote access we could completely manage the installation at your library.

 

Data Migration and Data Manipulation:

Skilled manipulation of library data is the key to a successful migration. Because it is the most important representation of a library’s collection, we take the time to proficiently manage your data. Before we move your data into any new system we check each record for accuracy, identifying and manipulating each record for the correct encoding and diacritical display. We work closely with each library to ensure there are no duplicate entries and to consistently use the highest quality records for complete accuracy of bibliographic detail. In addition, each of our new customers receives a test system during the migration process to practice with and to be trained on.

 

Expert Anytime Arabic Koha Support:

Quality of support is the most important focus of our company and we pride ourselves on the implementation of this key feature. KnowledgeWare Tehnologies has the lowest customer to support personnel ratio in the business, and we are hiring additional support specialists regularly. If you are having an issue with your system, our support team will help to solve the problem. Our top rated 24/7 support package is completely comprehensive and ensures the best possible Koha experience for our customers. We also ensure all of our customers have the tools to be plugged into the wealth of knowledge and expertise available within the Koha community.

 

Arabic Koha Hosting Services:

KnowledgeWare Technologies plans and prepares for the worst by taking the following precautions and installing the following safeguards to protect your data. We perform a daily or a weekly backup of all system data stored on the cloud. This information is saved both on-site and off-site, and is comprised of the all of the system data, and all other information found on the main server. If you so choose, we can also set up an additional system backup onsite at your library’s location and populate that daily or weekly for an additional fee.

 

Comprehensive Arabic Koha Training:

Our company is dedicated to the expert training and implementation of Arabic Koha. We provide multiple formats for different learning styles rolexs replica including on-site, hands-on, classroom style learning, on-line presentations and demonstrations, and internally produced training manuals.

 

Arabic Koha Localization:

KnowledgeWare Technologies fully embraces the ideals and practices of open source software. Because of this all Arabic localization work implemented on Koha will be publicly available at all times. KnowledgeWare is the agent responsible of managing the translating of Koha user interface, OPAC and Staff clients, to Arabic since 2008. 

Koha Features Overview



Koha is a 100% browser-based open source integrated library system; there is no need to install a desktop client to access staff/library functionality. As such, it is constantly growing and improving.

The following list of features is meant to be used as a brief overview but is in no way comprehensive. If you have any questions about Koha features, please feel free to contact us and be sure to check out the latest release notes on the official Koha website.



OPAC/Public Catalog

  • Fully responsive theme will adjust properly on all devices
  • Keyword and advanced searching
  • Search filtering by location, item type, subjects and more
  • Cover images from over 5 popular services
  • Enhanced OPAC content from external products such as Open Library, Syndetics, Baker & Taylor, LibraryThing, Novelist Select and iDreamBooks
  • Tagging, commenting and star ratings
  • Availability and online resource links shown on search results
  • Virtual shelf browser
  • Social network share buttons
  • Permanent URLs throughout
  • Overdrive API Integration



  • Personalized patron experience:
    • Ability to place, suspend and cancel holds
    • List of current and past checkouts
    • Account history (fines and payments)
    • Private lists
    • Ability to register for a library card online
    • Access to account information
    • Subscribe/Unsubscribe to/from library notices via email, SMS and/or phone
    • Make purchase suggestions



  • Circulation

    • Check in and out with a barcode scanner or manually
    • Enter calendar of closings for calculating fines and due dates
    • Book drop mode to backdate check ins
    • Ability to forgive fines on check in
    • Holds pull list generated on your schedule
    • Course reserves
    • Offline circulation for Windows and/or Firefox
    • Place, suspend and cancel holds for patrons
    • Transfer materials between branches
    • Set circulation, fine and holds rules for each branch
    • Perform collection inventory
    • POS connectivity (expected Fall 2015)
    • Communication with collection management companies
    • Web-based self check out module
    • Checkout by keyword, title, call number, etc


    Patrons

    • Upload patrons in bulk
    • Upload patron images individually or in bulk
    • Create patron cards
    • Batch modify patrons
    • Run reports on circulation custom to your library
    • Search patrons by phone, email address, name and more
    • Browse patrons by name
    • Connect children to guardians and see an entire family’s current checkouts on one screen
    • Set rules to prevent check out of inappropriate materials to children
    • Add custom searchable fields to patron records




    Cataloging

    • Add bibliographic and authority records by batch uploading
    • Add bibliographic and authority records by copy cataloging with a built in Z39.50 search engine
    • Add bibliographic and authority records using the OCLC Connexion client
    • Add bibliographic and authority records using original cataloging
    • Add and modify items individually or in a batch
    • Add and link to authority records
    • Duplicate bibliographic records for sudo-original cataloging
    • Catalog following AACR2 or RDA rules
    • Create custom cataloging templates with pre-set values for efficient cataloging
    • Built in links to Library of Congress cataloging help
    • Create spine and barcode labels
    • Batch modify and delete item records
    • Create public lists of records at the library


    Reports

    • Complete access to all data stored in Koha; write any report you want
    • Custom reports shared publicly on the Koha wiki
    • Easily run any saved report at any time
    • Group reports by branch, category or any custom criteria
    • Enter filters on reports to run them on for specific item types, branches, patron categories, time frames and so much more
    • Search reports for easy access




    Acquisitions

    • Enter budgets and funds
    • Duplicate budgets and funds for the following year
    • Keep track of all vendor information
    • Order from vendor files
    • Order using EDI (expected Fall 2015)
    • Order multiple copies
    • Order copies of existing records
    • Order by searching Z39.50 targets
    • Track order status
    • Generate late reports and claim letters
    • Track budget encumbrances and expenditures
    • Create ‘on order’ items to allow patrons to place holds
    • Accept purchase suggestions and keep patrons notified as the item moves through the Acquisitions process
    • Importing and overlaying of pre-processing records


    Serials

    • Create subscriptions with full prediction patterns
    • Receive issues one at time or in bulk
    • Barcode serials on receipt if desired
    • Generate late issue reports and claim emails
    • See full serial history
    • Print routing lists for each subscription
    • Duplicate subscriptions for multiple branches
    • Library defined numbering frequencies and patterns




    Administration

    • Full access to administrative functions
    • Over 400 system preferences to make Koha run just the way you want
    • Full circulation and fine rules matrix for each branch
    • Define your own libraries, item types, shelving locations and more
    • Create custom pull down menus for use in cataloging, patron management and invoicing
    • Enter/change Z39.50 targets


    System

    • Unlimited SIP2 connections
    • LDAP functionality
    • MySQL database
    • Works with RFID and self check out products

    What Is KOHA?

    What is Koha?

    Koha is an open source integrated library system (ILS) maintained by and used by libraries all over the world.

    The History

    In 1999 the Horowhenua Library Trust in New Zealand contracted with Katipo Communications to develop a new ILS before their existing system failed due to Y2K. During the proposal process, Katipo suggested to the library that the software they developed should be released under the GNU General Public License (GPL) to ensure the project lived on and would be able to be supported by other companies.1

    The Name

    During the development process the new ILS was playfully named C4 or “Cheap and Cheerful Copy of C‚Ķ {the name of the old system},”2 but the library wanted to come up with a name that meant something and so they decided on the name Koha. Koha is a MƒÅori word (not an acronym for anything) for “gift,” but not just any gift, it’s a gift with expectations. Think of a koha as a bottle of wine you bring to dinner. You are giving the wine as a gift to your host, but you expect dinner in return. With Koha the expectation is that you will contribute back to the project in some way.

    Contributing

    With open source software people often think that the only way to contribute is to write code, this is not true. By simply using the product, reporting problems and suggesting improvements you’re contributing. What makes open source software so much better than proprietary software is the back and forth that takes place between those using the software and those writing it. With Koha the developers are very open to suggestions from those using the ILS and always use these suggestions as the building blocks for the next release.

    Learn More

    To learn more about Koha features please review our Koha Features Overview.

    To contribute to the project please contact us and/or check out the official Koha website.

    You can also learn more by reviewing the  Koha group bibliography or searching through the fake rolex sea dweller Free/Libre and Open Source Software bibliography, both on Zotero.

    References

    1 Ransom, Joann, Chris Cormack, and Rosalie Blake. “How Hard Can It Be?Developing in Open Source.The Code4Lib Journal no. 7 (June 26, 2009). http://journal.code4lib.org/articles/1638.

    2 Engard, Nicole C. “KohaCon10: Keynote. What I Learned Today October 24, 2010. http://www.web2learning.net/archives/4218.