Ho "liste" che contengono oggetti diversi a volte con classi simili, a volte con classi diverse.
Quindi ho una tabella "liste" per memorizzare una lista. Ho una tabella 'strange_objects' per memorizzare uno strano oggetto e una tabella 'regular_object' per memorizzare un oggetto regolare.
Ora voglio che una lista abbia diversi oggetti in ordine. Quale schema avrebbe più senso?
Stavo pensando alla lista che ha list_objects (con un ordine, type e type_id) per fare riferimento all'oggetto in quella posizione nella lista. Tuttavia sono un po 'insicuro se questa sarebbe una bella struttura dato che ho sempre bisogno di fare un join se voglio solo recuperare tutti gli oggetti per un elenco o ottenere tutti gli' oggetti regolari 'nel mio elenco.
Quale struttura consiglieresti di conservare i miei oggetti?
Quello che stavo pensando è il seguente (gli FK erano rimasti fuori per ora)
-- Create syntax for TABLE 'list_items'
CREATE TABLE 'list_items' (
'id' int(11) unsigned NOT NULL AUTO_INCREMENT,
'order' int(11) NOT NULL,
'list_id' int(11) unsigned DEFAULT NULL,
PRIMARY KEY ('id')
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- Create syntax for TABLE 'lists'
CREATE TABLE 'lists' (
'id' int(11) unsigned NOT NULL AUTO_INCREMENT,
'name' varchar(11) COLLATE utf8mb4_bin NOT NULL DEFAULT '',
PRIMARY KEY ('id')
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- Create syntax for TABLE 'regular_objects'
CREATE TABLE 'regular_objects' (
'id' int(11) unsigned NOT NULL AUTO_INCREMENT,
'list_item_id' int(11) DEFAULT NULL,
'name' varchar(100) COLLATE utf8mb4_bin DEFAULT NULL,
'question' varchar(100) COLLATE utf8mb4_bin DEFAULT NULL,
PRIMARY KEY ('id')
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- Create syntax for TABLE 'strange_objects'
CREATE TABLE 'strange_objects' (
'id' int(11) unsigned NOT NULL AUTO_INCREMENT,
'list_item_id' int(11) DEFAULT NULL,
'duration' int(11) DEFAULT NULL,
'data' mediumblob,
PRIMARY KEY ('id')
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;