У меня есть вопрос о дизайне базы данных.
Например, у меня есть одна словарная таблица с именем «Пользователь», и у меня есть другая таблица данных с именем «OperationInfo», таблица данных с несколькими столбцами ссылается на «Пользователь», как
User: OperationInfo:
+-----+------+ +-----+------------- +------------- +------------- +------------- +...
| Id* | Name*| | Id* | CreateUserId*| UpdateUserId*| CreateUserId*| RemoveOperId*|...
+----------- + +-----+------------- +------------- +------------- +------------- +...
| 1 | Jack | | 1 | 1 | 2 | 2 | 1 |...
| 2 | Tom | | 2 | 1 | 1 | 1 | 2 |...
+-----+----- + +-----+------------- +------------- +------------- +------------- +...
Если я хочу получить все имена пользователей, мне нужно присоединиться несколько раз, например
SELECT B1.Name AS CreateUserName
,B2.Name AS UpdateUserName
,B3.Name AS RemoveUserName
,B4.Name AS DeleteUserName
,...
FROM OperationInfo A
JOIN User B1 ON A.CreateUserId = B1.Id
JOIN User B2 ON A.UpdateUserId = B2.Id
JOIN User B3 ON A.RemoveUserId = B3.Id
JOIN User B4 ON A.DeleteUserId = B4.Id
JOIN ...
Несколько раз Присоединиться только для получения имен, Это не хорошо, потому что это Таблица данных имеет более десяти внешнего ключа с таблицей пользователя. У меня есть решение, сохранить имя пользователя в таблице данных, как
OperationInfo:
+-----+------------ +------------- +------------ +------------- +------------ +------------- +...
| Id* |CreateUserId*|CreateUserName|UpdateUserId*|UpdateUserName|RemoveOperId*|RemoveUserName|...
+-----+------------ +------------- +------------ +------------- +------------ +------------- +...
| 1 | 1 | Jack | 2 | Tom | 2 | Tom |...
| 2 | 1 | Jack | 1 | Jack | 2 | Tom |...
+-----+------------ +------------- +------------ +------------- +------------ +------------- +...
, а затем запросить все имена пользователей, как
SELECT A.CreateUserName
,A.UpdateUserName
,A.RemoveUserName
,A.DeleteUserName
,...
FROM OperationInfo A
<Condition>
запрос становится намного проще. Но это не хорошо, избыточность данных , приведет к несоответствию имени таблицы словаря и таблицы данных. Есть ли лучший дизайн? потому что там много столбца избыточности. Я должен делать? очень спасибо.