By the same reasoning, I probably need to make another table for subsponsors
No, ONE sponsors table. I'm guessing a sponsor can also be a subsponsor and vice versa. So whether a sponsor is a main or sub is identified where they are assigned. So one table.
I can't think of a scenario where a sponsor would be a subsponsor and vice/versa. For example, if the sponsor is the NIH (National Institutes of Health), the subsponsor could be NIA (the National Institute on Aging). Because the NIH is the parent organization, it will always be the sponsor and NIA (etc.) will always be subsponsors. It's like a country-state type relationship. If it can be reversed, the subsponsor was never a subsponsor to begin with and the user screwed up.
I'm not really sure what we'd need a PK for though
EVERY table needs a PK. You need something that uniquely identifies a record. This can be a single field or combination (though I'm not a fan of composite keys) or it can be a surrogate key (like an autonumber), but every table must have one.
I will make it magically know from GrantID relationship the PIIDs of researchers
Its not magic, its called a many to many relationship. A Grant can have multiple PIs and a PI can be associated with multiple Grants. So you use, what's called, a Junction table to model that relationship. That's what tblPIAssigned is.
It will remain magic in my mind until it makes sense 😅. I get conceptually how it works, but I don't understand how to implement it yet. I was planning on diving into Ken's db today to figure it out but for some reason I'm unable to download files from the drive he linked. Hopefully he'll respond and I'll be able to play with his examples tomorrow. If not, google. At least my tables seem to be in order now.
pull quarters from submission dates
How about a table like this:
tblMth2Qtr
MonthID (PK)
FiscalQtr
This table has 12 records. One for each month with the corresponding fiscal quarter. Then all you need is either a DLookup or Join in a querter to pull the Quarter.
That'll be on my to-do list for when my way inevitably breaks or I've figured out how to do these relationships properly. I'm literally shocked that the calculated field way worked b/c nothing complex I try in calculated field ever works. Literally I can't get the most simple between statement to work. If(myField between 1 And 3, "Yes", "No") won't even attempt to run no matter how many different ways I do it. It doesn't matter much b/c I can do it w/ Iif + and/or, but omg it's frustrating.