Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Generate Enums from Database or Vice Versa?

Tags:

c#

enums

t4

I'm trying to figure out which is the the "correct" way to do this. I have a bunch of lookup tables in my database and would like to place an enum on top of those values so, when coding, it's easier to read (as well as not use hard-coded values).

I'm wondering if I should generate my table values based on an existing enumeration or if I should generate my enumeration from my table's values.

EDIT

Based on the first couple of comments, here are some clarifications:

Frequency of changes to the values could be rather frequent as they are intended to be rather dynamic. That being said, a compile will be necessary before adding any of these either way, because the enumeration needs to be updated to expose the new values.

The main reason for this need is because we don't want to tie people down to a specific list of values, we would like the applications to have the ability to add new entries as and when they need to.

In the past, we have generated the data from enumerations, but I'm second guessing myself

like image 525
Benny Avatar asked Sep 01 '11 17:09

Benny


People also ask

Should enums be stored in database?

By keeping the enum in your database, and adding a foreign key on the table that contains an enum value you ensure that no code ever enters incorrect values for that column. This helps your data integrity and is the most obvious reason IMO you should have tables for enums.

Is it good to use enum in MySQL?

MySQL ENUM data type contains the following advantages: Compact data storage where the column may have a limited set of specified possible values. Here, the string values automatically used as a numeric index. It allows readable queries and output because the numbers can be translated again to the corresponding string.

Why is enum not good?

They Lack Accountability. To be clear, it's a mistake to assume consensual non monogamy is void of commitment. It's not simply informing your casual hookup of your other casual hookups. For a lot of people, it's being communicative to their partner of what they're doing with their friend with benefits or boyfriend.

What are the two types of enums?

There are three types of enums: Numeric enum. String enum. Heterogeneous enum.


1 Answers

We usually generate enums from the database. We use CodeSmith, which allows us to create project files that can easily regenerate the enums as needed.

We've gone the other way occasionally, usually for reporting purposes (when existing enum values are persisted).

And, of course, we have enums whose values are never persisted.

In general the only reason to generate enums from the database is if code needs to make decisions based on them. If you just want to populate a ComboBox and persist the user's choice, don't generate an enum.

Obviously making decisions based on enums (or strings) whose values can change is fragile. You may want to consider including expiration dates (or "from" and "through" dates) in your database schema, so that existing values are not deleted. Filter expired values when populating UI selectors. This also makes it easier to have referential integrity.

As always in C#, you have to be aware that enum values may fall outside of the expected range. Include a default on your switch.

We came up with helper classes for creating cached lookup lists that make these easier to use.

I'm not advocating going down this route. If you have to, this is how we did it.

like image 121
TrueWill Avatar answered Sep 23 '22 05:09

TrueWill