Я обдумываю эффективность использования строки в качестве ключа в таблице базы данных. В моем приложении есть абстрактный класс Command с командным ключом, жестко запрограммированным в производном классе, например, CREATE_ADMIN_USER или DELETE_NEWS_POST.
Существует некоторая конфигурация, которую я хотел бы сохранить в базе данных, например, какие роли могут выполнять эти команды.
Что было бы более эффективным:
CommandKey | Role
--------------------------
CREATE_ADMIN_USER | GodUser
DELETE_NEWS_POST | Admin
DELETE_NEWS_POST | Editor
OR
ID| CommandKey
--------------------------
1 | CREATE_ADMIN_USER
2 | DELETE_NEWS_POST
ID | Role
--------------------------
1 | GodUser
2 | Admin
3 | Editor
CommandKeyID | RoleId
---------------------
1 | 1
2 | 2
2 | 3
В случае с первым, недостатком является то, что вам нужно хранить больше символов для строки командной клавиши. Это может стать проблемой пространства, если у вас есть тысячи команд и несколько ролей для многих из них.
Вторым недостатком является то, что вам нужно создать соединение между 3 таблицами.
Какой из них будет предпочтительнее между двумя (если на самом деле предпочтительный способ): используйте больше места ИЛИ объедините 3 таблицы.