【发布时间】:2011-03-07 22:11:03
【问题描述】:
我目前正在编写一种产品,该产品只有一个数据库,但将使用 customer_id 的全局标识符托管许多客户端。
这一切都很好。
但是,假设我们有一个名为 Ticket 的表。 Idea 有一个主键。当用户添加工单时,工单将通过外键等方式与客户对应。
但是,对于每个客户,我希望他们的票证 ID 在他们注册时从 1 开始。
即客户 1 添加 4 张门票,ticket_id 计数将为 4。客户 2 注册,他们添加门票,然后 ticket_id 将为 5,依此类推。这并不理想。
我的问题是,如果我不想使用多个数据库,该如何解决?如果每当我进行更改时,数百个带有新列、索引等的数据库都会让我非常恼火,那么必须更新的想法往往会让我非常恼火。
希望这是有道理的,我期待您的意见。
编辑:标记为 symfony,因为我将在 symfony 中使用 Doctrine ORM 来管理数据库....可能无关紧要,但以防万一。
编辑:我可能也很愚蠢并且在这里遗漏了一些明显的东西,所以我很抱歉。
【问题讨论】:
-
有些东西对我来说似乎有点不清楚。当您说“客户 2 注册时,他们添加了一张票,然后 customer_id 将为 5,依此类推”,您的意思是 ticket_id 将为 5 吗?我认为为每个客户增加ticket_id 效果很好。您必须支持的项目要少得多。如果您想创建 customer_id 和 ticket_id 的组合键,您可以在其中获取 ticket_id 的最大值,其中 customer_id 是另一个客户的 FK。但是,我认为让ticket_id 无视客户的增加是最好的主意
-
抱歉,我意识到我犯了那个错误,并且已经更正了(实际上,是说ticket_id)。同意,只有ticket_id 会更简单、更容易,但是,我不希望客户认为“嗯?我的票号 4341 怎么样?我只创建了 2 张票?!”或者你认为这不是什么大问题?此外,我对其他公司如何使用诸如此类的集中式数据库并设法保持每个客户的连续 ID 等很感兴趣。
-
这应该不是什么大问题,或者您是否查看了 SO 的 id 并认为“这个问题 3112050 是我自己在 php 中,一般来说,......”;)。如果你真的想移动 ID,你总是可以创建“漂亮的 URL”来隐藏 ID 并将其替换为票的标题或任何其他内容。
-
除非用户想通过工单 id 进行搜索。呵呵,真麻烦!但你是对的,我会使用漂亮的网址。门票标题和时间戳(如建议)有点像 example.com/ticket/some-crazy-ticket-please-look-at-me-11545454
-
如果你使用的是学说,那么你应该使用这个标签而不是 symfony
标签: php mysql database database-design doctrine