I’m currently coding a product which will have only one database but will host many clients by using a global identifier of a customer_id.
This is all very good.
However, let’s say we have a table called Ticket. Idea has a primary key. When a user adds a ticket, the ticket will correspond to the customer via a foreign key etc.
However, for each customer I want their ticket ids to start from 1 when they sign up.
i.e. customer 1 adds 4 tickets, the ticket_id count will be 4. Customer 2 signs up, they add a ticket and then the ticket_id will be 5 and so on and so forth. Which is not ideal.
My question to you is, how do I get around this if I don’t want to use multiple databases? The idea of having to update tend, if hundreds of databases with new columns, indexes etc. whenever I make a change would irritate me hugely.
Hope this makes sense and I look forward to your input.
EDIT: Tagged as symfony as I will be using Doctrine ORM in symfony to manage the database…. probably irrelevant, but added just in case.
EDIT: I might also be being stupid and missing something obvious here, so my apologies.
Am I to understand that each client will have their tickets listed sequentially from 1 onwards? I will assume that each client has his own tickets, and these are not exposed to other clients. You should clarify this in your question.
I would suggest creating a new column in your ticket table to use as a reference number (lets call it ref_num). When client 2 creates a ticket, the ticket_id will be 5, but your application will know to assign the ref_num to 1 for that user.
In order for that to work properly, you will need to find a way to track the number of tickets created by each client. Perhaps for each contact you could have a column called ticket_count that increments by one each time. That way, from within your application, you can just pull this number and increment it by one to update your count and get the new ticket number.
FYI, over here we do not worry about hiding information from the user. We use a ref_num field to hide true ID numbers from the users. We have multiple departments, each of which have multiple clients, that share the same ID pool. If Group A creates ticket 23456 then group B creates another ticket, it appears as 23457 despite the fact that the previous ticket did not belong to them. The ticket number does not need to be sequential.