Ik ben de gelukkige die aan een content managment systeem mag werken waarvan het databaseontwerp brak is. Nu zijn we dat langzamerhand aan het omtoveren tot iets wat richting een genormaliseerd database gaat 
Alleen kan dat niet zo snel aangezien de code die er boven op ligt daarvoor ook aangepast zal moeten worden en das behoorlijk veel werk.
Als eerste hebben we de huidige structuur van de db in kaart gebracht (voor zover dat kon, want er was geen documentatie en de db bevat geen metadata). Nu zijn we bezig om ook daadwerkelijk de relaties te leggen in de db tussen de tabellen en lopen we tegen een probleem aan waarvan we geen juiste oplossing kunnen vinden. Het heeft alles te maken met de tabel 'ACL' waarin alle rechten liggen op de onderdelen binnnen de database. Nu zit het zo dat ik een tabel 'Resources' heb waarin de soorten resources staan en ik daar rechten op kan geven middels de tabel 'ACL' (ik kan daar een gebruiker bijvoorbeeld volledige rechten geven om nieuwe pagina's aan te maken) daarnaast heb ik een tabel 'NavMenus' waarin alle knopjes zitten voor het menu waarop ik voor elk knopje ook weer rechten kan geven middels de tabel 'ACL'.
De sleutel ligt um in de guid (elke resource, elke menuknopje heeft een unieke guid) waarop in de tabel 'ACL' dus op aan guid en een userid rechten worden gegeven. Logischerwijs zou je dus denken dat je dus vanaf de guid van de tabel 'Resources' en 'NavMenus' een FK plaats naar de guid van de tabel 'ACL' zoals je hieronder ook kunt zien.

Als ik een tabel koppel met een FK aan ACL gaat dat goed, koppel ik er twee of meer aan en voeg ik bijvoorbeeld in Resources een nieuw record toe dan geeftie een error en zegtie datie ook wat verwacht in de tabel 'NavMenus'. Ook logisch, maar dat geeft wel een probleem. Nu kan ik bij de relatie zeggen datie die niet moet gebruiken bij updates en inserts, maar waar heb je dan nog een relatie voor nodig??? Vind ik persoonlijk dus geen oplossing. Ik weet dus dat het db model brak is (er horen nog een stuk of 60 tabellen bij het totale model), maar daar kan ik in eerste instantie geen wijzigingen in aanbrengen. Waar ik eigenlijk naar opzoek ben is een soort 'of FK', ik bedoel daarmee: of hij zit in tabel a of tabel b of tabel c... en dat kan dus volgens mij niet.
Vandaar de vraag: hoe is dit het beste op te lossen: geen relaties leggen maar dmv van een stored procedure (oid) de rechten laten regelen? of zijn er betere manieren te bedenken voor zo'n situatie...
Alleen kan dat niet zo snel aangezien de code die er boven op ligt daarvoor ook aangepast zal moeten worden en das behoorlijk veel werk.
Als eerste hebben we de huidige structuur van de db in kaart gebracht (voor zover dat kon, want er was geen documentatie en de db bevat geen metadata). Nu zijn we bezig om ook daadwerkelijk de relaties te leggen in de db tussen de tabellen en lopen we tegen een probleem aan waarvan we geen juiste oplossing kunnen vinden. Het heeft alles te maken met de tabel 'ACL' waarin alle rechten liggen op de onderdelen binnnen de database. Nu zit het zo dat ik een tabel 'Resources' heb waarin de soorten resources staan en ik daar rechten op kan geven middels de tabel 'ACL' (ik kan daar een gebruiker bijvoorbeeld volledige rechten geven om nieuwe pagina's aan te maken) daarnaast heb ik een tabel 'NavMenus' waarin alle knopjes zitten voor het menu waarop ik voor elk knopje ook weer rechten kan geven middels de tabel 'ACL'.
De sleutel ligt um in de guid (elke resource, elke menuknopje heeft een unieke guid) waarop in de tabel 'ACL' dus op aan guid en een userid rechten worden gegeven. Logischerwijs zou je dus denken dat je dus vanaf de guid van de tabel 'Resources' en 'NavMenus' een FK plaats naar de guid van de tabel 'ACL' zoals je hieronder ook kunt zien.

Als ik een tabel koppel met een FK aan ACL gaat dat goed, koppel ik er twee of meer aan en voeg ik bijvoorbeeld in Resources een nieuw record toe dan geeftie een error en zegtie datie ook wat verwacht in de tabel 'NavMenus'. Ook logisch, maar dat geeft wel een probleem. Nu kan ik bij de relatie zeggen datie die niet moet gebruiken bij updates en inserts, maar waar heb je dan nog een relatie voor nodig??? Vind ik persoonlijk dus geen oplossing. Ik weet dus dat het db model brak is (er horen nog een stuk of 60 tabellen bij het totale model), maar daar kan ik in eerste instantie geen wijzigingen in aanbrengen. Waar ik eigenlijk naar opzoek ben is een soort 'of FK', ik bedoel daarmee: of hij zit in tabel a of tabel b of tabel c... en dat kan dus volgens mij niet.
Vandaar de vraag: hoe is dit het beste op te lossen: geen relaties leggen maar dmv van een stored procedure (oid) de rechten laten regelen? of zijn er betere manieren te bedenken voor zo'n situatie...