2010-06-28 11 views
9

Ich habe ein paar Threads darüber gesehen, was alle jetzt an einem Tag in Bezug auf signierte vs unsigned Schlüsselwerte gemacht haben. Es scheint, dass unsigned optimal ist, da es die doppelte Anzahl von Zeilen für die gleichen Kosten erlaubt. Gibt es Vorteile mit signierten Schlüsseln?Konsens? MySQL, Signed VS Nicht signierte Primär-/Fremdschlüssel

Gibt es einen Standardkonsens? Es scheint wie signiert ist die Antwort seit "es war schon immer so"

Antwort

8

Ich bevorzuge es, meine Spalten als unsigned, wenn sie nicht negativ sein können. Neben dem von Ihnen erwähnten Bereichsfaktor wird dies auch beim Lesen der Tabellendefinition deutlicher.

-2

Ein vorzeichenbehafteter 32-Bit-Int kann mehr als 2 Milliarden Zahlen darstellen, daher vermute ich, dass das Problem für die meisten Menschen irrelevant ist. Das heißt, ich verwende oft negative Zahlen, wenn ich angeben will, dass ein Datensatz absichtlich verwaist ist.

+2

GAHH! Tut mir leid, ich arbeite mit einer Anwendung, wo jemand (nicht mehr mit der Firma) dachte, das wäre eine gute Idee. Buchstäblich, mindestens einmal pro Woche, finden wir eine Art Problem (entweder Herausforderung mit neuem Code oder Bug in existierendem Code), verursacht durch diese verrückte Designentscheidung. ** Sie sollten Primärschlüssel nicht über den Schlüsselwert hinaus angeben, und Sie sollten die Primärschlüsselwerte nicht ändern **. Wenn Sie Soft-Delete anzeigen möchten, verwenden Sie eine Statusspalte oder eine softDeleted-Spalte. Weil es in einem grundlegenden Teil der Software war, reparieren wir es gerade erst, als Teil einer größeren Überarbeitung. – gregmac

+0

@gregmac s'ok, ich wusste, es wäre umstritten. Ziemlich ironisch, ein besseres Wort, das "Waisenkind" wäre "existenziell" gewesen. Es war eine ironische Wahl von Begriffen, seit ich das Schema entwickelt habe, um Leute zu repräsentieren, von denen ich wusste, dass sie existieren müssen. Meine Anwendung erlaubt einem Benutzer zu sagen, dass Bob und Charlie Brüder sind, aber intern gespeichert sie Datensätze, deren Eltern Spalten referenzierte Datensätze mit negativen Schlüsseln. Wenn jemand Jane als Bobs Mutter hinzugefügt hat, könnte ich Charlie ebenfalls aktualisieren. Im Allgemeinen benutze ich das Muster, wenn ich sagen möchte, dass etwas existiert, dass andere Dinge in der Nähe sein müssen. –

+2

Ich bin auch sehr vertraut mit der Lehre, dass Primärschlüssel keine Bedeutung haben sollten. Eine bessere Maxime ist, dass die Bedeutung eingekapselt werden sollte. PKs sollten nichts für die Anwendungsschicht bedeuten, aber sie bedeuten Dinge für die Datenbank (Managementsystem) selbst. In dem Schema, das ich oben beschrieben habe, verwende ich einfach die PKs als Metadaten. Übrigens habe ich das hier schon einmal besprochen: http://stackoverflow.com/questions/2023988/modeling-existential-facts-in-a-relational-database –