2017-01-02 2 views
0

ich die selbstinkrementierende Primärschlüssel meiner Tabelle nur 1-12 in den Bereichen sein zu wollen, 101-112, 201-212 usw.Grenze SQL Primärschlüssel auf bestimmte Bereiche

Das ist, weil ich eine Reihe von sich wiederholenden Gegenständen, die 12 in einem Satz sind und dann einen anderen Satz bekommen, wäre es am einfachsten, sie auf diese Weise durch den Primary Kay indizieren zu lassen, denke ich.

Ist es möglich?

+0

Es wäre nicht einfach, es mit PK zu indizieren. Belassen Sie PK wie es ist, autoincrementiert und erstellen Sie dann eine andere Spalte, die Sie von einem Trigger/Stored Procedure/geplantem Ereignis (je nachdem, mit welchem ​​Sie am einfachsten arbeiten) aktualisieren und dieses indizieren. Manipulieren mit PK wie Sie wollen, kann nur negative Auswirkungen haben. – Mjh

+2

erstellen Sie einfach eine andere Spalte, die Mod 12 ist der Primärschlüssel. – Hogan

Antwort

4

Dies ist zu lang für einen Kommentar.

Dies ist nicht der richtige Weg zu nähern, was Sie tun. Wenn Sie Elemente in einem "Set" wiederholen, fügen Sie der Tabelle eine Spalte hinzu, um das Set anzugeben. Dies ist der sinnvolle Umgang mit den Daten. Es macht die Struktur der Daten in der Tabelle expliziter.

Dann, wenn Sie wirklich einen Primärschlüssel codiert mit einem Wert verwenden möchten, was ist so schwer zu:

select floor((primarykey - 1)/12) as setvalue 

ich nicht empfehlen, weil automatisch inkrementierte ids nicht sein garantiert lückenlos, aber es würde unter den meisten Umständen funktionieren.

Schließlich, wenn Sie wirklich tun wollen, was Sie vorschlagen, würden Sie einen Auslöser benötigen. Dies scheint ein schlechter Grund zu sein, einen Auslöser zu schreiben, weil es bessere Alternativen gibt.

+0

'Stock (x/12) + 1' von 1-12 gehen - Ich denke, Sie haben 0-11 dort. – Hogan

+0

@Hogan. . . Dies identifiziert die "Menge" als erste Ziffer (n) im Primärschlüssel. Das beginnt mit "0" im OP. –

4

Obwohl dies nicht direkt möglich ist, können Sie einen Primärschlüssel verwenden, der aus zwei Feldern besteht - einer unbeschränkten Ganzzahl, die eine Gruppe bezeichnet, und einer anderen ganzen Zahl, die auf Werte 1..12 beschränkt ist.

Dies ist jedoch kein sehr guter Ansatz, weil es Ihrem Primärschlüssel notwendigerweise Bedeutung außerhalb Ihres Datenbankmodells gibt. Das ist schlecht, weil Sie diese Bedeutung im Code einfach ausnutzen können, was wiederum die Umgestaltung Ihrer Datenbank erheblich erschwert.

Verwandte Themen