【发布时间】:2015-12-27 20:15:22
【问题描述】:
我正在用 php 制作预订系统。我目前正在就在数据库中存储项目的最佳方式提出一些建议。我目前有 3 张桌子:
Table 1 = Hire Stock (Primary Key = asset_id)
(包含特定于项目的字段,例如尺寸、重量、功耗
Table 2 = Project (Primary Key = project_id)
(包含项目开始日期、结束日期、客户名称。)
Table 3 = availability (Primary Key = asset_id)
(每次将项目添加到项目时,它都会与项目 ID 一起存储在这里)
我需要能够搜索库存中的每件物品,并在需要时检查它是否可供出租。如果我必须遍历比较日期范围的每个项目,那将需要很长时间。有没有更好的方法来存储数据?更好的搜索方式?
【问题讨论】:
-
在项目期间消耗一个租用物品?对我来说,可用性听起来更像是 AssignedToProject 并且似乎有点令人困惑 - 这是预期的目标吗?此外,“比较日期范围”可能是“使用带有 [index-based] 范围比较的 SQL 集合操作”,因此这里不一定要“花费时间”。更复杂的操作是查找哪些范围是空闲的,而不是查找范围的重叠(或一组范围上的单个范围)。
-
编程的第一条规则:先让它工作,然后再优化。我建议你先试试你的方法,看看性能是否很糟糕,然后再优化。同样尝试在设计数据时考虑到代码可能不是一个好主意:它会在模型和代码之间创建依赖关系,因此当您必须修改代码时,您会开始担心模型是否损坏.最后对于文本搜索考虑使用 Sphinx,对于其他使用普通 SQL 的 go,只需施加更多限制,例如用户必须指定日期范围。