Эффективность между использованием строки в качестве ключа таблицы и разбиением ее на две таблицы - PullRequest
0 голосов
/ 20 января 2012

Я обдумываю эффективность использования строки в качестве ключа в таблице базы данных. В моем приложении есть абстрактный класс 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 таблицы.

1 Ответ

1 голос
/ 20 января 2012

Соединения по первичному ключу таблицы обычно довольно дешевы. Поэтому я ожидаю, что вторая альтернатива будет более эффективной в большинстве СУБД, но поскольку вы не указали, какую СУБД вы используете, трудно дать однозначный ответ.

Кроме того, я считаю, что вторая альтернатива используется гораздо чаще по любой причине. И я могу однозначно сказать, что второй вариант будет гораздо более управляемым, если вы решите изменить имя роли или строку клавиши управления.

По всем этим причинам я рекомендую второй вариант.

...