Solved

One foreign key referencing primary key in multiple tables

Posted on 2011-03-22
4
580 Views
Last Modified: 2012-06-22
Assignment table(assignmentid

pk,title,etc.,assignmenttype(1=forum,2=journal,etc),refid (id of a

forumthread,or id of a journal)

_______________________

forum table(threadid pk,threadtitle,graded y/n,etc.

________________

journal table(journalid,journaltitle,gradedy/n.etc.)

________________

is it ok to use refid as a foriegn key referencing forumid in fourm

table if the assignment type is forum

and refid is a foreign key referencing journalid in journal table if

assignment type is journal

how this can be accomplised in the best way to improve performance

I thought of doing the following

adding the following two tables journalassign(journalid,assignmentid)

and forumassign(forumid, assignm)

___________________________
I thought of another alternative please let me know the best way to go

for it

Assignment table(assignmentid

pk,title,etc.,assignmenttype(1=forum,2=journal,etc),refid (id of a

forumthread,or id of a journal)

foreign key1 is (assignmenttype+refid) referencing threadi+type in forum

table
foreign key2 is (assignmenttype+refid) referencing journalid+type in

journal table

forum table((threadid +Type=1) pk,threadtitle,graded y/n,etc.
and

________________

journal table((journalid+type=2)pk,journaltitle,gradedy/n.etc.)

________________
but I have similar situations in other tables

example:

lessontools(lessonid +  toolid pk, tooltype (1=dropbox,2=,etc.)

dropbox(dropboxid, etc)

___________________
Please see attached diagram and give me your opinion

thanks Data diagram
0
Comment
Question by:sohairzaki2005
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
4 Comments
 
LVL 37

Expert Comment

by:ValentinoV
ID: 35196283
In your Assignment table I would create two foreign keys: ForumID to refer to your Forum table and JournalID to refer to yourJournal table.  When AssignmentType = 1 then ForumID should be filled in.  And when type=2 then JournalID should be filled in.

However, I notice that your primary keys are sometimes made up of several fields, for instance your Journal table's PK is JournalID and ToolType.  That seems a bit weird.  Isn't your JournalID unique across all records?
0
 

Author Comment

by:sohairzaki2005
ID: 35199122
I do not think this is a good idea.
Thanks
0
 
LVL 37

Expert Comment

by:ValentinoV
ID: 35205547
Would you mind sharing why you think that my suggestion is not a good idea?

Another option that would be acceptable but less interesting that my earlier suggestion, in my opinion, is that you create two tabes: JournalAssignment and ForumAssignment.

As for LessonTools: why would you store ToolType there?  It seems to me that ToolType is an attribute of "Tool" and thus belongs in the Tool table (which is referred to through ToolID)?
0
 
LVL 5

Accepted Solution

by:
bitref earned 500 total points
ID: 35207034
You may create a new table as an intermadiate link in which you store the many-to-many relationship foreign key data.
0

Featured Post

Instantly Create Instructional Tutorials

Contextual Guidance at the moment of need helps your employees adopt to new software or processes instantly. Boost knowledge retention and employee engagement step-by-step with one easy solution.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Data architecture is an important aspect in Software as a Service (SaaS) delivery model. This article is a study on the database of a single-tenant application that could be extended to support multiple tenants. The application is web-based develope…
In this article we will get to know that how can we recover deleted data if it happens accidently. We really can recover deleted rows if we know the time when data is deleted by using the transaction log.
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…

751 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question