我有一个包含多个表的数据库。
这个多表与单个名称相关,例如..
Table 1 contains name of the person, joined date,position,salary..etc
Table2 contains name of the person,current projects,finished,assigned...etc
Table 3 contains name of the person,time sheets,in,out,etc...
Table 4 contains name of the person,personal details,skill set,previous experiance,...etc
所有表格都包含50000 names
以及它们的详细信息。
所以我的问题是所有表都包含与名称相关的信息说Jose20856
这个名字是所有4个表的唯一索引。当我搜索Jose20856
时,所有四个表都会将结果和输出提供给前端软件/ html。
所以我需要保留多个表或组合到一个表??
如果是的话
CASE 1
Single table -> what are the advantages? will result will be faster? what about the system resource usage?
CASE 2
Multiple table ->what are the advantages? will result will be faster? what about the system resource usage?
由于我是MySQL新手,我想提出宝贵的意见继续前进
答案 0 :(得分:1)
在网上阅读有关数据库规范化的信息。
E.g。 http://en.wikipedia.org/wiki/Database_normalization
我认为你甚至可以添加更多表格。这一切都取决于数据和关系。
Table1 = users incl. userdata
Table2 = Projects (if multiple users work on the same project)
Table3 = Linking user to projects (if multiple users work on the same project)
Table4 = Time spent? Contains the links to the user and to the project.
我认为您的表4可以合并到表1中,因为它还包含特定于1个用户的数据。
你可以做的更多,但正如已经说明的那样,所有这些都取决于关系。
答案 1 :(得分:1)
您可以将这些组合到一个表中,但前提是它有意义。很难判断表中的关系是一对一还是一对多,但似乎是一对多。例如表1中的单个员工应该能够在其他表中拥有多个项目,技能和时间表。这些都是一对多的关系。
所以,保持多表设计。您还应该考虑为员工使用基于整数的主键而不是名称。使用此pkey作为其他表中的fkey,您将看到性能改进。 (还要考虑你想要更改名称时需要做的工作量。你必须更改所有表中的所有名称。如果你使用代理键,那么int pkey,如上所述,你只需要必须更新一行。)
答案 2 :(得分:1)
我们在这里讨论的是垂直table partitioning(与水平表分区相对)。它是一种有效的数据库设计模式,在这些情况下非常有用:
joined date,position,salary
和列personal details,skill set,previous experiance
,那么将这些列移到分隔表是有意义的,因为它(可能)会提高访问这些列的性能最常用的。在MySQL中,在TEXT和BLOB列的情况下尤其如此,因为它们与文件的其余部分分开存储,因此访问它们需要更多时间。最后但并非最不重要。我建议使用数字字段作为连接所有这些表的键,而不是字符串。
Additional reading aboout MySQL partitioning(有点过时,因为MySQL 5.5添加了一些新功能)