![]() |
Datenbank: MySQL • Version: 5 • Zugriff über: Zeos
Welches Format für Datensatzstatus
Hallo,
ich füge Datensätze in eine Tabelle ein, die folgenden Status annehmen können (diesen Status bekomme ich so aus einer Importdatei geliefert): ANGL = Angelegt INAK = Inaktiv LÖVM = Löschvermerk Diese können jetzt natürlich auch gemeinsam auftreten, also ANGL INAK oder ANGL LÖVM. Derzeit wird der Status als VARCHAR Feld geführt in dem ich den Status als Text ANGL, INAK, LÖVM schreibe. Nach dem Auslesen der DB stelle ich mit Pos() fest welcher Status vorliegt. Ich finde das jetzt nicht so wahnsinnig geschickt und würde das gerne ändern, aber wie? Und wie kann ich gleich bei der SQL-Abfrage Datensätze mit einem bestimmten Status erhalten? Wobei der Vorteil der o.g. Methode wäre, dass bei zusätzlichen Statusinformationen an der DB-Struktur nichts geändert werden müsste... Danke, Guido |
Re: Welches Format für Datensatzstatus
Ich würde die Stati in eine eigene Relation auslagern
|
Re: Welches Format für Datensatzstatus
Bei Beibehaltung der DB-Struktur würde mir da spontan "like" einfallen, zumindest, solange diese Abkürzungen so gewählt werden, dass sie sich nicht ähneln (also die eine nicht in der anderen enthalten ist). Also z.Bsp.
SQL-Code:
select * from tabelle where status like '%INAK%' or status like '%LÖVM%'
|
Re: Welches Format für Datensatzstatus
Zitat:
|
Re: Welches Format für Datensatzstatus
Das hatte ich gemeint
|
Re: Welches Format für Datensatzstatus
Zitat:
Status1 = 1 Status2 = 2 Status3 = 4 Status4 = 8 dann spart man sich eine Zusatztabelle. Natürlich nur wenn es garanitiert ist das es maximal 32 Stati geben wird. |
Re: Welches Format für Datensatzstatus
Dann müsste man aber die Bimuster wieder auseinanderfieseln
|
Re: Welches Format für Datensatzstatus
Zitat:
das finde ich jetzt aber nicht so problematisch. So oder so muss man ja sagen was man möchte. Und wenn es über die Bitmuster machbar ist spart er sich zwei Tabellen welche ja verknüpft werden müssen und darum wieder den Server belasten. Oder denke ich eben (habe Urlaub) total falsch? ;-) |
Re: Welches Format für Datensatzstatus
Zitat:
MySQL unterstützt doch Bitoperationen (?), also ... warum nicht? |
Re: Welches Format für Datensatzstatus
Hai, Sharky, das Problem sehe ich weniger beim Prüfen einzelner Bits auf dem Client, als vielmehr beim Formulieren von Abfragen.
|
Re: Welches Format für Datensatzstatus
Zitat:
Bedenken gibts auch, wenn du Abfrage über ein Status machen willst. Da kommst du um Bitoperationen nicht rum, d.h. es werden Operatoren odes Funktionen in SQL Statements vorkommen, und die machen dir die Indizierung auf das Statusfeld zunichte. Ich hatte mal vor einiger Zeit gleiches zu bewältigen, und hatte auch diese Idee. Hab sie aber aus genannten Gründen schnell wieder über Bord geschmissen, und hoffe sie lagert jetzt irgendwo ganz tief im Mariaanengraben :mrgreen: |
Re: Welches Format für Datensatzstatus
SQL-Code:
... oder so in etwa
select dings from bums where (status & 2) = 2
äähh, ja, das problem kiegt wo anders :stupid: |
Re: Welches Format für Datensatzstatus
Zitat:
natürlich kann man es auch so machen, ich würde aber die Lösung mit den extra Tabellen wählen. |
Re: Welches Format für Datensatzstatus
Noch eine Ergänzung: Was ist mit der Datenkonsistenz... Wie willst du einschränken, dass plötzlich der Status 3172 irgendwo gesetzt wird.
MySQL ist doch ein relationales DBMS. Dann sollte man es auch relational nutzen. Weil es sich in der Statustabelle ja wohl um +/- 3 Einträge handelt, friesst ein Join auf diese Tabelle kein Brot. |
Re: Welches Format für Datensatzstatus
Zitat:
Tabelle A ist die Tabelle mit den importierten Daten, und Tabelle A_Status enthält die Einträge mit den Statusinformationen, z.B. A.ID (Primarykey) A.xxx A_Status.AID A_Status.Statusinfo Habe ich das richtig verstanden? |
Re: Welches Format für Datensatzstatus
Zitat:
|
Re: Welches Format für Datensatzstatus
Also gut, ich habe jetzt drei Tabellen:
Import - ID, weitere Felder Import_Status - ID, STATUS Import_XStatus - Import_ID, Import_Status_ID Wie sieht jetzt eine SQL-Abfrage aus, welche die drei Tabellen verbindet? z.B. Alle Import_Status.STATUS zu einer gegebenen Import.ID
SQL-Code:
SELECT A.STATUS FROM Import_Status A
...??? |
Re: Welches Format für Datensatzstatus
Hallo Guido,
MySQL bietet für deine Zwecke den Datentyp SET an:
SQL-Code:
Eine Lösung auf dieser Basis würde ich bevorzugen.
CREATE TABLE Importe (ID INTEGER NOT NULL, Status SET('ANGL', 'INAK', 'LÖVM'));
ALTER TABLE Importe MODIFY Status SET('ANGL','INAK','LÖVM','TEST'); SELECT * FROM Importe WHERE FIND_IN_SET('INAK', Status); UPDATE Importe SET Status = 'INAK,TEST' WHERE ID = 0; Freundliche Grüße |
Re: Welches Format für Datensatzstatus
Danke Marabu, das werde ich mir mal genauer anschauen.
|
Re: Welches Format für Datensatzstatus
Öhm - jetzt mal ganz blöd gefragt: Wieso nicht einfach 3 Boolean Felder nehmen? :gruebel:
|
Re: Welches Format für Datensatzstatus
Das kannst du auch so machen, aber du musst dann aufpassen, dass nicht eine Strukturänderung an der Tabelle (beim Hinzufügen weiterer Statuswerte) deinen Code bricht.
|
Re: Welches Format für Datensatzstatus
Hinzufügen ist die einfachste Variante.
Bestehende Felder verändern ist problematisch. Aber für diesen Firlefanz gleich 2 neue Tabellen anlegen, mit einer m:n Struktur??? Joh heiligs Blechle! Pimp my Database. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz