Да, я бы сказал, что это противоречит правилам создания чистых баз данных, поскольку данные , которые у вас есть, повторяются , поэтому вы должны активно постоянно поддерживайте два набора данных , опасаясь, что они не синхронизированы. Если вы этого не сделаете, вы не можете доверять данным. :)
В качестве примечания: Вы говорите, что делаете это по соображениям производительности? Какие преимущества вы видели в этом? Поскольку независимо от того, из какой таблицы вы получаете доступ к данным, вы должны обнаружить (с правильными индексами), что разница очень мала? Возможно, здесь вы решаете не ту проблему, и, возможно, сначала нужно рассмотреть другие вещи (например, индексы, улучшение запросов и т. Д.).
Редактировать: Выбор свободных символов должен быть достаточно легким, поскольку вы могли бы избавиться от character_id
из таблицы пользователей и иметь только user_id
в одном символе:
Users: user_id, name, age
Characters: character_id, shape, user_id
Тогда вы сможете выполнить несколько таких запросов:
//something like this to query for free characters.
SELECT * FROM characters WHERE user_id IS NULL;
// To access a list of a users characters, you could do something like this:
SELECT * FROM characters WHERE user_id = 42;
// More information about the user, while still grabbing character info.
SELECT * FROM characters AS c INNER JOIN users AS u ON u.user_id = c.user_id WHERE u.user_id = 42;
Или в вашей модели есть еще что-то, чего мне, возможно, не хватает с этим? (Как я не притворяюсь, что знаю расположение вашей базы данных;)). Я предполагаю, что отношение один-ко-многим, как это выглядит (один пользователь может иметь много символов).