2013-04-25 70 views
0

与大多数开发人员一样,我认为我一直在努力创建最优化的代码和数据库模式。PHP极客需要数据库设计帮助

但是 - 我有感觉,我在工程我的数据库架构,我想创建。

我有一个网络应用程序,在很短的时间内,会有很多用户。用户以客户,供应商和系统用户的形式出现。它在一个可能快速增长的行业。

在之前的模式中,我将这些用户分隔在不同的表中。

不过,我现在正在考虑让一张叫做:PEOPLE的表走下去。

会有这些表:

人, 联系方式, 公寓

它们通过数据透视表,即相关: PivotContacts PivotResidences。

我的问题是这被认为是好的/坏的设计。 我在想什么,通过设计一个简单的设置。

表格人员将成指数增长,并将保存大量数据 - 其他表格将与其相关。

我真的很欢迎意见。

我的设计可以扩展到10万条记录并保持适中的速度。 *最初将以1000条记录开始,并可能在1年内增至约100,000条。

+0

有多少是“很多”?成千上万的?数十万?百万?十亿?您如何评估“好”和“坏”解决方案?你会申请什么标准?人们投票结束你的问题,因为你需要意见 - 重新提出问题以将其转化为事实问题,例如“我的设计可以扩展到1亿条记录吗?”或者“我怎样才能处理使用这种设计的模式变化?”你可能会得到更有用的答案。 – 2013-04-25 09:08:18

+0

将我的设计缩放到10万记录并保持适中的速度。 *最初将以1000条记录开始,并可能在1年内增至约100,000条。 – user2007960 2013-04-25 09:21:26

+0

这个问题可能更适合http://programmers.stackexchange.com。 – 2013-04-25 10:00:35

回答

1

对于可以登录并且可能被跟踪(最后一次登录,失败的密码重试)的用户,最好有一个小表和可能用于写入的单独表(区分读写数据)。

任何与人有关的表都有收集大量字段的倾向。保留在不同表格中的功能区别保持数据整洁,在供应商表格上的索引更好/可能更优化,以及对供应商数据的更改。 SQL JOIN是可管理的,可以用SQL视图完成。

因此,我会去一个瘦基表人和1:1表SupplierPeople,SystemUsingPeople等。并考虑发生了哪些变化:表更新,插入和读取的频率。

也考虑不得不修改数据库方案,添加一个字段。

0

如果您只是担心解决方案的可扩展性,100K记录不是一个特别大的数字,但需要遵守一些(重要的)假设。

现代数据库软件(我假设你要使用MySQL,你说你是一个PHP手)在现代硬件上运行可以轻松地处理数据库与数百万条记录,只要你有一个精心设计的表布局,并可以使用索引。

你的设计 - 连接“人”到“联系人”和“住宅”可以使用主/外键的加入;这应该可以轻松扩展到您的要求。

虽然我猜你需要能够按名称,地址,城市或上次联系人搜索“人员”日期等这表明你可能需要free text searching - 一旦你得到大量的记录,使用where name like '%Jones%'可能会很慢。

您可能还想考虑存档/历史策略 - 您是否需要存储某人住所的历史记录(以便您可以在下订单时找到他们居住的地方)?