AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken [DB-Design]: Booleans als Bitfeld oder int?
Thema durchsuchen
Ansicht
Themen-Optionen

[DB-Design]: Booleans als Bitfeld oder int?

Ein Thema von yankee · begonnen am 16. Apr 2006 · letzter Beitrag vom 16. Apr 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#1

[DB-Design]: Booleans als Bitfeld oder int?

  Alt 16. Apr 2006, 10:14
Datenbank: DB unabhaengig • Version: 1 • Zugriff über: Tut nichts zur Sache
ich haette mal eine theoretische Frage zum Thema DB-Design.
Und zwar habe ich eine DB, die eine Reihe boolesche Werte abspeichert.
Also ich mach mal ein Beispiel: Eine Rechtetabelle waere Recht typisch. Es gibt haufenweise Rechte, die jeder Benutzer hat oder nicht hat. Also alles Booleans.

Eigentlich wuerde ich sagen, dass man sich einfach fuer jedes Recht dann eine Konstante definiert und so dann auf die einzelnen bits eines ints zugreift. So kann man in einem tinyint schonmal 8 Rechte speichern.
Allerdings habe ich festgestellt, dass andere progs (beispielsweise phpbb oder teamspeak) in ihren Datanbanken einfach fuer jedes Recht eine eigene Spalte mit dem Datentyp tinyint anlegen, der nur 0 oder 1 ist.
Warum sollte man das machen? Bitfelder wuerden doch weniger Platz wegnehmen... Und solange man nicht gerade mit einem Programm wie phpmyadmin oder so direkt in der DB rumwurschtelt ist da doch auch kein Nachteil drin, oder?
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer
Online

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: [DB-Design]: Booleans als Bitfeld oder int?

  Alt 16. Apr 2006, 10:33
Nicht jede Datenbank hat Bitfelder und alles was über (n)varchar und integer hinausgeht mußt Du eh für jede Datenbank u.U. speziell behandeln. Selbst "Memo"-Felder verhalten sich unterschiedlich.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#3

Re: [DB-Design]: Booleans als Bitfeld oder int?

  Alt 16. Apr 2006, 10:37
Hai yankee,
Zitat von yankee:
... Warum sollte man das machen? Bitfelder wuerden doch weniger Platz wegnehmen...
Ich würde in diesem Fall auch für jedes "Recht" ein eigenes Feld (natürlich in einer eigenen Tabelle) anlegen.
Das ganze ist einfach leichter zu warten. Wenn Du die Rechte in einem Integer speicherst (Bit-Masken) musst Du dir erst wieder eine Doku ausdrucken in der steht welches Bit für was da ist. Und wenn mal ein anderer mit deiner DB arbeiten soll muss auch er sich das erst verinnerlichen.

Ich störe mich da nicht an den wenigen Byte mehr. Wie viele Rechte hat man denn? 10? 100? 1000?
Selbst wenn es 1000 sind (uff, kann ja keiner überschauen) dann sind das gerade mal 1k pro Datensatz. Jetzt verkünpfst Du die Rechte ja nicht direkt mit einem User sondern legst noch eine Tabelle mit "Gruppen" an. Ein User ist also Mitglied einer Gruppe und bezieht darüber die Rechte die er hat. Es werden also auch nur ca. 10 Gruppen sein. Das sind dann gerade mal 10kByte für die Rechtetabelle.

Nicht viel finde ich. Und lieber "verliere" ich einige kByte auf dem DB-Server habe aber dafür ein System was ich noch pflegen kann.
Stephan B.
  Mit Zitat antworten Zitat
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#4

Re: [DB-Design]: Booleans als Bitfeld oder int?

  Alt 16. Apr 2006, 10:38
Zitat von Bernhard Geyer:
Nicht jede Datenbank hat Bitfelder und alles was über (n)varchar und integer hinausgeht mußt Du eh für jede Datenbank u.U. speziell behandeln. Selbst "Memo"-Felder verhalten sich unterschiedlich.
ich rede ja von integers. Man kann ja mit bitweisen Operatoren auf jedes Bit eines integers zugreifen. Der Integer, der 32 bit hat kann so 32 boolesche Werte aufnehmen.
Also
1 = 1
10 = 2
11 = 3
100 = 4
101 = 5
111 = 6
(Ich hoffe das stimmt so mit der Binaerdarstellung ist fuer die theorie jetzt aber eh egal)
Also wenn ich in einem integer eine 6 speichere wuerde dass dann (sagen wir mal wir haben 3 rechte zu vergeben) true true true heissen und eine 5 wuerde true false true heissen usw.

keine unterstuetzung der DB benoetigt.
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#5

Re: [DB-Design]: Booleans als Bitfeld oder int?

  Alt 16. Apr 2006, 10:53
Hi!

Allerdings ist doch dann die Frage, was performanter ist, oder?
Es müsste doch dann (um beim Beispiel eines Forums zu bleiben) dieser Integer immer zerflückt werden, um zu schauen, ob der jeweilige User die entsprechenden Rechte hat.

Anderen Falls geh ich einfach hin und frag das eine Feld ab, dass ich gerade brauche und da steht dann 0 oder 1 drin. Dann muss ich (mal auf PHP bezogen) nicht an den Werten herumarbeiten. Auch wenn ich einen Wert neu setzen will, dann muss ich mich nich um die anderen kümmern usw. usf.


Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#6

Re: [DB-Design]: Booleans als Bitfeld oder int?

  Alt 16. Apr 2006, 10:54
Hi,
einerseits ist deine sechs hier falsch (110 = 6, 111 = 7), andererseits

Zitat von yankee:
Also wenn ich in einem integer eine 6 speichere wuerde dass dann (sagen wir mal wir haben 3 rechte zu vergeben) true true true heissen und eine 5 wuerde true false true heissen usw.
Zitat von Sharky:
Wenn Du die Rechte in einem Integer speicherst (Bit-Masken) musst Du dir erst wieder eine Doku ausdrucken in der steht welches Bit für was da ist. Und wenn mal ein anderer mit deiner DB arbeiten soll muss auch er sich das erst verinnerlichen.
Oder anders gesagt 6 = True True False heißt was? Ok, hab zwei Rechte aber welche?! Gut, kann ich in der Doku nachlesen und dann stelle ich fest dass ich ein Recht nicht mehr brauche und passe dass Bit dann in jedem Integer an? Oder ich brauche mal ein 32tes Recht, dann mach ich was?

Es lohnt sich einfach nicht hier Platz sparen zu wollen. Wie Sharky schon sagte du gibst die Wartbarkeit auf (was so ungefähr zu der Top 3 der Fehler gehört) und das ohne Not. Sagen wir mal du würdest 10 MByte an Rechten speichern, dann schau dir mal an wie viel das an Speicher ist (gar nichts!) und dann noch Sharky's Rechnung dass du für 100te Rechte gerade mal KByte brauchst. Wo also ist hier die Not Platz zu sparen?
Wenn du nun an irgendeiner Stelle noch einen Fehler mit der Bitmaske (oder derer Kombination) machst, dann kommen noch vermeidbare Fehler hinzu. Auch wenn es dir gerade alles klar ist und du diese Fehler ausschließen könntest, so sieht es in einem halben Jahr auch für dich anders aus (und erst recht für andere Entwickler).

Gruß Der Unwissende
  Mit Zitat antworten Zitat
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#7

Re: [DB-Design]: Booleans als Bitfeld oder int?

  Alt 16. Apr 2006, 11:05
uff.... gut, ich werde wohl extra-felder nehmen...
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#8

Re: [DB-Design]: Booleans als Bitfeld oder int?

  Alt 16. Apr 2006, 11:23
moin,

du verletzt mit deinem Vorhaben eine grundlegenende Regel des Datenbankdesigns, die 1. Normalform!
http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)#Erste_Normalform_.281NF .29
  Mit Zitat antworten Zitat
Benutzerbild von yankee
yankee

Registriert seit: 10. Mär 2004
1.134 Beiträge
 
Lazarus
 
#9

Re: [DB-Design]: Booleans als Bitfeld oder int?

  Alt 16. Apr 2006, 11:31
Zitat von bigg:
du verletzt mit deinem Vorhaben eine grundlegenende Regel des Datenbankdesigns, die 1. Normalform!
http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)#Erste_Normalform_.281NF .29
Eigentlich kenne ich Normalformen ja
*den Artikel bei wikipedia trotzdem ochmal schnell ueberflieg*
Und ja, Normalformen habe doch eigentlich nur was mit Redundanzen zu tun. Zumindest bis zur 3. Normalform und darueber hinaus ist das ganze eh nur fuer besonder Faelle interssant (sag ich mal so).
Aber egal, du sagst ja schon ich mache bei der 1. Normalform was falsch. Was denn?
Letzter Tipp: Drogen. Machen zwar nicht glücklich, geben einem aber wenigstens das Gefühl glücklich zu sein.

Have a lot of fun!
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#10

Re: [DB-Design]: Booleans als Bitfeld oder int?

  Alt 16. Apr 2006, 11:45
Du kannst per SQL keine Relationen über deine Bitfelder mehr erzeugen, so einfach. Auch wenn es deine SQL Datenbank kann, es ist kein Standard und nicht jede SQL kann sowas abarbeiten, bzw. jede Datenbank macht das auf ihre Weise.

Gruß Hagen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz