Frage

Ok, ich habe eine Tabelle, die ungefähr so ​​aussehen wird:

Post
 ˪ Id
 ˪ Version
 ˪ Title
 ˪ Content

Die Idee ist, dass die ID und die Version zusammen den Primärschlüssel bilden, da Sie einen einzelnen Beitrag mehrmals, aber mit unterschiedlichen Versionen haben können.

Meine Frage ist diese:Ich möchte, dass die ID automatisch erhöht wird.Ist das in einem solchen Setup möglich?Wird es Probleme geben, wenn ich zum Beispiel die zweite Version eines Beitrags einfüge?


Scheint, als müsste ich hier einige Dinge klären.Was ich gerne tun würde, wäre so etwas:

INSERT INTO posts VALUES (NULL, 0, "A title", "Some content");

Dadurch würde ein neuer Beitrag mit einer automatisch inkrementierten ID erstellt.Nehmen wir an, es hat die ID 7.Ich möchte jetzt eine neue Version erstellen:

INSERT INTO posts VALUES (7, 1, "A new title", "Some adjusted content");

Funktioniert das?Oder würde die ID immer noch einen automatisch inkrementierten Wert erhalten?Und selbst wenn es funktioniert hätte, mache ich etwas, was ich aus Sicht des Datenbankdesigns usw. nicht tun sollte?

War es hilfreich?

Lösung

Betrachten Sie die folgenden Beispieldaten:

id  version  title  content   
1     1        t1     c1
2     1        t2     c2

Jetzt ändert ein Benutzer Titel und Inhalt eines Beitrags und erstellt eine neue Zeile mit automatisch erhöhter ID:

3     2        t3     t3

Dies ist die zweite Version eines Beitrags, aber Sie können nicht erkennen, ob es sich um eine neue Version von Beitrag eins (Eintrag mit der ID 1) oder Beitrag zwei (Eintrag mit der ID 2) handelt.

Sie benötigen etwas, um den Beitrag zu identifizieren.Sie können Ihrer Tabelle eine post_id-Spalte hinzufügen, wie Tobias in seiner Antwort vorschlägt.

Darüber hinaus ist es möglich, die automatisch inkrementierte ID vollständig zu entfernen und einen zusammengesetzten Primärschlüssel (post_id,version) zu verwenden – der Hauptpunkt besteht darin, eine post_id zu haben, die nicht automatisch inkrementiert wird, damit Sie über Daten wie diese verfügen können:

post_id  version  title  content   
1           1        t1     c1
2           1        t2     c2 
1           2        t3     t3

Hier wird deutlich, dass die dritte Zeile eine neue Version von Beitrag 1 darstellt.

Andere Tipps

Ich würde es so machen:

Post:  
- ID (your primary key with auto_increment)
- post_id (this is which post you mean)
- version
- title
- content

Die neue ID gibt lediglich eine eindeutige ID für diesen Datensatz an.Die post_id gibt dann an, zu welchem ​​Beitrag dieser Datensatz gehört und die Version steht für die Revision des Eintrags.

Warum nutzt du nicht das? Id B. als eine Art Versionsindikator, andernfalls hätten Sie zwei Spalten, die denselben Zweck erfüllen, was als Fehler im DB-Design angesehen wird.

Sie würden einen zusammengesetzten Primärschlüssel verwenden, bei dem ID und Version zusammen den Eintrag identifizieren.Sie können dann die ID auto_inkrementieren.Wenn Sie einen neuen Eintrag hinzufügen, wird dieser automatisch erhöht.Wenn Sie einen Beitrag überarbeiten, definieren Sie explizit ID und Revision und die ID wird nicht erhöht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top