在我的数据库中,有一个表基本上包含问题及其选项和答案。第一个字段是〜questionid~并且是主键,正如预期的那样(我现在已经禁用了AUTOINCREMENT)。我的客户可能想删除一些问题。这给我留下了两个选择:
所有后续问题都向上移动,以便没有空行。此选项意味着这些问题的问题ID将更改
保持原样,因此会有空行。如果有一个新条目,它应填充第一个空行。
我如何实施其中任何一项?实际上,我更喜欢第二种,但如果有人有不同的意见,那就很受欢迎了 我正在使用MySQL数据库和C#。
答案 0 :(得分:2)
您正在使用数据库,因此您不必担心这些问题。
SQL表中没有“空”行的概念(好吧,可以说如果所有列都为NULL,那么该行为空,但这与此无关)。 SQL表中的行本身并不是有序的。
行本身存储在页面上,这些页面可能有或没有额外的空间用于更多行。当你想到一个空行时,这可能是你想到的。
删除行时,不会重新排列数据。如果稍后添加新行,页面上只有一些额外的空间。如果在两个现有行之间添加主键并且页面已满,则数据库将页面“拆分”为两个。另外两页有额外的空间。
重要的一点是,这不是如何运作的。您为应用程序使用关系数据库的一个原因是,您可以添加和删除行,而无需担心其实际的物理存储。
如果您的数据库包含大量事务 - 删除和插入 - 那么您可能需要定期重新排列数据,以使其更适合页面。但是,只有在存在大量此类交易时才需要进行此类优化。
但有一件事是。您的应用程序不应该依赖于主键是顺序的,因此它可以正确处理删除。答案 1 :(得分:0)
我不确定你是如何实施的。我会这样做的,
questions
question_id - pk
question
answers
answer_id - pk
answers
question_answer
question_id
answer_id
这将带来更多优势。很多问题会有相同的答案。如果可以删除问题,则将其与来自question_answer表的答案一起删除