Jump to content
Guy_Smith

Engine Exhaust Emissions Database ERD is Circular!

Recommended Posts

I am trying to set up a database to calculate and report exhaust emissions from diesel engines and am stumped at Step #1:  The infamous Entity Relationship Diagram!

I am looking at a few thousand engines and need to calculate how much of what kind of pollutants they kick out into the air.  I have spreadsheets that list the Year of Manufacture, the horsepower, the serial number, how long the engine ran during a given year and how much fuel it consumed during that year.  I also have some spreadsheets that list what the Emission Factors, usually expressed in pounds per hour operated or pounds per gallon of fuel consumed, for each of the two dozen chemical compounds I’m interested in tracking.

Those emissions are relatively simple to calculate:  Multiply the Emission Factor times the number of hours operated (or times the gallons of fuel consumed) and we’re done.  Except for the fact that the Emission Factors are based on the Year of Manufacture and, in some cases, the horsepower rating of the engine, so I have to circle back around to the Engine table:  I don’t know how to connect the emission factor for, say, Arsenic to a specific engine, say a 154 hp Chevy made in 2014,  based on that engine’s year of manufacture and hp rating.

So my ERD keeps looking something like this:  Engines --->Emission Factors--->Engines   or   Engines ---<  Emissions >---Emission Factors--->Engines

My computer keeps puking ones and zeroes all over my keyboard when I try either setup in my Relationship Graph!

The only other way I can think of accomplishing these seemingly simple calculations is to write a boatload of scripts with variables, but I’m not even sure I could come up with all of the combinations/permutations involved.  And, unfortunately, I can’ even spell SQL, let alone know how to execute one of ‘em!

I have attached a (simplified) copy of the spreadsheets I currently use to better explain my problem.  I hope one of you will find this to be mind-numbingly simple and explain how it should be done.  Thanks very much for your time and consideration.

Sincerely,

Guy

Engine Emissions Calc Sheet MOD for FMF.xlsx

Share this post


Link to post
Share on other sites
On 03/22/2017 at 1:13 AM, Guy_Smith said:

the Emission Factors are based on the Year of Manufacture and, in some cases, the horsepower rating of the engine

You have to start by splitting this into individual records in an EmissionFactors table that has fields for:

• Substance
• YearOfManufacture
• MinimumHorsePower
• EmissionFactor
• Units

Then for your report generate a record in a third Emissions table for each Engine/Substance combination, and let it calculate the total emission. So your structure would be:

Engines -< Emissions >- EmissionFactors

and the relationship between Emissions and EmissionFactors would be defined as:

Emissions::Substance = EmissionFactors::Substance
AND
Emissions::YearOfManufacture = EmissionFactors::YearOfManufacture
AND
Emissions::HorsePower ≤ EmissionFactors::MinimumHorsePower

with the records on the EmissionFactors side sorted by MinimumHorsePower, descending.

 

On 03/22/2017 at 1:13 AM, Guy_Smith said:

how long the engine ran during a given year

I don't see a given year in the example. If you have  year-by-year data, this may affect the structure.

 

 

 

 

 

Edited by comment
  • Like 1

Share this post


Link to post
Share on other sites

Comment:  Thank you so much for the help on this!  And, of course, you're a step ahead of me already - I am currently only collecting data for 2016, but I anticipate that it will turn into an annual event and I will need to modify my database to include multiple reporting years.  Any helpful hints on how to tweak the solution to handle that?

Thanks again,

Guy

 

Share this post


Link to post
Share on other sites
1 hour ago, Guy_Smith said:

I will need to modify my database to include multiple reporting years.

Again, you will need a table where the yearly engine consumption data is stored using an individual record for each engine/year combination. I don't know how you're getting your data, but ideally you would have:

Engines -< EngineYearlyConsumptions -< Emissions >- EmissionFactors

Note that a record in Emissions table must lookup the YearOfManufacture and HorsePower values from its ancestor in Engines, in order to link to the correct record in EmissionFactors.

Share this post


Link to post
Share on other sites

That actually makes sense to me - who'd have thunk it?!

Thanks again, Comment - your willingness to help us neophytes is a true blessing!

Share this post


Link to post
Share on other sites

Rats! Phooey!  I'm still stuck - I can't get the emissions join table to populate.  I split the emission factor data into individual records, I've verified that I have the box checked to allow creation of records in the Emissions table and I've tried using a portal from the Engine table to display the emissions, but still nothing.  I maybe shouldn't be pulling the data for the Engine bhp and Tier from the Engine table or the CAS and Pollutant Names from the Emissions Factor table (for the Emissions table), but I don't know how else to do that (I also tried to do automatic lookups for those fields, but it didn't work, either). Any chance of looking at my file and seeing where I went wrong?

And, by the way, you will see the word "Tier" used in place of Year of Manufacture:  Tiers are basically groups of years used by the EPA. Using them in this instance saves me some time as I only have to enter emission factor records for one Tier instead of three or four records, one for each year in the Tier.

 

Thanks again for all of your assistance,

Guy

HARP DICE EmsInv Calc Sheet.fmp12

Share this post


Link to post
Share on other sites

I am afraid I cannot look at your file. In case it wasn't clear, you need to run a script that will create a record in the Emissions table for each combination of  EngineYearlyConsumptions and Substance (i.e. every row in your report). There is no other way to populate the table (unless you want to do it manually, or you have an outside source you can import)).

 

Edited by comment
  • Like 1

Share this post


Link to post
Share on other sites

Yeah, I sorta missed the "generate a record" part of your first response :B

I got the script to work and my database is up and running thanks to your guidance - thanks so much and have a great afternoon!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×

Important Information

By using this site, you agree to our Terms of Use.