这是我previous question的后续行动。
假设我有一张表
app
来存储应用程序商店中有关应用程序的信息:
+--------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| id | varchar(36) | NO | PRI | NULL | |
| name | varchar(255) | YES | | NULL | |
| developer | varchar(255) | YES | | NULL | |
| description | varchar(255) | YES | | NULL | |
| icon | varchar(255) | YES | | NULL | |
| teaser | varchar(255) | YES | | NULL | |
| screen_shots | varchar(255) | YES | | NULL | |
| support | varchar(255) | YES | | NULL | |
+--------------+--------------+------+-----+---------+-------+
现在我需要在应用程序信息中添加翻译和版本控制。据我了解,有些字段是可翻译的,有些字段是版本化的,有些字段是可翻译和版本化的,有些字段是不可翻译和非版本化的,如下表所示。
+--------------+--------------+------------+
| Field | Translatable | Versioned |
+--------------+--------------+------------+
| id | No | No |
| name | No | No |
| developer | No | No |
| description | Yes | No |
| icon | No | Yes |
| teaser | Yes | Yes |
| screen_shots | Yes | Yes |
| support | Yes | No |
+--------------+--------------+------------+
所以我想创建新表 app_translation、app_version 和 app_translation_version
CREATE TABLE app_translation (
id VARCHAR(36) PRIMARY KEY,
language_code VARCHAR(10),
app_id VARCHAR(36),
description VARCHAR(255),
support VARCHAR(255),
FOREIGN KEY (app_id) REFERENCES app(id)
);
CREATE TABLE app_version (
id VARCHAR(36) PRIMARY KEY,
version VARCHAR(10),
app_id VARCHAR(36),
icon VARCHAR(255),
FOREIGN KEY (app_id) REFERENCES app(id)
);
CREATE TABLE app_version_translation (
id VARCHAR(36) PRIMARY KEY,
version VARCHAR(10),
language_code VARCHAR(10),
app_id VARCHAR(36),
teaser VARCHAR(255),
screen_shots VARCHAR(255),
FOREIGN KEY (app_id) REFERENCES app(id)
);
现在我需要连接所有这四个表来检索应用信息的单个实例……
是否有意义 ?这个新的检索会比只使用 select 的旧检索慢吗?你会建议改变这个模式吗?