2

追加/編集/削除されたメモを追跡する SQL テーブルを作成したいと考えています。NOTEID現時点でのそれぞれの状態を表に表示し、選択したメモの変更のログを表示し、特定の でマークされたすべてのメモを削除できるようにしたいと考えていNOTEIDます。

create table[dbo].[NOTES]{
  NOTEID [varchar](128) NOT NULL,
  CREATEDBY [varchar](128) NOT NULL, /*is this redundant?*/
  TIMECREATED  DATE NOT NULL,          /*is this redundant?*/
  MODIFIEDBY [varchar](128) NOT NULL,
  TIMEMODIFIED  DATE NOT NULL,
  NOTE [VARCHAR}(2000) NULL,
  PRIMARY KEY ( /* undecided */ ),
}; 

このテーブルを作る自然な方法は何ですか? プライマリ ID を自動生成する必要がありますか、それとも ( NOTEID, TIMEMODIFIED) をプライマリ キーとして使用する必要がありますか? どのようなフールプルーフ保護を追加する必要がありますか?


「メモ履歴」ウィンドウにすべてのメモを表示できるようにしたいと考えています。したがって、作成された 3 日前のメモ、2 日前のメモ、および変更された今日のメモを保存する必要があります。

ただし、「メモ」テーブルには、各 NOTEID の最終状態が表示されます。あれは

SELECT NOTE from NOTES where NOTEID = 'selected_note_id' and date = latest
4

3 に答える 3

3

最善の方法は、2 つのテーブルを作成することです。

 NOTES (
     NOTE_ID        -- primary key and autogenerated / autonumeric
     CREATEDBY      -- only appear once
     TIMECREATED    -- only appear once
     NOTE 
 )

 NOTES_UPDATE (
     NOTES_UPDATE_ID   -- primary key and autogenerated / autonumeric
     NOTE_ID           -- Foreign Key to NOTES
     MODIFIEDBY 
     TIMEMODIFIED  
     NOTE 
 )     

メモの更新を取得できます

 SELECT N.*, NU.*
 FROM NOTES N
 JOIN NOTES_UPDATE NU
   ON N.NOTE_ID = NU.NOTE_ID

最後の更新を取得するには、追加するだけです

 ORDER BY NOTE_UPDATE_ID DESC
 LIMIT 1   -- THIS is postgres sintaxis.
于 2016-05-10T14:35:47.403 に答える