Зависит от того, хотите ли вы когда-нибудь изменить глобальный текст тега. Вы, конечно, могли бы выполнить широкий UPDATE
для Article_Tag
, но если вам нужно это сделать, то возможность просто обновить значение в Tag
будет проще. Некоторые серверы предлагают автоматические обновления (например, ON UPDATE CASCADE
в SQL Server), но они не обязательно дешевы (все равно приходится UPDATE
много строк и любые заданные индексы).
Но если вам это не нужно, то с литералом в Article_Tag
он должен быть немного быстрее, поскольку он может удалить соединение - много раз. Очевидно, индексировать это и т. Д.
Дополнительное пространство, необходимое для повторного литерала, является фактором, но дисковое пространство обычно дешевле, чем более быстрый сервер.
Что касается первичного ключа; если у вас нет других данных для хранения, зачем вам такая таблица? Вы можете использовать DISTINCT
на Article_Tag
так же легко, особенно если индексировать Tag
(так что это должно быть довольно дешево). ( edit Билл Карвин правильно указывает на то, что можно хранить допустимых тегов, а не только текущих тегов).