Following the analogy that a blockchain is a [kind of database][1], I'm trying to understand how my data should be structured and stored on the blockchain.

I've read about [writing contracts in solidity][2] and I see that contracts can contain complex data types such as mappings, arrays and struts, etc. 

Should I store database type table data, inside one of these inside a contract, or should I create many contracts of the same type and store a row of data in each?

Perhaps an example will help explain, say I want to store relationships between user accounts, would I create a 'table' contract as follows:

    pragma solidity ^0.4.0;

    /// @title Company roles.
    contract CompanyRole {

        mapping(address => address) public directors;
    }

or a 'row' contract:

    pragma solidity ^0.4.0;

    /// @title Company roles.
    contract CompanyRole {

        struct Role {
            address person; // company the role is valid for
            address company; // company the role is valid for
            uint type;   // the type of role
        }
    }

It would be helpful to know the pros and cons of both approaches, or others, including cost implications.

Basically my question is where should table data be stored?

  [1]: http://www.multichain.com/blog/2016/03/blockchains-vs-centralized-databases/
  [2]: http://solidity.readthedocs.io/en/develop/solidity-by-example.html