Hi everybody!
This post seems (ok, ok, ...it is) huge but it is very clear (I hope at least) so, don't fear to read it :-)
I'm quite new to software developing and in these last months i drilled down into database design theory in order "to do things properly". I'm now designing an application for managing personal investments and i would like to discuss with you some aspect of the database design.
The "business rules" i intend to use are:
1. each investor can have 0, 1 or several portfolios (with portfolio i mean a group of investments) and each portfolio MUST belong to one and only one investor
2. each portfolio can have 0, 1 or several investments and each investment MUST belong to one and only one portfolio
3. an investment (for example an investment fund) can have 0, 1 or several events (events are every kind of money movement regarding the investment) and each event MUST belong to one and only one investment
4. an investment, MUST belong to one and only one investment type (no matter now what they are)
5. an event, MUST belong to one and only one event type (no matter now what they are)
Here is the logical model i set up.
I think the model is a working one but there are some subtle issues i'd like discuss here:
1. i made the relationships investor-portfolio and portfolio-investment a non-identifying ones because the entity involved are independent (i mean, they have an autonomous meaning) and i made them non-optional. i made the investment-event relationship an identifying one because the event entity has no meaning without an investment to refer to. Let's focus, for simplicity, on the investor-portfolio (call it I-P) and investment-event (call it I-E) relationships (the portfolio-investment is the same as investor-portfolio). This is a very clear conceptual difference, but, from a practical point of view, what are the advantage of making the I-E relationship an identifying one? in other words, what if i make it a non-identifying and non-optional one? Similarly, what if i make the I-P relationship an identifying one? Both relationships have the same cardinality, (namely 1 to 0,1,....)
so....are there practical differences? Am I loosing time with these subtleties or are they important points?

let me know, please. Any kind of observation will be appreciated
2. another point is primary keys. I have used everywhere surrogate keys but i know that it would be better using natural keys and that if there are no natural keys i had better reviewing the model... so...let's see it entity by entity:
- investor: we all know that person names are not good PK so....i could use something like driving licence number but it is an application for home use, not a professional one, so i want keep it as frendly as possible an not too formal
- portfolio: the column Name is not unique. i don't want compell user to choose different names for each portfolio. I can have two investor with a portfolio with the same name so...(observation: if i had used an identifying relationship for investor-portfolio, the PK of portfolio could be composed by the columns investorId and portfolioName, and i could eliminate the surrogate key portfolioId but...is this a good reason for an identifying relationship? this sounds like question number 1 )
- investment: quite same as portfolio
- event: definitely, event instances have no natural key! ...at least i think, so....
- (not interested for now to discuss investment type and event type)
Do you have suggestions for natural keys?
So..., i'm sorry for this huge post

but i wanted to explain properly everything (at least i tryed ) and i say thank you to all people who take the time to read it!

Any opinion and criticism about all the stuff upon are welcome.
Enrico Campanelli.