我正在考虑使用字符串作为数据库表中的键来提高效率。我在我的应用程序中有一个名为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
在第一个的情况下,缺点是您必须为命令键字符串存储更多字符。如果你有1000多个命令和多个角色,这可能会成为一个空间问题。
第二个问题的缺点是你必须在3个表之间创建连接。
两者之间哪一个更合适(如果实际上有更好的方式):使用更多空间或连接3个表。
答案 0 :(得分:1)
加入表的主键通常相当便宜。所以我希望第二种方法在大多数DBMS中更有效,但由于你没有指定你正在使用的DBMS,所以很难给出明确的答案。
另外,我认为无论出于何种原因,第二种选择更常用。我可以明确地说,如果您决定更改角色的名称或命令键的字符串,第二个选项将更易于管理。
由于所有这些原因,我建议使用第二种选择。