How to design tables for TALENT MANAGEMENT BIZ

G

GemstoneTalent

AC2k; XP

We are TALENT MANAGERS who represent ACTORS. We want a system to schedule
our ACTORS appointments and send an email with the appointment info to the
ACTOR and CC all of our MANAGERS. (Usually 5 BCC's)

Many ACTORS have AGENTS (some don't)
Each TALENT AGENCY has several departments (THEATRICAL, COMMERCIAL, YOUTH,
DANCE, etc)
Each department has several AGENTS.
Each AGENT has several ASSISTANTS who usually call for the AGENT to
schedule an appointment. Do all these get separate tables?

AUDITIONS and CALLBACKS are usually held at CASTING STUDIOS (about 20 that
are relatively stable, and other ad hoc locations) by CASTING DIRECTORS
(who are nomads) Some AUDITIONS are at the TALENT AGENCY with the AGENT

We want to track the AUDITIONS, which hopefully turn into CALLBACKS and
then a BOOKING.

I thought the following tables:

MANAGERS - names & contact info
ACTORS - names, stats
SKILLS - (about 150 fields)
AGENCIES - contact info
AGENTS - should Assistants go here or get their own table?

SCHEDULES - type of appointment, when,
PROJECTS - details about project type - commercial, feature, episodic;
roles, writer
DIRECTOR -
PRODUCER -
CASTING STUDIO -
CASTING DIRECTOR
CASTING ASSISTANT

Should there be a table just for AUDITIONS etc? The SCHEDULES table is
where I thought they should go.

When we schedule an appointment, we need to contact the client via email
and phone. What table would we track the email being sent and if actor
confirmed?

We plan on 200 - 300 ACTORS.
There are about 250 TALENT AGENCIES some with NY & LA offices - we work
with about 25% of them regularly.
There are approx 300 CASTING DIRECTORS.
Approximately 100 - 200 BREAKDOWNS every week day

Let me know if you need more info. suggestions are welcome. Sorry for this
mess. Grateful for any pointers. I know getting a good design is important.

Gemstone Talent
www.GemTal.com
 
J

John Nurick

Some random thoughts that may help refine the structure.

1) Most of the entities you're modelling are PEOPLE: Actors, Agents,
Assistants, Casting Directors, Casting Assistants, Directors, Producers,
Writers, Managers. It's possible for the same person to appear in more
than one of these roles. So there's a strong prima facie case for a
Persons table for the data about the people, rather than putting them
into multiple tables; a Roles table (with records for Actor, Agent,
Director, etc); a PersonsRoles table to store the roles that each Person
is known to fill (e.g. if Mr X is a Director the fact would be stored by
a record in PersonsRoles); and a PersonsRolesProjects table to store the
roles that each Person is filling in relation to individual projects.

2) Some entities are businesses or parts of businesses (e.g. Agencies,
Departments). Any time there's may be more than one person involved in
the other end of a transaction (e.g. an Agent who's the nominal party
and the assistant/s who make the bookings) and you need to keep track of
them, you need to store the transaction as with the business (or
department) in question and link the individual(s) to the transaction.
So you could use something like this table
tblBusinessUnits
BUID - autonum PK
BUName
BUAddress
...
BusUnitParent - self-join to BUID

Things get messy if one kind of transaction is sometimes with a business
and sometimes with an individual. (E.g. some Agents are companies, some
are sole traders; some actors have personal management companies - if
only for tax reasons - and some don't). In that case you may need to
abstract one stage further and have a "top-level" entity such as
LegalPerson, subclassed into Businesses and Persons.

3) Auditions, Callbacks and Bookings all sound like varieties of the
same entity: Events.

4) Skills: this is definitely not a table with 150 fields. You'd have
something like this:
tblSkills
SkillID
SkillName
SkillDescription
with however many records are needed, and
tblPersonSkills
PersonID (or LegalPersonID)
SkillID
SkillLevel (e.g. Some, competent, expert, specialist)
to store who is how good at what.

5) For Breakdowns, you presumably need Counsellors<g>.
 
G

GemstoneTalent

These are great points to consider. THANKS! BTW, I am a novice at this, but
feel confident with the assistance here.

Sometimes, PEOPLE are often in more than one JOB for a given PROJECT. (ie -
a WRITER might PRODUCE and DIRECT a movie) Suggestions for handling
multiple JOBS?

So in a PROJECTS table, I should have a M-M link to the PEOPLE table with
an ID field for WRITER, PRODUCER, DIRECTOR etc?

Should all the ADDRESSES be in a separate table?

Since PEOPLE are quite nomadic in the entertainment biz, would it make
sense to create a "Most Recent JOB" field?

The thought of having separate tables for ACTORS, TALENT AGENCIES, AGENTS,
CASTING DIRECTORS, CASTING STUDIOS, MANAGERS and OTHER_PEOPLE seems to make
sense, but might be overkill? Or properly normalized?

The TALENT AGENCY and CASTING STUDIO addresses rarely change. CASTING
DIRECTORS might hold AUDITIONS at various CASTING STUDIOS, or their own
office. Sometimes the AUDITIONS are with the AGENT at their TALENT AGENCY.

CALLBACKS after the original AUDITION are usually identical info to the
AUDITION, just a new date and time...although it might be elsewhere - such
as a PRODUCER's office.

BOOKINGS are usually at a different location. Tracking payments due/made,
current running projects (conflicts) are requirements to consider in
design.

One major goal is to speed up our locating actors and scheduling
appointments, then emailing and hopefully text mailing appointment sheets
immediately. We will probably require a phone call to them; then confirm
they will make the appointment.

(All MANAGERS need to have access to all unconfirmed with status (eg JOE
left message for ACTOR A @ Time/DATE - waiting for response)

This just came to light - there is an online data feed that will populate
the PROJECTS table, in addition to manual addition of PROJECTS. There are 5
separate feeds in XML format (I will probably hire someone for this
translation)

1) DATA LIST
- display_casting_directory (true/false) this indicates whether the Casting
Director's name should be displayed.
- internal_project_type (string) designates whether this is considered a
commercial or theatrical breakdown, or a memo.
- breakdown_id (int) the unique ID used to reference this breakdown.
- title (string) the title of the breakdown.
- type_name (string) type or category of the breakdown.
- casting_director (string) name of the casting director associated to this
breakdown.
- expiration_date (datetime) the date/time the breakdown is considered
archived.
- allow_electronic_submission (true/false) indicates whether the breakdown
allows electronic submissions.
- union_name (string) SAG, AFTRA, etc.
- date_published (datetime) the date/time the breakdown was released.
- shoot_location (string) the location where the project will be shooting.
- parent_breakdown_id (int) if the breakdown is an addendum it will have a
parent.
- start_date (int) the earliest date listed as the start date or when the
project will begin filming.
- submitted_on (true/false) indicates whether this talent rep has submitted
on this project.

2) DATA DETAILS
- internal_project_type (string) designates whether this is considered a
commercial or theatrical breakdown, or a memo.
- display_casting_directory (true/false) this indicates whether the Casting
Director's name should be displayed.
- parent_breakdown_id (int) if the breakdown is an addendum it will have a
parent.
- title (string) the title of the breakdown.
- casting_director (string) name of the casting director associated to this
breakdown.
- date_entered (datetime) the date the breakdown was first created.
- expiration_date (datetime) the date/time the breakdown is considered
archived.
- type_name (string) type or category of the breakdown.
- usage (string) how the breakdown is used (commercial, print, etc).
- union_name (string) SAG, AFTRA, etc.
- left_heading (string) free form text entered for display on left column.
- right_heading (string) free form text entered for display on right
column.
- submission_instructions (string) instructions on how to submit your
clients
- submission_address_1 (string) line 1 of submission address.
- submission_address_2 (string) line 2 of submission address.
- submission_address_3 (string) line 3 of submission address.
- submission_city (string)
- submission_state (string)
- submission_postal_code (string)
- submission_country (string)
- submission_phone (string)
- submission_fax (string)
- submission_email (string)
- submission_alt_instructions (string) alternate instructions on how to
submit your clients
- submission_alt_address_1 (string) line 1 of submission address
(alternate).
- submission_alt_address_2 (string) line 2 of submission address
(alternate).
- submission_alt_address_3 (string) line 3 of submission address
(alternate).
- submission_alt_city (string)
- submission_alt_state (string)
- submission_alt_postal_code (string)
- submission_alt_country (string)
- submission_alt_phone (string)
- submission_alt_fax (string)
- submission_alt_email (string)
- special_notes (string) displayed below submission/alt instructions.
- date_notes (string) used for explanation of interview/callback/start
dates or other misc dates types.
- pay_rate (string)
- production_company_name (string)
- advertising_agency_name (string)
- records (string)
- shoot_location (string) the location where the project will be shooting.
- conflicts (string)
- allow_electronic_submission (true/false) indicates whether the breakdown
allows electronic submissions.
- date_published (datetime) the date/time the breakdown was released.
- parent_title (string) if the breakdown is an addendum this holds the
value of the title of it's parent.
- parent_date_published (datetime) the date/time the parent breakdown was
published.
- breakdown_number (int) not in use but used for reference of where it fits
in the addendum chain.
- additional_notes (string) displayed below the roles.

3) PRODUCTION STAFF
- first_name (string) first name of the staff.
- last_name (string) last name of the staff.
- role_name (string) role the staff plays (Photographer, Director, etc.)

4) DATA DATES
- display_date (datetime) the date/time value.
- datetype (string) Interview Dates / Callback Dates / Start Dates
- notes (string) Any notes associated to the dates. Not in use.

5) DATA ROLES
- role_name (string) the name or title of the role.
- role_description (string) the description of the role.
- role_id (int) the unique ID used to reference the role.
- role_display_order (int) number representing the order in which the role
is to be displayed.
- category_name (string) name of category the role belongs to (if
applicable).
- category_description (string) the description of the category.
- category_display_order (int) number representing the order in which the
category is to be displayed.
- attachment (string) filename that is attached and ready for download for
the role.

And I am sure I am missing a lot - but this is a start. The group wisdom is
welcome!

I realize the normalization is essential to a decent application and really
appreciate the online assistance. TIA (Do programmers have more
"integrity?" <g> ) Thanks, Rick


Some random thoughts that may help refine the structure.

1) Most of the entities you're modelling are PEOPLE: Actors, Agents,
Assistants, Casting Directors, Casting Assistants, Directors, Producers,
Writers, Managers. It's possible for the same person to appear in more
than one of these roles. So there's a strong prima facie case for a
Persons table for the data about the people, rather than putting them
into multiple tables; a Roles table (with records for Actor, Agent,
Director, etc); a PersonsRoles table to store the roles that each Person
is known to fill (e.g. if Mr X is a Director the fact would be stored by
a record in PersonsRoles); and a PersonsRolesProjects table to store the
roles that each Person is filling in relation to individual projects.

2) Some entities are businesses or parts of businesses (e.g. Agencies,
Departments). Any time there's may be more than one person involved in
the other end of a transaction (e.g. an Agent who's the nominal party
and the assistant/s who make the bookings) and you need to keep track of
them, you need to store the transaction as with the business (or
department) in question and link the individual(s) to the transaction.
So you could use something like this table
tblBusinessUnits
BUID - autonum PK
BUName
BUAddress
...
BusUnitParent - self-join to BUID

Things get messy if one kind of transaction is sometimes with a business
and sometimes with an individual. (E.g. some Agents are companies, some
are sole traders; some actors have personal management companies - if
only for tax reasons - and some don't). In that case you may need to
abstract one stage further and have a "top-level" entity such as
LegalPerson, subclassed into Businesses and Persons.

3) Auditions, Callbacks and Bookings all sound like varieties of the
same entity: Events.

4) Skills: this is definitely not a table with 150 fields. You'd have
something like this:
tblSkills
SkillID
SkillName
SkillDescription
with however many records are needed, and
tblPersonSkills
PersonID (or LegalPersonID)
SkillID
SkillLevel (e.g. Some, competent, expert, specialist)
to store who is how good at what.

5) For Breakdowns, you presumably need Counsellors<g>.


Gemstone Talent
www.GemTal.com
 
J

John Vinson

These are great points to consider. THANKS! BTW, I am a novice at this, but
feel confident with the assistance here.

Sometimes, PEOPLE are often in more than one JOB for a given PROJECT. (ie -
a WRITER might PRODUCE and DIRECT a movie) Suggestions for handling
multiple JOBS?

A many to many PeopleJobs table with as many rows for a person as they
have jobs.
So in a PROJECTS table, I should have a M-M link to the PEOPLE table with
an ID field for WRITER, PRODUCER, DIRECTOR etc?

Just so you don't have separate *fields* for WRITER, PRODUCER, etc. -
you'ld have a Role field (which might contain the actual text "WRITER"
or be just an ID linking to a Roles table).
Should all the ADDRESSES be in a separate table?
Yes.

Since PEOPLE are quite nomadic in the entertainment biz, would it make
sense to create a "Most Recent JOB" field?

No. Keep a historic record of jobs, and do a query to find the most
recent.
The thought of having separate tables for ACTORS, TALENT AGENCIES, AGENTS,
CASTING DIRECTORS, CASTING STUDIOS, MANAGERS and OTHER_PEOPLE seems to make
sense, but might be overkill? Or properly normalized?

This would NOT be properly normalized. People are people; an actor
could also be a casting director or a manager. Businesses are
businesses; I don't know the talent business well but I can easily
imagine a business acting as both a talent agency and a casting
studio.

The TALENT AGENCY and CASTING STUDIO addresses rarely change. CASTING
DIRECTORS might hold AUDITIONS at various CASTING STUDIOS, or their own
office. Sometimes the AUDITIONS are with the AGENT at their TALENT AGENCY.

CALLBACKS after the original AUDITION are usually identical info to the
AUDITION, just a new date and time...although it might be elsewhere - such
as a PRODUCER's office.

BOOKINGS are usually at a different location. Tracking payments due/made,
current running projects (conflicts) are requirements to consider in
design.

All these are Events. I'd suggest that Auditions and Callbacks be
stored in the same table (with a field to distinguish them); Bookings
would have very different properties and should be in their own
tables. The Booking table would have several many to many
relationships (to the different performers, etc.)
One major goal is to speed up our locating actors and scheduling
appointments, then emailing and hopefully text mailing appointment sheets
immediately. We will probably require a phone call to them; then confirm
they will make the appointment.

(All MANAGERS need to have access to all unconfirmed with status (eg JOE
left message for ACTOR A @ Time/DATE - waiting for response)

A Messages table then - with From, To, MsgDateTime, Subject,
Resolution, ...
This just came to light - there is an online data feed that will populate
the PROJECTS table, in addition to manual addition of PROJECTS. There are 5
separate feeds in XML format (I will probably hire someone for this
translation)

Access 2003 can link to an XML table directly; and Append query should
be pretty easy to create.
1) DATA LIST

The rest of this is getting into more detail than I have time to
review right now... maybe someone else can go through it!
 
G

GemstoneTalent

Thanks for an excellent response. Very helpful.
Access 2003 can link to an XML table directly; and Append query should
be pretty easy to create.

EXCELLENT! What a great reason to upgrade (I hope) from Office/Access2000.
Any caveats in the transition?

Easier web integration? - we would love to put the clients updates form
online and have clients maintain their own stats.

About the Append Query -
There are the following 5 feeds to populate the tables.
There are duplicate fields in some. (Don't bother reading all that stuff -
it just shows there are different data types that repeat in different
feeds)

The breakdown_id seems to be the primary key.
First - search for existing breakdown_ID
- if not found, create new record and populate various tables with new data
- if found, compare data - if same go next, if different add new data (make
a note who, when, what changed.
(Should there be a table for all changes? It is important to be able to
track most changes automatically.)

Does the above appear on the right track flow wise?
Is there an example of comparing fields? Do I define the variable as
variant? since the different field have differing data types?

Thanks, Rick


Gemstone Talent
www.GemTal.com
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top