Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 大型可扩展应用程序的数据库表结构_Php_Mysql_Sql_Database_Laravel - Fatal编程技术网

Php 大型可扩展应用程序的数据库表结构

Php 大型可扩展应用程序的数据库表结构,php,mysql,sql,database,laravel,Php,Mysql,Sql,Database,Laravel,我是一名软件工程师(从几个月前开始准备学习),为了我的工作,我开发了一个大型可伸缩的web应用程序。另一家公司从事编程工作,并制作其背后的数据库。我们定义了数据以及它们之间的关系,但没有给出它们应该使用的硬数据库结构 现在第一个(内部)事物是可见的。我查看了ans背后的数据库结构(在我看来)发现了一些奇怪的东西 对于用户,他们创建了一个表users,其中包含id、电子邮件和密码等内容。在这附近,他们创建了一个包含id、key和value的user_元表 当我有一个用户具有: 用户ID 电子邮件

我是一名软件工程师(从几个月前开始准备学习),为了我的工作,我开发了一个大型可伸缩的web应用程序。另一家公司从事编程工作,并制作其背后的数据库。我们定义了数据以及它们之间的关系,但没有给出它们应该使用的硬数据库结构

现在第一个(内部)事物是可见的。我查看了ans背后的数据库结构(在我看来)发现了一些奇怪的东西

对于用户,他们创建了一个表users,其中包含id、电子邮件和密码等内容。在这附近,他们创建了一个包含id、key和value的user_元表

当我有一个用户具有:

  • 用户ID
  • 电子邮件
  • 密码
  • 名字
  • 姓氏
  • 地址
  • 电话
id、电子邮件和密码存储在用户表中。对于其他信息,是在user_meta表中创建的行。这意味着在本例中,为1个用户创建了4行(在我们的示例中,每个用户的行数超过20行)此结构是每个对象的用户,应该在数据库中保存什么

我学会了创建一个包含用户所需的所有数据的表。所以在我的逻辑中,它应该是一个包含7个字段的表


额外资料:

  • 我们的软件基于Laravel框架(根据我的建议)
  • 我们的软件使用MySQL数据库

问题:

  • 这是为大型系统或类似系统创建数据库的正常方法吗?因为我在研究或其他项目中从未见过这种方法
  • 这是最好的做法还是不好的做法
  • 在我看来,这对性能不好。尤其是当用户数量增加时,这是真的吗?或者可以这样做以获得高性能(因为不需要选择一个完整的记录?(在我们的情况下,我们预计2017年底至少有10万用户,当我们的项目通过时,这将增长得越来越快。几年内,我们的用户数将远远超过1.000.000)
  • 我认为他们这样做的原因是“对象”可以很容易地更改,但在我看来,向表中添加字段始终是可行的,并且永远不应该删除字段(在数据库结构允许的情况下也是如此),我的意见是对的吗
抱歉,当问题是“noob问题”时,但对我来说,这是我生活中的第一个大项目,因此我错过了一些经验,但尝试专业地管理该项目。我们将在本周三的会议上讨论。通过这种方式,我想在这个主题上为自己做一些准备

在我看来,这对性能不好。特别是当用户数量增加时,这是真的吗

没有

插入/更新成本存在微小差异,这不取决于之前累积的数据量。完整记录的检索成本将更高,但部分记录的检索成本将略有降低。在一天结束时,只要记录仍在单轮tri中解决,性能差异可以忽略不计p到DB(不同于许多琐碎的ORM实现)

最大的影响是功能性的。比如说,它不需要为EAV表添加title属性,但是在扩展表以容纳更宽的记录(或迁移行)时,规范化表可能会脱机.o您不能像每个客户都必须有电子邮件地址那样在数据库层强制实施约束

这是最好的做法还是不好的做法

虽然不记录设计决策是不好的做法

几年内用户数量远远超过1.000.000


一百万条记录并不多(除非数据库设计真的很糟糕).

为什么在不到5分钟的时间内a-1?我没有详细描述我的问题吗?我不认为这个问题应该被否决。大多数人会告诉你,这是一个糟糕的方法,搜索实体属性值或一个true-lookup-table。再次感谢0上的+so iam,我编辑了我的问题并发布了新的内容:-(所以现在它有一个副本,很抱歉…,我会搜索你的关键词,谢谢你的提示。你存储额外信息的方法叫做EAV,就像@dnoeth提到的那样。这并不坏,但大多数人会说是-他们是白痴,只看到了问题的一半。但是,还有一个替代方法-使用EAV(或您拥有的元表),您可以使用MySQL 5.7的
JSON
数据类型,并以
JSON
的形式为用户存储额外的数据。与生活中的一切一样,解决这个问题的每一种方法都有其起伏。而且,对于当今的硬件来说,一百万条记录确实很小——在我的工作中,我们处理的数据是数十个数据库的一百万倍,而且效果非常好。