簡體   English   中英

刪除行時更新其他行的主鍵列

[英]Update primary key column of other rows when a row is deleted

在我的數據庫中,有一個表基本上包含問題及其選項和答案。 第一個字段是〜questionid~並且是主鍵,正如預期的那樣(我現在已經禁用了AUTOINCREMENT)。 我的客戶可能想要刪除一些問題。 這讓我有兩個選擇:

  1. 所有后續問題都向上移動,以便沒有空行。 此選項意味着這些問題將更改其問題ID

  2. 保持原樣,這樣就會有空行。 如果有一個新條目,它應該填充第一個空行。

我該如何實施其中任何一個? 實際上,我更喜歡第二種,但如果有人有不同意見,那就很受歡迎了。
我正在使用MySQL數據庫和C#。

您正在使用數據庫,因此您不必擔心這些問題。

SQL表中沒有“空”行的概念(好吧,如果所有列都為NULL,那么該行為空,但這里沒有關系)。 SQL表中的行本身並不是有序的。

行本身存儲在頁面上,這些頁面可能有或沒有額外的空間用於更多行。 當你想到一個空行時,這可能就是你想到的。

刪除行時,不會重新排列數據。 如果稍后添加新行,頁面上只有一些額外的空間。 如果在兩個現有行之間添加主鍵並且頁面已滿,則數據庫將頁面“拆分”為兩個。 另外兩頁有額外的空間。

但重要的是,這不是如何運作的。 您為應用程序使用關系數據庫的一個原因是,您可以添加和刪除行,而不必擔心它們的實際物理存儲。

如果您有一個包含大量事務的數據庫 - 刪除和插入 - 那么您可能希望定期重新排列數據,以使其更適合頁面。 但是,只有在存在大量此類交易時才需要進行此類優化。

但有一件事。 您的應用程序不應該依賴於主鍵是順序的,因此它可以正確處理刪除。

我不確定你是如何實施的。 我會這樣做的,

  questions
     question_id - pk
     question

  answers
     answer_id - pk
     answers

  question_answer
      question_id
      answer_id

這將帶來更多優勢。 很多問題會有相同的答案。 如果可以刪除問題,則將其與來自question_answer表的答案一起刪除

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM