Hi,
wenn ich mir die Umsetzung einer kleinen Buchdatenbank (der Einfachheit halber mit nur einem Autor pro Buch) so überlege, komme ich in etwa zu folgenden Tabellen:
Code:
CREATE TABLE `autoren` (
`AutorID` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
`AutorName` VARCHAR(50) NOT NULL,
PRIMARY KEY (`AutorID`)
INDEX (`AutorName`),
) ENGINE InnoDB DEFAULT CHARSET latin1 COLLATE latin1_german2_ci
CREATE TABLE `buecher` (
`BuchID` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
`AutorID` MEDIUMINT NOT NULL,
`BuchName` VARCHAR(100) NOT NULL,
`Beschreibung` TEXT NOT NULL,
PRIMARY KEY (`BuchID`),
INDEX (`AutorID`),
INDEX (`BuchName`),
FOREIGN KEY (`AutorID`) REFERENCES `autoren` (`AutorID`) ON DELETE CASCADE
) ENGINE InnoDB DEFAULT CHARSET latin1 COLLATE latin1_german2_ci
Nun schätze ich die Funktionalitäten von InnoDB sehr, also die Fremdschlüsselbeschränkungen und die Möglichkeit von Transaktionen.
Wie kann ich aber jetzt eine Volltextsuche realisieren? Muss ich Abschied von InnoDB nehmen und alles in MyISAM konvertieren. Und selbst wenn, dann ist eine Volltextsuche über zwei Tabellen noch immer ineffizient.
Wie löst ihr so ein Problem?
Bis jetzt kam mir nur der Gedanke, aus dem vorhandenen Tabellensystem per Cron-Job alle sounsoviel Stunden eine einzige MyISAM-Tabelle zu generieren, die dann nur für die Volltextsuche verwendet wird, also so a la
Code:
CREATE TABLE `autoren_buecher` (
`BuchID` SMALLINT UNSIGNED NOT NULL,
`AutorName` VARCHAR(50) NOT NULL,
`BuchName` VARCHAR(100) NOT NULL,
`Beschreibung` VARCHAR(100) NOT NULL,
UNIQUE (`BuchID`),
FULLTEXT (`AutorName`, `BuchName`, `Beschreibung`)
) ENGINE MyISAM DEFAULT CHARSET latin1 COLLATE latin1_german2_ci
Aber ist das Weisheit letzter Schluss?