SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Der CSS-Problemlöser

Der CSS-Problemlöser zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)
Hilfe Community Kalender Heutige Beiträge Suchen

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 15.02.2013, 12:28:48
julian-w julian-w ist offline
Anfänger
 
Registriert seit: Feb 2013
Alter: 31
Beiträge: 7
Array speichern und durchsuchen

Hallo,

in meiner Datenbank speichere ich Objekte, welchen ich Eigenschaften zuweise. Diese Eigenschaften bestehen aus einen Array, das einer Nummer (Eigenschaft) einen Wert zuweist.

z.B.

Code:
ID   NAME      GROUP   PROPERTY
1    Objekt1   1       [ "1" => "blau" , "5" => "45" , "8" => "gefährlich" , "20" => "true" ]
2    Objekt2   1       [ "3" => "1,3m" , "5" => "23" , "17" => "bild1.jpg" , "20" => "true" ]
3    Objekt3   2       [ "1" => "blau" , "5" => "40" , "17" => "bild1.jpg" , "20" => "true" ]

Nun frage ich mich, wie ich das am besten speichere. Ich könnte das Array als JSON speichern. Jedoch muss ich die Objekte auch nach den Eigenschaften durchsuchen können, also z.B. alle Objekte finden, die in der Eigenschaft 5 einen Wert größer wie 10 besitzen und der Gruppe 1 angehören. Das funktioniert mit JSON ja nicht :(

Wäre es sinnvoll eine extra Datenbank nur für die Eigenschaften anzulegen? Das ganze könnte halt sehr schnell sehr sehr groß werden. Und ich müsste ja immer wieder in die "Objekte-Datenbank" gehen, um nach der Gruppe zu schauen. Würden damit das durchsuchen nicht sehr komplex werden?

Ich hoffe ihr habt mein Problem etwas verstanden und könnt mir helfen.

Viele Grüße

Julian
Mit Zitat antworten
  #2  
Alt 15.02.2013, 12:41:36
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
AW: Array speichern und durchsuchen

Weg 1 widerspricht der ersten Normal Form

Also bleibt nur Weg 2: Ordentlich normalisieren.

A Visual Explanation of SQL Joins
SQL und relationale Algebra
Die 5 Normal Formen


Zitat:
Das ganze könnte halt sehr schnell sehr sehr groß werden.
Was ist für dich groß?
Mit Zitat antworten
  #3  
Alt 15.02.2013, 12:44:46
julian-w julian-w ist offline
Anfänger
 
Registriert seit: Feb 2013
Alter: 31
Beiträge: 7
AW: Array speichern und durchsuchen

Sehr groß sind etwa 10 Mio Einträge bei den Eigenschaften und 500.000 bei den Objekten.

Aber ich les mir die Artikel mal noch genau durch und bastele für mich was zusammen dann kann ich ja mal testen wie MySQL sich verhält ;)
Mit Zitat antworten
  #4  
Alt 15.02.2013, 13:39:32
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
AW: Array speichern und durchsuchen

Zu Weg1:
Bei soviel Einträgen ist das suchen in deinen PROPERTY Feldern die Hölle!
Du müsstest vermutlich, in vielen Situationen, alle Daten durch PHP schleusen.
SQL Seitig läßt sich da nix indizieren.

Eine Alternative wäre evtl. http://dev.mysql.com/doc/refman/5.1/de/set.html
Mit Zitat antworten
  #5  
Alt 15.02.2013, 13:51:49
julian-w julian-w ist offline
Anfänger
 
Registriert seit: Feb 2013
Alter: 31
Beiträge: 7
AW: Array speichern und durchsuchen

Mhhhh... das Backend ist in JAVA geschrieben aber dürfte ja keinen Unterschied machen.

Angenommen ich lege die Tabellen wie folgt an:
Code:
Objekte: ID, NAME, GROUP
Eigenschaften: ID, OBJECT, GROUP, NUMBER, VALUE
Dann wäre die Eigenschaft Gruppe zwar doppelt vorhanden, aber in der Tabelle Eigenschaften würde alles stehen was ich zum durchsuchen benötige. Wäre das irgendwie effizenter?

Ich kann mir kaum vorstellen das es schneller wäre die komplette Datenbank in JAVA zu laden und dann in JAVA zu durchsuchen... kann MySQL das nicht besser?
Mit Zitat antworten
  #6  
Alt 15.02.2013, 14:09:49
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
AW: Array speichern und durchsuchen

Objekt und Eigenschaft stehen offensichtlich in einer google('n:m Relation')


Tabelle Objekt
id | Name
1 | Name1


Tabelle Eigenschaft
id | Name
1 | Farbe
2 | Bild


Tabelle Eigenschaft_Objekt
id | Object_id | Eigenschaft_id | Value
1 | 1 | 1 | 'blau'
2 | 1 | 2 | 'bild1.jpg'


Und schon kanst du mit JOINs über die drei Tabellen alle abfragen zaubern.
Und das in rasender Geschwindigkeit
Mit Zitat antworten
  #7  
Alt 15.02.2013, 14:36:46
julian-w julian-w ist offline
Anfänger
 
Registriert seit: Feb 2013
Alter: 31
Beiträge: 7
AW: Array speichern und durchsuchen

Ich erklär mal noch kurz das "große drumherum" ;)

Ich habe eine "Teile"-Datenbank die zur Zeit aus allen nähten Platz. Nun möchte ich alles in einer MySQL Datenbank speichern. Dazu sortiere ich diese Teile in Gruppen ein und weise ihnen Eigenschaften zu. Die Gruppen könnten z.B. so aussehen:
  • aktive Elemente (ID 1)
    • IC (ID 2)
    • LED (ID 3)
  • passive Elemente (ID 4)
    • Widerstand (ID 5)
    • Kondensator (ID 6)

Zudem gibt es Eigenschaften, z.B. kann die ID 1 für "Spannung" stehen, ID 2 für "Farbe", ID 3 für "Toleranz" und so weiter. Einzig wichtig ist das einige Eigenschaften einen INT Wert haben und andere einen STRING.

Dafür ist es erst mal unerheblich was die IDs bedeuten, im Falle der Gruppen hab ich schon ein Datenbankmodell und die "Eigenschafts-IDs" sind fest einprogrammiert. Das Programm weiß auch ob die Eigenschaft INT oder STRING ist. Daher wäre die Tabelle "Eigenschaft" in deinem Beispiel unnötig.

Bei den "INT-Eigenschaften" brauch ich halt <, > und = , STRING wird natürlich nur auf Gleichheit geprüft.

Durchsuchen muss ich das ganze später nach Eigenschaften UND Gruppe. Eine Suchanfrage könnte z.B. heißen: "Finde alle Teile in der Gruppe "LED (ID 3)" die eine Spannung (ID 1) größer 30 haben und als Farbe (ID 2) ROT".

Ich hoffe mein Problem wird jetzt etwas verständlicher. Ich weiß nicht wie ich das mit der Gruppe einbauen kann außer jeder Eigenschaft auch die Gruppe zu hinterlegen, wodurch ich aber die Normalform verletzt, da ja die Gruppenzuordnung mehrfach gespeichert ist (und wohl auch schnell zu Inkonsistenz führt).

Meine Ansatz wäre folgendes Schema:
Code:
Tabelle Objekt
id | Name | Group
1  | LED1 | 3
2  | LED2 | 3
3  | LED3 | 3

Tabelle Eigenschaft_INT
id | object | eigenschaft | value
1  | 1      | 1           | 31
2  | 2      | 1           | 31
3  | 3      | 1           | 29

Tabelle Eigenschaft_STRING
id | object | eigenschaft | value
1  | 1      | 2           | "ROT"
2  | 2      | 2           | "GRUEN"
3  | 3      | 2           | "ROT"
Der oben genannte Suchabfrage müsst ein dem Fall das Objekt LED1 liefern.

Nur keine Ahnung wie ich das sauber in MySQL mache...
Mit Zitat antworten
  #8  
Alt 15.02.2013, 14:45:49
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
AW: Array speichern und durchsuchen

Objekt und Gruppe stehen offensichtlich in einer n:m Relation

Also sind auch dort 3 Tabellen nötig

Objekt
Gruppe
Gruppe_Objekt
Mit Zitat antworten
  #9  
Alt 15.02.2013, 14:48:37
julian-w julian-w ist offline
Anfänger
 
Registriert seit: Feb 2013
Alter: 31
Beiträge: 7
AW: Array speichern und durchsuchen

Zitat:
Zitat von DokuLeseHemmung Beitrag anzeigen
Objekt und Gruppe stehen offensichtlich in einer n:m Relation
Naja wäre das nicht eine 1:n Relation?
Eine Gruppe kann mehrere Objekte enthalten aber ein Objekt kann nur in eine Gruppe sein.

Edit:
Und die Eigenschaften doch auch oder?
Jedes Objekt kann mehrere Eigenschaften haben aber jede Eigenschaft kann nur einem Objekt zugeordnet werden ;)
Mit Zitat antworten
  #10  
Alt 15.02.2013, 15:40:27
DokuLeseHemmung DokuLeseHemmung ist offline
SELFPHP Experte
 
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
AW: Array speichern und durchsuchen

ÖK, bei der Gruppe kann das wirklich eine 1:n sein
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
vergleichen und bei Bedarf Array erweitern Tikiwiki PHP Grundlagen 4 12.11.2012 13:08:07
Arrayblind tlang78 PHP Grundlagen 2 30.06.2009 15:08:33
Array formatiert ausgeben Faang PHP Grundlagen 3 15.08.2008 01:47:43
Doppelte einträge aus einem Mehrdimensionalen Array aussortieren und löschen PHoenix_KM PHP für Fortgeschrittene und Experten 2 17.04.2008 18:19:53
Einzelne Daten aus Textdatei Auslesen azubinator PHP Grundlagen 153 17.12.2004 13:36:58


Alle Zeitangaben in WEZ +2. Es ist jetzt 15:19:57 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt