Database design 基本数据库设计问题

Database design 基本数据库设计问题,database-design,Database Design,请随时为我的任何想法提供改进 我的目标是让多个用户运行一个桌面程序,该程序将信息传递给php脚本,然后php脚本将信息写入数据库。无需担心桌面应用程序的细节 我的问题是: 1) 这种方法有效吗?或者php脚本将数据写入文本文件,然后cron作业每分钟调用一个php脚本来处理文本文件会更好吗 2) 当我推出桌面应用程序的版本2时,如何调整数据库以处理新的更改?例如,假设程序的v1只发送一个变量。然后程序的v2发送两个变量。我无法确保所有用户都升级到版本2。因此,如果用户仍在使用版本1,php脚本是

请随时为我的任何想法提供改进

我的目标是让多个用户运行一个桌面程序,该程序将信息传递给php脚本,然后php脚本将信息写入数据库。无需担心桌面应用程序的细节

我的问题是: 1) 这种方法有效吗?或者php脚本将数据写入文本文件,然后cron作业每分钟调用一个php脚本来处理文本文件会更好吗

2) 当我推出桌面应用程序的版本2时,如何调整数据库以处理新的更改?例如,假设程序的v1只发送一个变量。然后程序的v2发送两个变量。我无法确保所有用户都升级到版本2。因此,如果用户仍在使用版本1,php脚本是否应该将一个变量数据写入数据库,而将另一个变量留空

另一种情况是,在版本2中,我决定需要更改原始变量?我该怎么处理


任何意见都将不胜感激

您喜欢创建富客户端。我不明白你为什么选择php。如果您想要客户端服务器应用程序,我将看到以下选项:

  • 桌面应用程序直接访问中央数据库
  • 桌面应用程序与web服务通信以隐藏数据库详细信息(例如版本控制)
  • 您让php使用db完成所有工作,并使用浏览器而不是桌面应用程序
处理第二点时,应该考虑使用事务。它们保证每次数据的一致性。

创建一个版本化的web服务API并使用它


请注意版本控制上的emphisis。

PHP脚本的效率将取决于几个因素,包括它的编写情况和数据库的结构。特别注意索引;它们大大加快了读取速度,但同时也降低了写入速度——有时甚至是戏剧性的


在我有理由更改之前,我会一直使用实时更新。如果事情做对了,客户机不会注意到任何一种情况(除了看到数据更改的延迟,如果他们能够看到的话)。

PHP的一个原因是,如果有人可以直接连接到数据库,他们已经拥有了比任何客户机都应该拥有的更多的访问权限。任何能在应用程序中找到DB连接字符串的人都可以随意插入大量虚假数据,可能会破坏一切。一个PHP脚本,或者服务器上运行的其他服务,会使这变得更加困难,因为数据在存储之前更容易被检查。作为参考,PHP脚本可以是一个web服务。php脚本只接收数据,并在添加到数据库之前为我提供过滤数据的选项。这也意味着我不必将数据库的详细信息硬编码到桌面应用程序中。我应该为数据库使用什么地址。例如,如果我的Web服务器是google.com,我不应该也使用google.com作为我的数据库地址,因为如果我希望我的Web服务器在一台计算机上,而我的数据库在另一台计算机上,我以后就无法将两者分开,对吗?那么我应该使用什么地址呢?web服务器为google.com,数据库为database.google.com?数据库没有URL。通常,所有公共数据库都由所谓的连接字符串访问。你心目中的数据库是mysql、postgres还是NoSql db?@Steve:数据库服务器的地址将是你的网络主机所说的任何内容(假设你不使用一个不包括数据库的蹩脚网络主机)。不管它是什么,只要你知道它,因为你的用户永远不应该以任何方式直接连接到它。我从来没有读过这方面的任何内容,所以我恐怕没有链接。我只是从经验中知道,必须对API进行版本控制。我对这个问题的回答可能会对您有所帮助。这听起来很简单,但我很清楚。。。我的程序版本1应该有www.example.com/v1.php,版本2应该有www.example.com/v2.php?这会创建一个版本化的API吗?php脚本可以处理对同一数据库的写入?实际上,我可能会做一些类似于www.example.com/api/v1/XXXX.php的事情。。。。到www.example.com/api/vN/XXXX.php。但话虽如此,也许你应该问另一个问题,关于web api版本的最佳方法。Api和版本控制都非常重要,你不想把它搞砸,或者你可能会在产品的生命周期中陷入困境,或者使用一个不可用的api。我在写这篇文章时考虑了这个问题:我没有太多优化数据库的经验,所以我只打算使用标准的mysql安装,并使用一组表和键来保持数据的规范化。然后我会边走边学。看钥匙。它们暂时还可以,但是如果你不小心的话,你可能会发现MySQL更新索引的时间比更新实际表的时间要多。