Solved

One foreign key referencing primary key in multiple tables

Posted on 2011-03-22
4
569 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
  • 2
4 Comments
 
LVL 37

Expert Comment

by:ValentinoV
Comment Utility
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
Comment Utility
I do not think this is a good idea.
Thanks
0
 
LVL 37

Expert Comment

by:ValentinoV
Comment Utility
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
Comment Utility
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

Find Ransomware Secrets With All-Source Analysis

Ransomware has become a major concern for organizations; its prevalence has grown due to past successes achieved by threat actors. While each ransomware variant is different, we’ve seen some common tactics and trends used among the authors of the malware.

Join & Write a Comment

There have been several questions about Large Transaction Log Files in SQL Server 2008, and how to get rid of them when disk space has become critical. This article will explain how to disable full recovery and implement simple recovery that carries…
Use this article to create a batch file to backup a Microsoft SQL Server database to a Windows folder.  The folder can be on the local hard drive or on a network share.  This batch file will query the SQL server to get the current date & time and wi…
Get a first impression of how PRTG looks and learn how it works.   This video is a short introduction to PRTG, as an initial overview or as a quick start for new PRTG users.
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.

743 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

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now