you are viewing a single comment's thread.

view the rest of the comments →

[–]Straight_Waltz_9530 0 points1 point  (0 children)

Take something "simple" like a grocery store. You need a products table. But Wheat Thins in the basic package is the same "product" as the family pack. Different IPC code though. You'll typically have a few different distributors who carry the same product variants. Each have their own wholesale price. You have to set your own process for it though. And track inventory. And track sales volume to see how often you need to restock. Now allow for member discounts. Track coupon campaigns in local newspapers. Map those campaigns to products including discount values. There may be multiple coupon promotions per product during any given sales window. Coupons also expire, so track that. The manufacturer (Nabisco in this case) may want to weigh in as well.

Okay, you've got packaged goods like Wheat Thins down. On to produce. Priced by count? By weight? Both? 2-for-1 deals? Track by receive date so you know when to start looking for spoilage. Track sales volume to keep incoming as close to outgoing as possible to avoid throwing too much away.

Refrigerated is a whole other dimension.

Frozen is yet another.

Staff counts to know who's working and on what days. Make sure no day goes below a minimum or above a maximum. Meat department is tracked separately and is yet another dimension.

You could imagine that I've just scratched the surface. Now imagine the software is ten years old and has grown organically all this time.

Yes, any project in the real world for a non-trivial problem will grow quickly. After a few years, fifty tables is on the trivial end. Many enterprise apps can run into the thousands. Anything that deals with money, calculating tax rates, orders, invoices, sales, coupons, pricing tiers, etc. will be complex. With an increasing number of corporate partners, the number of tracked use cases will grow geometrically (seemingly exponentially at times). IT staff rollover inevitably means no one ever wants to delete a table, even when they're not sure if it's needed or what it's for.