Subject | Re: how to use the same column from a single table to other tables? |
---|---|
Author | dice_in_trouble |
Post date | 2013-05-02T10:15:02Z |
--- In firebird-support@yahoogroups.com, Norman Dunbar <Norman@...> wrote:
Sincerely,
Cedris
>Thank you for this wonderful post. Will try this now. Thank you again.
> On 02/05/13 09:47, dice_in_trouble wrote:
>
> > Thanks Nrom for the reply. I also thought of this idea, wherein I make a separate table for the balance then link it up to the other 2 tables. But I don't know how to make table relations. I am using flamerobin to build up my firebird database. Can you give me a simple example of making a relationship between 3 tables?
>
> Start FlameRobin and comment to the database with the appropriate user.
>
> Right click TABLES and select Create New.
>
> In the dialogue that appears, type the following:
>
> CREATE TABLE client
> (
> client_id bigint not null,
> client_name varchar(100) not null,
> client_address varchar(1024),
> constraint pk_client primary key (client_id)
> );
>
> CREATE TABLE balance
> (
> client_id bigint not null,
> balance bigint,
> constraint pk_balance primary key (client_id),
> constraint fk_client_balance foreign key (client_id) references
> client(client_id)
> );
>
> CREATE TABLE collection
> (
> collection_id bigint not null,
> client_id bigint not null,
> payment bigint not null,
> date_received timestamp default current_timestamp not null ,
> constraint pk_collection primary key (collection_id),
> constraint fk_client_collection foreign key (client_id) references
> client (client_id)
> );
>
> Press F4 to execute the statement.
>
> Commit;
>
> The client name and address are not in an ideal format, but for this
> example, they will suffice.
>
> You now have three tables that are in a parent child relationship with
> client being the parent and two child tables - balance and collection.
>
> The FK constraints mean that you cannot accept a payment for a client
> you don't have, and, you cannot create a balance for a client you don't
> have.
>
> Also, there's probably no need to have a FK between collection and
> balance (balance being the parent) because the two FKs that exists
> already mean that you can't have a payment for a balance that doesn't exist.
>
> This "design" (I use the term loosely as I haven't really designed it,
> just whipped it off the top of my head) means that you can set up
> clients without any balances or collections. Which is correct - if a
> client has yet to make a payment, they have no balance.
>
> Your code, business rules etc will determine when a balance gets created
> - when the customer is created, or when a payment arrives and is the
> first one for the client.
>
> equally, you are unable to delete (or change the client_id) for a client
> while there are existing balance or collection records for that client_id.
>
> Now, obviously, there will need to be triggers and sequences to get the
> client_id and collection_id values (they are surrogate keys as opposed
> to natural keys) so:
>
> Under the CLIENT table, right click the CLIENT_ID column and select
> Properties.
>
> In the form that appears, under autoincrement, click create new
> generator and create trigger.
>
> Click execute and then commit.
>
>
> Do similar for the COLLECTION table.
>
> If the tables don't have the ability to "drop down" the columns, double
> click the table to force a refresh. Close the window that appears and
> then you should be able to drop down the list of columns for the tables.
>
>
> Now you can insert data into the CLIENT table and also create BALANCEs
> and COLLECTIONs for that client.
>
> You should note that the primary key of the BALANCE table is actually
> the primary key of the CLIENT table. This is not a problem. The
> client_id is unique and allows the balance for that client to be easily
> found, once you have found the client's id.
>
>
> HTH
>
> --
> Norman Dunbar
> Dunbar IT Consultants Ltd
>
> Registered address:
> Thorpe House
> 61 Richardshaw Lane
> Pudsey
> West Yorkshire
> United Kingdom
> LS28 7EL
>
> Company Number: 05132767
>
Sincerely,
Cedris