Each customer has an ID. For every new customer it's incremented by 1.

My company is wanting to start selling to a new type of customer (lets call it customer B), and have their ID start at 30k on the same column.

Is this a poor design? Our system has an option to set the customer type, so there is no need for this. We're not expected to reach this number for our other type of customers until 2050 (it's currently at 10k).

I'm trying to convince them that this is a bad idea... It also doesn't help the third party company trying to implement this idea is ok with it.

  • 6
    Yes, it's a very poor design - it turns the ID into a composite key. The literature on why composite keys are a bad idea is extensive, I leave you to your favourite search engine to find some of it. It's an especially poor design when you already have a customer type attribute available. Umpty years of experience with databases has taught us that if there are two ways to determine a single fact then sooner or later they will tell us that black is white. – High Performance Mark Feb 21 '19 at 16:00
  • Is it the technical team or the business team who is asking for this ? If this is the technical team I'd be very worried, if that's the business team I'd implement it properly (only adding a new type) and in their back-office UIs I'd add 30k to the ID of customers of type B. – Steve Chamaillard Feb 21 '19 at 19:46
  • 1
  • Is this ID only a user-facing ID, or is it also used in your database for references (for primary / foreign key relationships)? – Doc Brown Feb 22 '19 at 6:45
  • @DocBrown It's used for both. – Jared Dunham Feb 22 '19 at 16:42

This is a terrible idea, but not easy to make the users aware and avoid it !

From the user point of view

It is tempting, because in every report and on every screen, you can immediately recognize the type of customer, and you can easily restrict a report to a type of customer by playing with the number range.

This is so popular that THE leading ERP even allows to assign every customer type to a (potentially different) number range.

But in practice, a meaningful numbering convention comes with some disadvantages. For example:

  • what if one day you have 30K+1 customers (it doesn't mean that much active customers, but it could be also old customers that you have to keep for 10 years due to legal requirements).
  • what if one customer could exceptionally correspond to two types of customers (e.g. a retail customer that starts to resell some goods and become a B2B customer for some transactions but not all) ?
  • what if a customer changes customer type (e.g. corporate group customer who is carved out after an M&A and becomes a third party customer; or an non-profit organization that cahnges statutes and becomes a private company; etc...) ?

From my own experiences, these situations are very often denied by the users ("it never occurs") but happen most of the time within the first year of the implementation (mostly the third case), leaving the people clueless about how to tackle it.

From the technical point of view

Well, you know the picture! In fact your code is designed to work with one counter and now you need to change to two counters (or change the query that gives you the new number). Not to mention the magical 30K number. Not to mention the hidden relation and the risk of inconsistencies.

How to convince the users to accept a neutral numbering ?

I can warn you after some 20 ERP implementations that it's not easy to convince users that it's a bad idea for a technical reason. So the best is to work on the risks from the user point of view.

Now another angle to start the discussion is to ask why they came out with this new numbering scheme. Try to challenge this requirement. In my experience, very often it occurs that either the users are not aware that customer type is already managed in another way, or the users face some practical issue (e.g. "this one report where we can't use the customer type as selection criteria") that brought them to consider this alternative. In this case you could use a what-if dialogue: "what-if in this report youc ouled easily select on the customer type ? Could you then work with a single numbering scheme ?").

|improve this answer|||||

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.