Besten,
Ik ben samen met een paar collega's van me bezig met het ontwerpen van een nieuwe database voor een private CMS. We hebben allerlei eisen opgesteld waaraan deze nieuwe database moet voldoen. Echter nu bij het prototypen van bepaalde functionaliteiten/eisen lopen we tegen enkele tekortkomingen van de database aan.
Het belangrijkste punt waar we mee zitten is versiebeheer voor content. We gebruiken (nu nog) MySQL 4.1 met de engine InnoDB, later dit jaar zullen we overstappen op MySQL 5 of PostgreSql. Voorlopig moeten we het dus nog even doen met deze verouderde versie van MySQL.
Mijn vraag is dan ook, hebben jullie ervaring met het ontwerpen van databases met versiebeheer in de tabellen verwerkt? De oplossing die we zoeken moet vrij generiek zijn. Met generiek bedoel ik in dit geval dat het geen beperkingen oplegt in de dagelijkse omgang met de database.
Zelf zijn we heel erg dol op de onderstaande constructie:
Het nadeel van deze constructie is dat we geen relaties kunnen leggen naar één specifiek content item. Je wordt indirect verplicht om relaties aan één versie te koppelen door de gecombineerde primary key.
De gewenste koppeltabel ziet er ongeveer zo uit:
Helaas werkt dit niet als er relaties gelegd gaan worden (on delete cascade). Als je namelijk één bepaalde versie uit de tabel Content zou verwijderen, zullen alle relaties uit de tabel tblContent_Content ook verdwijnen ongeacht of er nog een versie van hetzelfde content item in de tabel tblContent bestaat of niet.
Hebben jullie hier ervaring mee? Wat kunnen jullie me aanraden betreft dit onderwerp?
Alvast bedankt voor jullie input!
Ik ben samen met een paar collega's van me bezig met het ontwerpen van een nieuwe database voor een private CMS. We hebben allerlei eisen opgesteld waaraan deze nieuwe database moet voldoen. Echter nu bij het prototypen van bepaalde functionaliteiten/eisen lopen we tegen enkele tekortkomingen van de database aan.
Het belangrijkste punt waar we mee zitten is versiebeheer voor content. We gebruiken (nu nog) MySQL 4.1 met de engine InnoDB, later dit jaar zullen we overstappen op MySQL 5 of PostgreSql. Voorlopig moeten we het dus nog even doen met deze verouderde versie van MySQL.
Mijn vraag is dan ook, hebben jullie ervaring met het ontwerpen van databases met versiebeheer in de tabellen verwerkt? De oplossing die we zoeken moet vrij generiek zijn. Met generiek bedoel ik in dit geval dat het geen beperkingen oplegt in de dagelijkse omgang met de database.
Zelf zijn we heel erg dol op de onderstaande constructie:
SQL:
1
2
3
4
5
6
7
8
9
10
| CREATE TABLE `000IFTests`.`tblContent` ( `ID` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT , `Version` INT UNSIGNED NOT NULL DEFAULT '1', `Type` INT UNSIGNED NOT NULL , `Title` VARCHAR( 80 ) NOT NULL , -- etc. PRIMARY KEY ( `ID` , `Version` ) , INDEX ( `Type` ) -- etc. ) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci ; |
Het nadeel van deze constructie is dat we geen relaties kunnen leggen naar één specifiek content item. Je wordt indirect verplicht om relaties aan één versie te koppelen door de gecombineerde primary key.
De gewenste koppeltabel ziet er ongeveer zo uit:
SQL:
11
12
13
14
15
16
| CREATE TABLE `000IFTests`.`tblContent_Content` ( `Content1` BIGINT UNSIGNED NOT NULL , `Content2` BIGINT UNSIGNED NOT NULL , `RelationType` INT UNSIGNED NOT NULL , PRIMARY KEY ( `Content1` , `Content2` , `RelationType` ) ) ENGINE = InnoDB ; |
Helaas werkt dit niet als er relaties gelegd gaan worden (on delete cascade). Als je namelijk één bepaalde versie uit de tabel Content zou verwijderen, zullen alle relaties uit de tabel tblContent_Content ook verdwijnen ongeacht of er nog een versie van hetzelfde content item in de tabel tblContent bestaat of niet.
Hebben jullie hier ervaring mee? Wat kunnen jullie me aanraden betreft dit onderwerp?
Alvast bedankt voor jullie input!