帮助表格规范化

Mar*_*ark 0 database database-design normalization relational-database

非常感谢有关规范化和优化此表'table1'的帮助.我目前可以执行以下查询:

SELECT user AS users
FROM table1
WHERE project='Project B'
AND doctype='DocType B'
Run Code Online (Sandbox Code Playgroud)

并得到我想要的东西,但我觉得它不是很有效率,并希望得到如何改进的帮助(有解释).

最终我试图实现以下目标:
1)将这1个表分成多个表以便于维护
2)给定'project'和'doctype',返回所有用户

表格1:

project     doctype     user
-------     -------     ----
Project A   DocType A   User A
Project A   DocType A   User B
Project A   DocType A   User C
Project A   DocType A   User D
Project A   DocType B   User A
Project A   DocType B   User C
Project A   DocType B   User D
Project A   DocType C   User B
Project A   DocType C   User D
Project B   DocType A   User B
Project B   DocType A   User E
Project B   DocType A   User F
Project B   DocType A   User G
Project B   DocType B   User A
Project B   DocType B   User C
Project B   DocType B   User E
Project B   DocType B   User H
Project B   DocType C   User A
Project B   DocType C   User I
Run Code Online (Sandbox Code Playgroud)

如果需要更多信息,请告知我们.谢谢.

Jon*_*ler 5

由于表是"全键"的,并且由于没有重复,因此没有明显的方法通过规范化来减少表.

有时(但不是在这种情况下)您可能能够创建3个具有列对的表:PD,PU和DU(使用列的首字母来形成表名).但是,由于用户A与项目A上的DocType A相关联,但与项目B上的DocType A不相关,因此在此示例中不起作用.


Bil*_*win 5

规范化不是为了便于维护而拆分表.关于提高绩效也没有正常化.它是以关系方式表示逻辑事实,以最小化冗余和数据异常.如果您想要正确了解规范化,请阅读CJ Date的SQL和关系理论.

我坚持使用单个表,但添加一个索引.某些品牌的RDBMS支持仅索引查询,即如果查询可以在索引数据结构中检索所需的列,则可以跳过完全查询基表.Microsoft SQL Server和MySQL是支持仅索引查询的数据库的显着示例.

所以我建议在三列(项目,文档类型,用户)上创建索引,看看是否可以提高查询性能.