我是一名软件工程师(因为我的学习已经准备了几个月),为了我的工作,我开发了一个大型可扩展的Web应用程序。另一家公司负责编程工作并将数据库置于其后。我们定义了数据和它们之间的关系,但没有给出应该使用的硬数据库结构。
现在第一个(内部)事物是可见的。我查看了ans后面的数据库结构(在我看来)有些奇怪的东西。
对于用户,他们创建了一个表用户,其中包含id,email和password等内容。在此附近,他们创建了一个user_meta表,其中包含id,key和value。
当我有一个用户:
id,email和密码存储在用户表中。对于其他信息,是在user_meta表中创建的行。这意味着在这种情况下,为1个用户创建了4行(在我们的例子中,每个用户超过20行)此结构是每个对象的用户,应该保存在数据库中。
我学会了创建一个包含用户所需的所有数据的表。所以在我的逻辑中它应该是一个包含7个字段的表...
额外信息:
问题:
答案 0 :(得分:0)
在我看来,这对性能不利。特别是当用户数量增长时,这是真的吗?
没有
插入/更新成本存在微小差异,这与先前累积的数据量无关。 完整记录的检索成本会更高,但对于部分记录会略微降低。在一天结束时,只要记录仍然在DB的单次往返中得到解决,性能差异可以忽略不计(与许多简单的ORM实现不同)。
最大的影响是功能性的。它没有努力为EAV表添加标题的属性,但是规范化的表可能会被淘汰,同时表被压缩以容纳更宽的记录(或者行被迁移)。 OTOH您无法在数据库层强制执行约束,因为每个客户都必须拥有电子邮件地址。
这是最好还是坏的做法
本身也不是。虽然不记录设计决策是不好的做法。
百万条记录不是很多(除非数据库设计非常糟糕)。远远超过1.000.000用户几年