|
Prev: Vaalirahoitus (oli: Re: Irlanti pelastaa Suomen)
Next: Sifobo Enterprise Manager for SQL Server - Free Download
From: Cralis on 17 Jun 2008 20:47 Hi guys. We have an application. There are 3 (at the moment) different sections, each has access to it's own 'Diary'. A section is like, 'Sub Program', which contains numerous sub programs. Programs, which contains numerous Programs, each with numerous Sub Programs. So, Each Sub Program has numerous Diarty Entries. Each Program has Numerous diary entries. The diaries for each section are identical. I think the best option is to have ONE diary table, with a Type ID of the section (Eg, 1 for Sub Program, 2 for Program...) type that the diary is linked to. And then an ID to that specific record it's linked to. Problem is, with this method, I can't enforced database integrity, as the ID that the diary item links to, can be in any of the Section tables (Sub Program table, or Program table.... etc). The other (And I feel, incorrect) metod, is to have a Diarty table for each section. 'SubProgramDiary', 'ProgramDiary' etc. In this way, referential integrity can be maintained. The trade off is, I think it's repeated code, repeated tables... and would be more difficult to handle in Reporting later on. Hope I'm being clear. Can someone add to this? Which would be the best method?
From: Ed Murphy on 18 Jun 2008 03:48
Cralis wrote: > We have an application. There are 3 (at the moment) different > sections, each has access to it's own 'Diary'. > > A section is like, 'Sub Program', which contains numerous sub > programs. > Programs, which contains numerous Programs, each with numerous Sub > Programs. > > So, Each Sub Program has numerous Diarty Entries. Each Program has > Numerous diary entries. > > The diaries for each section are identical. > > I think the best option is to have ONE diary table, with a Type ID of > the section (Eg, 1 for Sub Program, 2 for Program...) type that the > diary is linked to. And then an ID to that specific record it's linked > to. > > Problem is, with this method, I can't enforced database integrity, as > the ID that the diary item links to, can be in any of the Section > tables (Sub Program table, or Program table.... etc). > > The other (And I feel, incorrect) metod, is to have a Diarty table for > each section. 'SubProgramDiary', 'ProgramDiary' etc. In this way, > referential integrity can be maintained. The trade off is, I think > it's repeated code, repeated tables... and would be more difficult to > handle in Reporting later on. > > Hope I'm being clear. Can someone add to this? Which would be the best > method? Here's my best guess: 1) Create a single Sections table containing whatever data is common to all three sections. If they have some data that isn't in common, then that can be kept in separate tables (e.g. Programs, SubPrograms) with a foreign key reference to the Sections table. 2) Create a single Diaries table containing whatever data diaries have that's independent of which sections they're linked to. Then create a separate table DiarySections with foreign key references to the Diaries and Sections tables; this will be one-to-many (one Diaries row to many Sections rows). 3) Enforce "every section must contain an entry linked to every diary" at the application layer. Alternatively, give the Diaries table three foreign key references (e.g. one to Programs, one to SubPrograms). If/when you add a new section: a) Add a new foreign key reference to Diaries, but allow it to be null. b) Populate it for all existing rows. c) Now make it non-null. |