0

我正在寻找一个灵活的数据库模式。阅读了有关实体组件系统的信息后,它似乎很合适。

例如,文本冒险模式可能是:

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
);

除了链接多个表的潜在性能问题之外,以这种方式建模数据还有哪些其他缺点?

4

0 回答 0