【发布时间】:2014-06-21 05:31:42
【问题描述】:
我收到了一些 Exercise Routine 内容,这些内容将按顺序显示给用户。下面显示了一个最简单形式的示例。
id 名称 持续时间已完成 -------------------------------------- 1 跳跃 10 1 2 运行 15 0 3 骑自行车 12 0 4 俯卧撑 30 1通常这些表格最少有 100 行/练习,大约有 300 个表格(针对不同标准的不同练习)。我们没有任何前端,直接使用dbForge Studio数据库编辑器更新数据库。
之前的开发人员设计了该表,以便唯一的 id 列也用作序列号。它也构成 url 的一部分。例如。 xxx/exercise/12 专门在数据库中查找 id=12 的实际第 12 行(他假设所有 id 都以 1 递增并且按顺序递增)而不是 id=12 的行。
明显的问题是,当我们想在表格中添加一个练习时,可以说是在 练习 5 之后,然后我们在 5 之后手动添加它,然后必须手动更新以下所有内容的 id练习,使它们按顺序排列。理想情况下,我们应该在表格中添加一行并以某种方式解释 php 代码,知道这个练习应该出现在 练习 5 之后。 p>
类似地,例如,如果我们删除第 17 号的练习,那么来自 url xxx/exercise/17 的内容将不会被提供。理想情况下,id=18 现在按顺序位于第 17 位,因此必须提供该内容。
尝试
我曾考虑添加另一个列序列,它会告诉您以什么顺序提供服务。但话又说回来,我又回到了第 1 格,因为我必须在添加/删除时更新序列号。
我还考虑过创建另一个表并以我们想要提供内容的任何顺序存储 ID 号。 - 但我不确定这是否真的是个好主意。
谁能指导我为这个问题设计合适的数据库/表?
编辑
我想我的问题并不清楚。
我不想重新填充/重新排序密钥。我知道这不是应该设计数据库的方式。
但问题是,如果我在表格末尾添加内容,那么我如何告诉 table/php 我想要提供新添加的内容(id 可以说 127)在 id=15 之后而不是最后上菜。
【问题讨论】:
-
问题在于您的基本信念是缺少 id 是不好的,删除 16 并且从不重新填充没有任何害处。事实上,这是一件好事。每次你重新排序所有链接都会改变,这对谷歌和用户来说是相当烦人的
-
是的,您不应该重复使用密钥,即使它们已被删除。但我认为这个问题更多地与自定义排序有关,而不是主键。
-
我同意。我想我的问题还不清楚。我不想重新填充钥匙。但是如果我在表格的末尾添加一个内容,那么我如何告诉 table/php 我想要提供新添加的内容(id 可以说 127)在 15 之后而不是最后提供....我也更新了我的问题。
标签: php mysql sql database database-design