是否动态创建表

时间:2013-03-07 15:53:13

标签: mysql

我已经回顾了一些q& a,但认为某些特定于我的主题会帮助我摆脱困境。

我有一个应用程序,可根据几种不同的公式和数百种不同的材料类型计算定价。

  

用户A可以使用公式A和材料A,B,C

     

用户B使用公式A和他们想要添加的材料A,B,C,+   没有其他人使用的材料材料unique_A

当用户A在应用程序上时,他不希望看到用户B的独特资料。

我正在考虑为每个用户使用一个独特的材料表,以便“更快,更高效???获取材料列表,而不是尝试设置某种关闭功能只从一个全局表中获取用户想要的材料。

哪种方式更好?每个用户有一个表或一个唯一的表吗?

3 个答案:

答案 0 :(得分:2)

您可以拥有所有材料的表格。

  materials = (id, name, other attributes...)

和一个用户表:

  myusers = (id, name, etc....)

然后你可以有一个表基本上代表这两者之间的多对多关系:

  user_materials = (user_id, material_id)

然后,您可以通过加入这些表来选择用户使用的特定材料。应用方面,这种安排比尝试为每个用户创建一个表更好。查询将变得困难。这样你也可以回答这个问题:哪些用户正在使用材料A?

答案 1 :(得分:0)

除非您的用户非常少,每个用户都有自己的稳定不变项, 这样做我没有任何意义。 此外,您很可能不会遇到性能问题 如果你在谈论用户和材料的领域。 它不像数百万,对吗?

答案 2 :(得分:0)

数据库的一个“最佳实践”是减少信息的两面性。实际上,对于任何理论领域都存在变化。

然而,这意味着每个用户使用一个唯一表格的方法不是一个好主意。 它不仅会复制数据,而且随着用户数量的增加,维护这样一个数据库将成为一项巨大的任务。

我更希望有一个全球材料表,一个用户表和一个用户想要哪些材料的表。

'one-table-approach'可以被认为是更好的,因为它降低了数据库和应该访问数据库的代码以及信息重复的复杂性。