Q1: Нет. Я не вижу смысла таблицы tags
.Кажется, ничего не значит.Если вы не можете объяснить семантическое значение строки в этой таблице (что представляет запись в этой таблице в реальном мире?), То, вероятно, она не принадлежит.Я подозреваю, что это только там, чтобы дать вам auto_increment
, который не был бы хорошим ответом.Вы можете назначить свои собственные идентификаторы.
Q2: уже ответил.
Я также не вижу, для чего нужны tag_translation_id
и tag_relationship_id
.Обычное использование auto_increment
?
Я думаю, что я бы сделал для базовой структуры:
create table tag_translations (
tag_id int not null,
language_id int not null,
tag_name varchar(255),
primary key (tag_id, language_id)
);
create table tag_relations (
tag_id int not null,
solution_id int not null,
primary key (tag_id, solution_id)
);
К которой я бы добавил метаданные и индексы по мере необходимости.Два индекса столбцов очень хороши для соединений, таких как tag_relations
, потому что серверная оптимизация «Использование индекса»:
Использование индекса
Информация о столбцеизвлекается из таблицы с использованием только информации в дереве индексов без необходимости дополнительного поиска для чтения фактической строки.Эту стратегию можно использовать, когда в запросе используются только столбцы, являющиеся частью одного индекса.
Кстати, для интернационализированных систем 255 не является магическим числом для длины поля varchar
, если только вы не 'придерживаться однобайтовых кодировок.Если вы используете UTF-8, посмотрите руководство и подумайте, особенно если вы собираетесь проиндексировать этот столбец.