我正在寻找一个灵活的数据库模式。阅读了有关实体组件系统的信息后,它似乎很合适。
例如,文本冒险模式可能是:
CREATE TABLE entities (
en BIGSERIAL NOT NULL PRIMARY KEY, -- entity number
...
);
CREATE TABLE containers (
en BIGINT NOT NULL PRIMARY KEY REFERENCES entities,
...
);
CREATE TYPE prep AS ENUM ('in', 'on', 'behind', 'under', 'worn', 'held');
CREATE TABLE located (
en BIGINT NOT NULL PRIMARY KEY REFERENCES entities,
prep prep NOT NULL DEFAULT 'in',
container_en BIGINT NOT NULL REFERENCES containers,
...
);
CREATE TABLE rooms (
en BIGINT NOT NULL PRIMARY KEY REFERENCES entities,
name VARCHAR NOT NULL,
descr VARCHAR NOT NULL,
...
CONSTRAINT fk_r2c FOREIGN KEY (en) REFERENCES containers -- all rooms are containers
);
CREATE TABLE items (
en BIGINT NOT NULL PRIMARY KEY REFERENCES entities,
name VARCHAR NOT NULL,
...
CONSTRAINT fk_i2l FOREIGN KEY (en) REFERENCES located -- all items are located somewhere
);
除了链接多个表的潜在性能问题之外,以这种方式建模数据还有哪些其他缺点?