turk porno porno escort rokettube
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 20 von 31

Thema: Integration von Enum Feldern

  1. #1
    Erfahrener Benutzer Avatar von deetee
    Registriert seit
    17.12.2007
    Beiträge
    1.459
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard Integration von Enum Feldern

    Hallo,

    mich würde interessieren, wie ihr enum Felder in eurer Anwendung integriert habt. Ich meine damit, wie z. B. die view diese Werte bekommt und wie ihr die Werte evtl. besonders verwaltet im controller oder im model.

  2. #2
    Erfahrener Benutzer Avatar von Rauschi
    Registriert seit
    29.10.2007
    Beiträge
    117
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Gar nicht,

    zwar sind ENUM/SET Felder einen Tick schneller als Joins, icebreaker wird uns gleich belehren , jedoch normalisier ich das immer recht gerne

    Bis zu 5 Werten hab ich einen TINYINT wo die Zahlen dann hardcodierte Zustände sind, ab 5 Lager ich das in ne eigene Tabelle aus, je nachdem welche Beziehung herscht, dann halt noch mit der n:m Zwischentabelle.

    Ansonsten bzgl. der Verwaltung mach ich das über die interne binäre Repräsentation.

    Gruß
    Andi
    Sysadmin als Beruf
    PHP als Hobby

  3. #3
    Erfahrener Benutzer Avatar von ice-breaker
    Registriert seit
    29.03.2008
    Ort
    Steinbach/Taunus
    Beiträge
    1.862
    Thanks
    0
    Thanked 9 Times in 5 Posts

    Standard

    Zitat Zitat von Rauschi Beitrag anzeigen
    zwar sind ENUM/SET Felder einen Tick schneller als Joins, icebreaker wird uns gleich belehren
    so schlimm bin ich nun doch auch net


    Enum: schneller als Joins, sollte man aber im Nachhinein die Enum-Definition anpassen wollen (werte hinzufügen/entfernen) muss dafür die komplette Tabelle neu rebuildet werden, also ein No-Go für riesige Tabellen.
    Auch das Sortieren nach einem Enum-Feld ist etwas tricky, es wird nämlich nach der Reihenfolge der Definition sortiert und nicht nach den Werten (da die interne Zahlendarstellung genutzt wird).
    Als nette Alternative bietet sich die normalisierte Version OHNE Joins: Ein Select auf die Daten, ein cachender Select auf die Bezeichnungen der Werte, und den Join dann in PHP machen.
    SET: Zweigespalten. Sollte der Wert nur selected werten ist es schneller als ein Join, sollte es Teil einer Bedingung sein, ist es langsamer. Ein Index auf Set funktioniert nur, wenn man alle Eigenschaften definiert, zum Glück wurde das auch mal gut gut erklärt festgehalten



    Ich mache das i.R. über die einzelnen Bits eines Integers, nur für einen Set-Datentyp der in einer Where-Bedingung vorkommt nehme ich eine extra Tabelle.
    In PHP sind das dann alles Konstanten irgendwelcher Klassen (Models z.B).
    "Die Wahrheit entgeht dem, der nicht mit beiden Augen sieht." -Orici

  4. #4
    Erfahrener Benutzer
    Registriert seit
    28.12.2006
    Beiträge
    9.966
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Bis zu 5 Werten hab ich einen TINYINT wo die Zahlen dann hardcodierte Zustände sind, ab 5 Lager ich das in ne eigene Tabelle aus, je nachdem welche Beziehung herscht, dann halt noch mit der n:m Zwischentabelle.
    Das hat gegenüber ENUM/SET aber keinerlei Vorteile, weil intern ENUM/SET auch nur als Integer gespeichert wird.
    Auch das Sortieren nach einem Enum-Feld ist etwas tricky, es wird nämlich nach der Reihenfolge der Definition sortiert und nicht nach den Werten (da die interne Zahlendarstellung genutzt wird).
    Kann gewollt sein

  5. #5
    Erfahrener Benutzer Avatar von Rauschi
    Registriert seit
    29.10.2007
    Beiträge
    117
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Nicht ganz Kingkrunch,

    wie Ice schon gesagt hat kommst du da an einem Rebuild der Tabelle nicht herum, was abgesehen davon ob die Tabelle groß ist und länger dauert, für mich ein no-go auf einem Live System ist DDL-Statements zu fahren wenn ich kein Wartungsfenster habe, das kommt aber auch auf die Applikation an.

    Wenn ich vorher weiß ich hab nur 5 Werter reicht mir ein UNSIGNED INT um gegebenenfalls noch weitere Zustände erfassen zu können, bzw. bei ner extra Tabelle gibts dann eben eine neue Zeile.

    Gruß
    Andi
    Sysadmin als Beruf
    PHP als Hobby

  6. #6
    Erfahrener Benutzer Avatar von ice-breaker
    Registriert seit
    29.03.2008
    Ort
    Steinbach/Taunus
    Beiträge
    1.862
    Thanks
    0
    Thanked 9 Times in 5 Posts

    Standard

    Zitat Zitat von Rauschi Beitrag anzeigen
    wie Ice schon gesagt hat kommst du da an einem Rebuild der Tabelle nicht herum, was abgesehen davon ob die Tabelle groß ist und länger dauert, für mich ein no-go auf einem Live System ist DDL-Statements zu fahren wenn ich kein Wartungsfenster habe, das kommt aber auch auf die Applikation an.
    Der Witz ist ja, es wird auch gemacht, wenn es gar nicht notwendig ist
    Wenn ich in einem ENUM 5 Optionen habe und eine 6. hinzufüge, ändert sich bei den bestehenden Daten ja nichts, es gibt nur einen weiteren Integer, der eine Bedeutung hat (deswegen kann man auch die frm-Datei manuell ändern).
    Das gleiche beim Set-Datentyp

    Einfach ein Seiteneffekt, weil das Ändern einer Spalte in MySQL so implementiert ist, dass immer rebuildet wird, mal schauen ob der neue schlankere Core von Drizzle das gleiche Problem hat.
    "Die Wahrheit entgeht dem, der nicht mit beiden Augen sieht." -Orici

  7. #7
    Erfahrener Benutzer
    Registriert seit
    10.09.2007
    Ort
    Wuppertal
    Beiträge
    5.725
    Thanks
    1
    Thanked 41 Times in 40 Posts

    Standard

    Zitat Zitat von ice-breaker Beitrag anzeigen
    Einfach ein Seiteneffekt, weil das Ändern einer Spalte in MySQL so implementiert ist, dass immer rebuildet wird, mal schauen ob der neue schlankere Core von Drizzle das gleiche Problem hat.
    Wenn nicht, wäre das ein echter Vorteil gegenüber MySQL - die Frage aber ist, wie oft sich Spalten in einer Webanwendung ändern (oder wie wahrscheinlich dies ist).
    Neues Projekt: zandman.de - Status: WIP




  8. #8
    Erfahrener Benutzer Avatar von ice-breaker
    Registriert seit
    29.03.2008
    Ort
    Steinbach/Taunus
    Beiträge
    1.862
    Thanks
    0
    Thanked 9 Times in 5 Posts

    Standard

    I.R. sind Anwendungen ja nicht starr, sondern erfahren mit der Zeit Feature-Updates, und wenn man dann mal die Anwendungen mehrere Stunden offline nehmen muss, weil einige Tabellen rebuildet werden müssen (ich impliziere Größere Anwendungen) ist das nicht so optimal oder?

    Klar es tritt seltener auf, aber MySQL will sich ja im Enterprise-Umfeld positionieren und da ist sowas nicht so dolle.
    Sevenload hat da im PhpMag mal einen Artikel über ihr Tagging geschrieben, da war auch als Randbemerkung drinne, dass wenn sie irgendwo in ihrer Anwendung etwas an der Db ändern wollen, das nen Server schonmal ne Woche brauchen kann um das alles zu rebuilden.
    "Die Wahrheit entgeht dem, der nicht mit beiden Augen sieht." -Orici

  9. #9
    Erfahrener Benutzer
    Registriert seit
    06.08.2009
    Beiträge
    117
    Thanks
    0
    Thanked 1 Time in 1 Post

    Standard

    Zitat Zitat von deetee Beitrag anzeigen
    mich würde interessieren, wie ihr enum Felder in eurer Anwendung integriert habt. Ich meine damit, wie z. B. die view diese Werte bekommt und wie ihr die Werte evtl. besonders verwaltet im controller oder im model.
    Ich kann nur ein paar grundsätzliche Gedanken beisteuern, weil mein erstes ZF-Projekt erst noch im Werden ist. Würde mich mal interessieren, was ihr davon haltet.

    Mal ganz unabhängig von der Datenbank werden Enums und Sets in meinen zukünftigen Domain-Models ganz normale Typen (Value Objects) sein. Sets sind idealerweise Iteratoren. Ich vermeide ganz bewusst spezielle Datenbank-Typen, weil Wertebereiche IMHO nicht in die Datenbank, sondern in die Modelimplementation gehören. Sets sind eigentlich Sammlungen von Enums, sie könnten also zum Beispiel eine typische Iterater-Implementation mit einem private Array sein, das bei der Instanzierung auf einen Enum-Typen spezialisiert wird.

    Ich meine das zum Beispiel so:

    PHP-Code:
    $propertySet = new Set('Property_Enum');
    $propertySet->set(Property_Enum::getInstance()->value1);
    $propertySet->set(Property_Enum::getInstance()->value2);
    foreach( 
    $propertySet as $key=>$value ) {
        echo(
    $key '=>' $value);


  10. #10
    Erfahrener Benutzer
    Registriert seit
    28.12.2006
    Beiträge
    9.966
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Sets sind eigentlich Sammlungen von Enums, [..].
    Mag kleinlich wirken, aber das ist so in der Form falsch: Ein Set ist eine Menge, wie sie die formale Mathematik kennt. Die Spaltendefinition gibt dabei die Obermenge vor, während in den Spaltenzellen Teilmengen davon stehen. Streng genommen ist eine Aufzählung ("Enumeration", ich find die Bezeichnung etwas unglücklich gewählt -.-) eher ein Speziallfall der Menge, wobei die Teilmengen eine Kardinalität von 1 besitzen, als anders herum.

    Vielleicht hilft das beim Design

  11. #11
    Erfahrener Benutzer
    Registriert seit
    06.08.2009
    Beiträge
    117
    Thanks
    0
    Thanked 1 Time in 1 Post

    Standard

    Zitat Zitat von KingCrunch Beitrag anzeigen
    Ein Set ist eine Menge
    Nein, das ist nicht ganz richtig. Ein Set ist allenfalls die Sammlung von Werten einer bestimmten Menge. Ein Enum ist ein Wert einer bestimmten Menge.
    Geändert von Shnapoo (14.09.2009 um 23:31 Uhr) Grund: Definition nochmal überarbeitet und gekürzt... womit die Sache für mich erledigt ist.

  12. #12
    Erfahrener Benutzer
    Registriert seit
    28.12.2006
    Beiträge
    9.966
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Nein, das ist nicht ganz richtig. Ein Set ist allenfalls die Sammlung von Werten einer bestimmten Menge.
    Eine Teilmenge ist auch eine Menge Zudem
    Zitat Zitat von KingCrunch
    Die Spaltendefinition gibt dabei die Obermenge vor, während in den Spaltenzellen Teilmengen davon stehen.


    Edit:
    Nebenbei betrachtet Java das Set auch als spezielle Sammlung. Du widersprichst mit also garnicht
    Geändert von KingCrunch (14.09.2009 um 23:58 Uhr)

  13. #13
    Erfahrener Benutzer
    Registriert seit
    06.08.2009
    Beiträge
    117
    Thanks
    0
    Thanked 1 Time in 1 Post

    Standard

    -gelöscht- (zu sehr off topic)
    Geändert von Shnapoo (15.09.2009 um 00:50 Uhr)

  14. #14
    Erfahrener Benutzer Avatar von ice-breaker
    Registriert seit
    29.03.2008
    Ort
    Steinbach/Taunus
    Beiträge
    1.862
    Thanks
    0
    Thanked 9 Times in 5 Posts

    Standard

    k, streng mathematisch:
    • der Enum-Datentyp ist eine Menge (folgend E)
    • der SET-Datentyp ist eine Menge (folgend S)
    • ein Wert e der Menge E ist ein Element
    • eine Menge s von S ist eine Teilmenge (inkl. der leeren Menge)
    ihr sagt also eigentlich das gleiche, KingCrunch geht jedoch mehr den mathem. Weg, Schnapoo den umgangssprichlen Weg
    ich möchte Latex-Zeichen im Forum ^^

    (haben die blöden Mathe-Kurse endlich mal nen Sinn gehabt )
    Geändert von ice-breaker (15.09.2009 um 00:57 Uhr)
    "Die Wahrheit entgeht dem, der nicht mit beiden Augen sieht." -Orici

  15. #15
    Erfahrener Benutzer
    Registriert seit
    06.08.2009
    Beiträge
    117
    Thanks
    0
    Thanked 1 Time in 1 Post

    Standard

    Mir Recht!

    Ich spinne das Ganze mal etwas weiter: Enum-Elemente haben Identität, richtig? Man könnte sie im Model genau wie alle Entities behandeln... mit Data Mapper, der ein Array als Datenquelle nutzt.

  16. #16
    Erfahrener Benutzer Avatar von ice-breaker
    Registriert seit
    29.03.2008
    Ort
    Steinbach/Taunus
    Beiträge
    1.862
    Thanks
    0
    Thanked 9 Times in 5 Posts

    Standard

    vllt im Regelfall etwas oversized oder?
    "Die Wahrheit entgeht dem, der nicht mit beiden Augen sieht." -Orici

  17. #17
    Erfahrener Benutzer
    Registriert seit
    06.08.2009
    Beiträge
    117
    Thanks
    0
    Thanked 1 Time in 1 Post

    Standard

    Ach, mit Kanonen trifft man die Spatzen wenigstens.
    Im Ernst, aufwandsmäßig ist es neutral, weil die Infrastruktur eh da ist. Performance- und Anwendungsmäßig muss jeder selbst wissen, wie akzeptabel eine Lösung ist.

    Angenommen, Enums sind Entities, Sets sind Collections von Entities. So weit ist es ohnehin in jeder Model-Implementation vorhanden. Für mich stellt sich momentan vor allem die Frage, wie man es handhabbar macht.

    PHP-Code:
    /** @var User */
    $userEntity = new UserService::loadByName('guest');

    /** @var Collection (das eigentliche Set) */
    $ownedCars $userEntity->ownedCars;

    // Das Set daraufhin testen, ob eine Entity mit Namen 'Maserati' darin existiert:
    if ($ownedCars->exists('Maserati') {
        echo(
    'Lass mich probefahren!');

    Damit das aufgeht, müssen Entities eindeutig benannt sein. Sonst kann man nicht stringartig danach suchen.

  18. #18
    Erfahrener Benutzer
    Registriert seit
    28.12.2006
    Beiträge
    9.966
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Mal abgesehen davon, dass ich dir nur so halb folgen kann: Wie wärs mit Konstanten?
    PHP-Code:
    if ($ownedCars->is(UserService::CAR_MASERATI)) { // Oder wie die Klasse auch heißen mag
      // bla

    Eigentlich klingt das alles eher nach Arrays Oder machst du für INT-Spalten auch eigene Entitäten?

  19. #19
    Erfahrener Benutzer
    Registriert seit
    06.08.2009
    Beiträge
    117
    Thanks
    0
    Thanked 1 Time in 1 Post

    Standard

    > Eigentlich klingt das alles eher nach Arrays

    Klar klar, war ja nur so ein Gedankenspiel.

    Set- und Enum-Felder in assoziativen Arrays zu verwalten ist wohl der einfachste Weg. Die Werte würde ich dann als Key nehmen, um sie unique und leicht prüfbar zu machen. Das Set wird im Data Mapper einfach per explode() und foreach() in ein Assoc-Array verpackt. Beim Enum ist es noch einfacher, weil es nur einen Wert zur Zeit hat.

  20. #20
    Erfahrener Benutzer
    Registriert seit
    28.12.2006
    Beiträge
    9.966
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Wenn der Schlüssel dem Wert entspricht, was is dann der Wert des Arrays?!

Seite 1 von 2 1 2 LetzteLetzte

Ähnliche Themen

  1. Integration von Validierung
    Von deetee im Forum Konzepte & Ideen
    Antworten: 15
    Letzter Beitrag: 19.08.2009, 18:45
  2. dynamische Anzahl von Input Feldern in Zend_Form
    Von badrulecracker im Forum Formulare
    Antworten: 1
    Letzter Beitrag: 21.03.2009, 02:15
  3. Antworten: 0
    Letzter Beitrag: 11.09.2008, 11:27
  4. zend_db_table mit modifzierten feldern
    Von rufinus im Forum DB
    Antworten: 0
    Letzter Beitrag: 25.01.2008, 07:08
  5. Smarty Integration bei zf 0.6
    Von smeier im Forum 3rd Party Tools
    Antworten: 30
    Letzter Beitrag: 29.06.2007, 14:44

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •