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