This is my first project which I’ve encountered that I can’t get by on NSUserDefaults peppered with some NSCoding protocol. I’ve been asked to write some POS software.
Essentially, the App needs to store a bunch of products, prices and sales accounts. The user should be able to add items and accounts, and track the balance of accounts over time. The balance of an account should be able to be carried over from one “Session” (time period) to the next.
I’m comfortable with the concepts, but I’d like to be confident that I’m modeling this right. Here’s how I’ve modeled my data. I’d like to know if I’ve done this properly or if there are any glaring errors/omissions.
I’ve created an “Account” Entity, which has the following properties:
- First Name
- Last Name
- Account ID
- Group
- There is a relationship to the transaction entity.
I’ve created an entity for each Session. Again, a session is just like a fiscal month. The session will have a custom name and an ID.
- Session ID
- Session Name
- There is a relationship to all of the accounts that are applied to that session.
There are of course, products, which have a name and ID. There is also a relationship to the “price” object, so I can change the prices without affecting balances.
Please see this screenshot from Xcode 4 which explains my model in its entirety:

Edit:
Looking at this, it seems that I’m missing some important info, such as dates of transactions etc. That said, am I on the right track?
You probably don’t need to have an entity for price, as it will likely just be a float. I’d recommend adding a price attribute to your product entity instead.
I don’t know if transactions will need names or not, I suppose if you want to have notes then they should.
Also transactions should probably have a to-many relationship with products.
Will this be used on a single device or will there be many users? If each user (account) is responsible for its own data then it may make more sense to have transactions/session rather than transactions/user.