Несколько сопоставлений OneToMany - одна таблица или несколько таблиц сопоставления - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть приложение Spring Boot, и я обрабатываю локализацию с помощью OneToMany отображений (есть много динамически генерируемых текстов, поэтому у меня есть индивидуальный подход к локализации). Локализованные тексты сохраняются как объект в базе данных:

@Entity
@Table(name = "localized_texts")
@Getter
@Setter
public class LocalizedText {

    @Id
    @Column(name = "text_id", updatable = false, nullable = false)
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @Column(name = "lang", nullable = false)
    private String lang;

    @Column(name = "text", nullable = false)
    private String text;

}

Все объекты, которые используют этот локализованный текст, имеют одностороннее OneToMany отображение:

@OneToMany(cascade = CascadeType.ALL)
@MapKeyColumn(name = "lang")
@JoinColumn(name = "item_description")
private Map<String, LocalizedText> description;

и в своей схеме базы данных я сопоставляю их с внешними ключами:

DROP TABLE IF EXISTS localized_texts;
CREATE TABLE localized_texts (
    text_id BIGINT AUTO_INCREMENT,
    lang VARCHAR(4) NOT NULL,
    text VARCHAR(1024) NOT NULL,
    item_description VARCHAR(16),
    ... many foreign keys
    PRIMARY KEY (text_id),
    CONSTRAINT localized_text_item_description_fk FOREIGN KEY (item_description) REFERENCES item_descriptions (identifier),
    ... many constraints
);

Это отлично работает, но я не уверен, что это самый эффективный подход. Допустим, существует более 20 сущностей, которые используют такое отображение, и моя таблица localized_texts становится очень широкой (много столбцов с внешними ключами). Будет ли использование таблицы соединений более эффективным для каждого сопоставления вместо сопоставления всего в одной таблице? Или я просто делаю преждевременную оптимизацию?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...