Devo mantenere una manciata di proprietà per diversi giochi nel DB relazionale. Nessun altro tipo di DB può essere utilizzato. Il numero di giochi sarà intorno a 4-5, e il numero di proprietà è (per ora) un po 'piccolo, ma forse crescerà più tardi. È quasi garantito che tutti i giochi avranno le stesse proprietà (stesse "chiavi" da dire, non gli stessi valori). Il mio preferito per ora è questo:
CREATE TABLE GamesProperties
(
propertiesId NUMBER(38,0) NOT NULL,
gameId VARCHAR2(16 CHAR) NOT NULL,
cancelPeriod NUMBER(4,0) DEFAULT 5 NOT NULL,
prizeName VARCHAR2(16 CHAR) NOT NULL,
CONSTRAINT PK_TGP PRIMARY KEY (propertiesId),
CONSTRAINT UC_TGP_gid UNIQUE (gameId)
);
Ma un collega ha detto che nel mio progetto dovremmo modificare la tabella ogni volta che è necessario aggiungere una nuova proprietà (che sono d'accordo) e che preferirebbe vedere qualcosa del genere:
CREATE TABLE GamesProperties
(
propertiesId NUMBER(38,0) NOT NULL,
gameId VARCHAR2(16 CHAR) NOT NULL,
propertyName VARCHAR2(16 CHAR) NOT NULL,
propertyValue VARCHAR2(16 CHAR) NOT NULL,
CONSTRAINT PK_TGP PRIMARY KEY (propertiesId)
);
Nella sua soluzione non dovremmo modificare la tabella in futuro, ma perdiamo informazioni sul tipo di dati di una proprietà che, a mio parere, è uno svantaggio principale.
Mi piacerebbe sapere quali sono altri pro e contro per ciascuna soluzione, in modo da poter prendere una decisione informata sul design che useremo.