Op dit moment heb ik in een webapplicatie verschillende contenttypen (artikelen, stroomdiagrammen, etc.). Elk contenttype heeft een eigen tabel, omdat er naast de overlap (titel, een eigen ordering, auteurId, categoryId) grote verschillen zijn. Nu wil ik toe naar een situatie waarin deze verschillende content typen gemengd kunnen worden met elkaar.
Dit zou conceptueel de meest ideale situatie zijn:
Nu is dit niet zo heel moeilijk in de business laag te verwerken, maar ik zit te zoeken naar een manier om dit ook consistent en integer te houden in een RDBMS, zoals MySQL.
Een foreign key op itemId zou een gedachte zijn, maar de data is in één van de drie content tabellen aanwezig, en niet in allemaal. Triggers gebruiken als gate keepers om de data sane te houden heb ik ook overwogen, maar is in het specifieke geval van MySQL lastig, omdat het niet nog niet mogelijk is om errors/execepties te throwen (signal/resignal zit in de nog niet gereleasede 5.5).
Even los het specifieke type database, zijn er ideeën hoe dit aan te pakken, hoe zouden jullie dit doen? Is het mogelijk om de data op databaseniveau consistent en integer te houden, of is dit typisch iets wat in de businesslaag moet worden geregeld?
Dit zou conceptueel de meest ideale situatie zijn:
-----------------
| Content |
| - entryId |
| - title |
| - categoryId |
| - ordering |
| |
| - contentType|
| - itemId |
-----------------
|
-----------------------------------
| | |
------------- -------------- ------------------
| Articles | | Flowcharts | | Questionnaires |
| - itemId | | - itemId | | - itemId |
------------- ------------- ------------------
Nu is dit niet zo heel moeilijk in de business laag te verwerken, maar ik zit te zoeken naar een manier om dit ook consistent en integer te houden in een RDBMS, zoals MySQL.
Een foreign key op itemId zou een gedachte zijn, maar de data is in één van de drie content tabellen aanwezig, en niet in allemaal. Triggers gebruiken als gate keepers om de data sane te houden heb ik ook overwogen, maar is in het specifieke geval van MySQL lastig, omdat het niet nog niet mogelijk is om errors/execepties te throwen (signal/resignal zit in de nog niet gereleasede 5.5).
Even los het specifieke type database, zijn er ideeën hoe dit aan te pakken, hoe zouden jullie dit doen? Is het mogelijk om de data op databaseniveau consistent en integer te houden, of is dit typisch iets wat in de businesslaag moet worden geregeld?