Active / Trash - Whose responsibility is it? (1 Viewer)

LOL, I don't understand this one. A valid state is anything other than trash and active simultaneously. There are THREE valid states. What does "a valid state" mean?
I was showing a simple test for determining whether your record with TWO semi-independent flags are in a valid configuration. I wrote it as a response to those who complained about the complexity of the test. It's a freakin' one-liner test with two parameters. I agree it shouldn't be so hard as some folks are making it out to be.


You have to look at the truth-table for the IMP Boolean operator. In this table, you can test those two flags in a single statement to see if they are in a valid configuration. Per your discussion, the only invalid configuration is if both ACTIVE and TRASH are true at the same time. The expression I mentioned is a simple test for exactly that case. The ONLY invalid state for IMP is when the left operand is TRUE and the right operand is FALSE.

ACTIVETRASHNOT TRASHACTIVE IMP (NOT TRASH)
FALSEFALSETRUETRUE
FALSETRUEFALSETRUE
TRUEFALSETRUETRUE
TRUETRUEFALSEFALSE
 
I was showing a simple test for determining whether your record with TWO semi-independent flags are in a valid configuration. I wrote it as a response to those who complained about the complexity of the test. It's a freakin' one-liner test with two parameters. I agree it shouldn't be so hard as some folks are making it out to be.


You have to look at the truth-table for the IMP Boolean operator. In this table, you can test those two flags in a single statement to see if they are in a valid configuration. Per your discussion, the only invalid configuration is if both ACTIVE and TRASH are true at the same time. The expression I mentioned is a simple test for exactly that case. The ONLY invalid state for IMP is when the left operand is TRUE and the right operand is FALSE.

ACTIVETRASHNOT TRASHACTIVE IMP (NOT TRASH)
FALSEFALSETRUETRUE
FALSETRUEFALSETRUE
TRUEFALSETRUETRUE
TRUETRUEFALSEFALSE
I think I see the problem here. Businesses run by rules. It is not a state table it is a business decision. Active is a state. Trash is a state. Each of these are business decisions.

A paint color record is Active or Trash. Active means that we sell more than 10000 gallons a month. The president of the damned company decided this. Not some flunky in IT. We sell millions of gallons of white a month, we sell 5 gallons of that icky green color. We are not going to deal with a paint color where we only ever sold a five gallons. The business rule is that Active means historically we sold more than x gallons a month. A muckety muck makes that decision.

The business rule for deleting records: We have never ever sold that color. We never even produced it. EVER. Any paint color that was never even manufactured will be deleted. Somebody silly sales guy loved shades of green. He decided that we would have 10 THOUSAND colors of green. He lobbied persistently and got 10000 shades of green. Only 1 ever sold. We have 9,993 green color records where we have never sold a single gallon. We need to clean up our paint color tables. The president of the company makes that decision. Not some flunky in IT.

There are RULES for what defines Active. It is not a binary "related to Trash" thing.
There are RULES which define Trash. It is not a binary thing "related to Active"

This is not some foreign concept guys. Rules run businesses.

A client is active if he buys more that $10000 a year. It costs us $20,000 a year to even deal with a customer. We have people who process orders, who pick orders, who drive orders around. We lease office space for these workers. We are not dealing with customers who don't buy enough stuff from us. The president of the company issues an edict. "Make all customers who purchase below X dollars inactive. Send them a letter. Do not process any orders below $1000 for that customer. If they want to be active, then they will order a larger order."

The president of the company makes that BUSINESS decision, not some flunky in IT. Active is a state. In ANY TABLE it is a state. It is unrelated to trash, in ANY SENSE OTHER THAN a record cannot be active and trash at the same time.

An order was placed a month ago. It was an active order. We were working on it. The client came on hard times. They called up and asked us to place the order on hold. We make it inactive. We didn't trash it. A BUSINESS DECISION is made to make that order inactive. That client goes out of business. Hmmmm NOW we need to delete that order. It was never processed, it will never be processed. The PRESIDENT dictates that Inactive Orders, where we never heard from the client again will be deleted. A business decision. A muckety muck makes that decision, not some flunky in IT.

WE are flunkeys in IT. We do not decide that some state table defines active and trash. It is NOT a state table. It is TWO ENTIRELY UNRELATED STATES of whatever table it is in. Muckety mucks make decisions as to what these states actually mean and when each of these ENTIRELY UNRELATED states will change.

Go to Amazon. "This product is not currently active. We don't know if it will ever be sold again". It says that right on the product page on many different things. A BUSINESS DECISION somewhere out in the world, NOT A STATE TABLE!!!

If you want to make this silly argument that it is nothing more than a state table with the Muckety Mucks in your client's company then so be it. It is not my job to argue that. When the President tells you that HE makes these decisions and you need to go somewhere else...

Now that I am calm again (ahhhooooommmmm this is what I do for a living... Ahhhooooommmmm this is what I do for a living), Trash was a flag that I created out of thin air to trap the delete key and prevent order entry flunkies from deleting records. To prevent sales flunkies from deleting records. The records may in fact end up deleted. Or not. They might have been "deleted" by a flunky somewhere hitting delete. I created this flag because the IT department was complaining that they were having to restore backups too often because some flunky deleted stuff they shouldn't. In many if not most cases REAL DELETES should come from delete queries being executed because some muckety said to do so.

That doesn't change the fact that behind the scenes, BUSINESS DECISIONS made by muckety mucks drive these very real states.

I was oh so hoping that we could discuss the mechanics of classes implementing the trash flag, how events can enforce a rule. I guess not. Good luck with your state table. And so with that I am out of here.
 
@jwcolby54 - You are frustrated with this big flap over two flags vs. a single state variable. You see the flags as governing certain SEPARATE (and binary) business actions/decisions. You implemented them separately based what you thought was necessary and appropriate. You caught flak when some folks latched onto something that was a pragmatic solution to the problems you faced. Unfortunately, certain of our members don't appreciate pragmatic solutions.

You have one record that can be in multiple simultaneous states if the putative actions related to those states are independent actions. When we discussed in an earlier post HOW you implemented your screening to decide if something was set incorrectly, my response was a simple expression that tests this question: Do I have to take action because of a specific combination of flag settings that are incompatible with each other? All I wanted to do was to demonstrate that it wasn't the complex test that some folks thought it was. If the purpose of my response wasn't so clear, I apologize for the misunderstanding.
 
I was oh so hoping that we could discuss the mechanics of classes implementing the trash flag, how events can enforce a rule. I guess not. Good luck with your state table. And so with that I am out of here.

As I said earlier, you are convinced you are right so there is no point to further discussion. You haven't added anything to the discussion that would change my mind about the appropriateness of two flags rather than one. I will go away now and you can solve a problem (by using a class) that wouldn't exist in the first place if it had been implemented correctly by using a single variable with 3 possible values.
 
Sorry, I forgot to include this description of third normal form. What you have created with your two variables that are interdependent is a transitive partial dependency and that is why I object. Not because you can't make the two variables work, only because it is harder than doing it right in addition to being esthetically unpleasing to purists.

The Third Normal Form – 3NF​

When a table is in 2NF, it eliminates repeating groups and redundancy, but it does not eliminate transitive partial dependency.

This means a non-prime attribute (an attribute that is not part of the candidate’s key) is dependent on another non-prime attribute. This is what the third normal form (3NF) eliminates.

So, for a table to be in 3NF, it must:

  • be in 2NF
  • have no transitive partial dependency.
 
Last edited:
Your city/zip analogy is invalid. In the US a city can have multiple zip codes so you can't necessarily derive zip from city and in a few spots, a zip code refers to more than one city and I think even crosses state lines in several cases. And that is why we always store both city and zip.
I have shown, clearly, with examples, how the value of Active is a business decision. It cannot be easily discovered from the state of the Trash flag.

How in the world can you state that the value of Trash can be easily discovered from the value of Active? Trash is a business decision independent from the value of Active.
I don't believe I said that. But, by your definition a record cannot be both trash and active since if you change Trash to true, your code changes Active to false. That is the transitive dependency.

I have shown, clearly, with examples, how the value of Active is a business decision. It cannot be easily discovered from the state of the Trash flag.
I never said you could.
I have shown, clearly, with examples, how the value of Trash is a business decision. It cannot be easily discovered from the value of the Active flag.
I never said you could.

But if the Trash flag is true, you KNOW the Active flag must be false.

Active, Inactive, Trash are all business decisions. They indicate how a record should be used. You can't sell something marked as inactive and you shouldn't even see anything marked as trash anywhere except in the edit form and only if you select the option that says show "deleted" items. Otherwise, items marked as trash should always be hidden.

What I said was - one field with one of three values could tell you everything you need to know about the current state of the record. You don't need two fields. Why am I even discussing this with you? You have made up your mind. OK. Violate 3rd normal form. What do I care.

At this point, you've thrown out a lot of red herrings and made some bad analogies, none of which have supported your case so it is highly unlikely that you have anything that would change my mind at this point. Please don't worry about what I and the other experts have said. Just do what you want to do. Someone should be able to help you with your class.
 
Last edited:

Users who are viewing this thread

Back
Top Bottom