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

|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP 
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |

24.12.2012, 13:04:10
|
Anfänger
|
|
Registriert seit: Dec 2012
Alter: 34
Beiträge: 3
|
|
Datenbank Modell Frage
Hallo zusammen,
ich benötige für eine sehr große Webseite ein paar Tipps zum Datenbank Design.
Für die Inhalte
Aktuell existiert eine Tabelle: Produkte (id, name_de, name_en, texte_de, texten, brutto, usw.) Am Design dieser Tabelle kann nichts geändert werden, da diese auch von einer anderen Webseite verwendet wird.
Für die textlichen Inhalte wollte ich folgende Tabelle erstellen Inhalte(id, titel_de, titel_en, text_de, text_en, usw.)
Für die Navigation zusammengefasst
Für die Navigation der Seite soll eine weitere Tabelle erstellt werden navigation(id, parent, reihenfolge) welche die beiden Tabellen Produkte und Inhalte zusammenfasst.
Diese Tabelle wird rekursiv durchgelaufen und so die Navigatiosnstruktur erstellt (parent ist eine Selbstreferenz auf id).
Jetzt würde ich gerne über JOIN Produkte und Inhalte beim Erstellen der Navigation einbeziehen, so dass der Titel gleich mit angezeigt werden kann.
Mein Problem
Ich habe verschiedene Lösungsansätze jedoch ist keiner zufriedenstellend.
1) Die id von Navigation in Produkte und Inhalte als Fremdschlüssel einfügen, dafür müsste ich aber die Produkte Tabelle bearbeiten. Des weiteren weiß ich nicht wie ich beim Auslesen der Datenbank mittels PHP von der Navigationstabelle auf Inhalte und Produkte komme.
2)ID von Produkte und Inhalte als Fremdschlüssel in Navigation eintragen, kann ich Fremdschlüssel von unterschiedlichen Tabellen in die gleiche Spalte eintragen oder muss ich jeweils eine eigene Spalte anlegen und die die nicht benötigt wird mit Null befühlen? Wie machen ich dann darauf eine SELECT, wie untershciede ich ob der Fremdschlüssel von Produkte oder Inhalte kommt.
Ich habe schon viel mit Datenbanken gearbeitet, leider bei so verschachtelten Tabellen immer meine Probleme. Eventuel, hat auch jemand einen komplett anderen Lösungsvorschlag.
Viele Grüße und frohe Weihnachten und Danke für jede Hilfe.
Timo
|

30.12.2012, 20:53:04
|
 |
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 76
Beiträge: 4.001
|
|
AW: Datenbank Modell Frage
Zitat:
Zitat von timoxy
Am Design dieser Tabelle kann nichts geändert werden, da <die übliche Ausrede>.
|
Aha. Bei solchen Reglementierungen tendiert meine Hilfebereitschaft gegen null.
|

30.12.2012, 23:13:28
|
Anfänger
|
|
Registriert seit: Dec 2012
Alter: 34
Beiträge: 3
|
|
AW: Datenbank Modell Frage
Ich verstehe nicht was du mir damit sagen möchtest. Zwei Webseiten sollen mit der gleichen Datenbank arbeiten. Leider ist im Rahmen der Programmierung der zweiten nicht vorgesehen, die erste komplett zu überarbeiten.
Eigentlich suche ich ja nur nach der richtigen JOIN Anweisung.
Ich bin allen dankbar, und freue mich über jeden Lösungsansatz.
Timo
|

31.12.2012, 00:00:26
|
 |
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 76
Beiträge: 4.001
|
|
AW: Datenbank Modell Frage
Zitat:
Zitat von timoxy
Ich verstehe nicht was du mir damit sagen möchtest.
|
Schade, daß Du kein Deutsch verstehst.
1. Du lieferst weder das CREATE TABLE noch ein paar INSERT INTO der betreffenden Tabellen. Nur eine fast nichtssagende Beschreibung der Tabellen.
2. das Beharren auf Konzept A, um es dann später so aufzubohren, daß es auch für Konzept B tauglich ist, ist sinnfrei.
3. auch wenn es dem heren Ziel der Normalisierung etwas widerspricht: idR. ist es so, daß bei 100 Abfragen ~ 99 * SELECT und vielleicht 1 * REPLACE INTO, UPDATE, DELETE oder INSERT INTO erfolgt. Also gestaltet man das DB Design gefälligst so, daß die Daten schnell und unkompliziert gelesen werden können. Jeder vermeidbare JOIN schlaucht Zeit.
Und warum? Weil es schon genug lahmarschige Internetpräsenzen gibt.
Zitat:
Ich habe schon viel mit Datenbanken gearbeitet, leider bei so verschachtelten Tabellen immer meine Probleme.
|
Ja klar hast Du Probleme. Ich hätte absolut keine Hemmungen, aus Konzept A + B ein Konzept C zu machen.
|

01.01.2013, 22:28:46
|
Anfänger
|
|
Registriert seit: Dec 2012
Alter: 34
Beiträge: 3
|
|
AW: Datenbank Modell Frage
Tabelle 1:
Code:
CREATE TABLE `help_navigation` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`sequence` int(5) NOT NULL,
`parent` int(10) NOT NULL,
`text_id` int(5) DEFAULT NULL,
`product_id` int(5) DEFAULT NULL,
`intern` varchar(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=20 ;
Tabelle 2:
Code:
CREATE TABLE `help_text` (
`id` int(5) NOT NULL AUTO_INCREMENT,
`name_de` varchar(100) NOT NULL,
`text_de` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
Tabelle 3:
Code:
CREATE TABLE `produkte` (
`id` int(5) NOT NULL AUTO_INCREMENT,
`name_de` varchar(100) NOT NULL,
`name_en` varchar(100) NOT NULL,
`kuerzel` varchar(6) NOT NULL,
`text_de` text NOT NULL,
`text_en` text NOT NULL,
//noch einige weitere Attribute
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=121 ;
Meine rekursive Funktion für die Navigation:
PHP-Code:
function getNavigationArrayNeu($parent_id, $depth = 999, $level = 0, $root) {
if ($level > $depth) return;
$dbNavigation = new db(); $dbNavigation -> read("SELECT n.id, n.parent, n.text_id, n.product_id, t.name_de as name, t.text_de as text FROM help_navigation as n LEFT JOIN help_text as t ON n.text_id = t.id WHERE n.parent = '$parent_id' ORDER BY n.sequence ASC");
if ($dbNavigation -> valueCount() == 0) { return; } while ($row = $dbNavigation -> lines()) {
$nav[$row['id']]['level'] = $level; $nav[$row['id']]['parent'] = $parent_id; $nav[$row['id']]['id'] = $row['id']; $nav[$row['id']]['name'] = $row['name']; $nav[$row['id']]['text_id'] = $row['text_id']; $nav[$row['id']]['product_id'] = $row['product_id']; $nav[$row['id']]['root'] = $root; $nav[$row['id']]['alias'] = domainstring($row['name']);
$back = getNavigationArrayNeu($row['id'], $depth, $level + 1, $root . domainstring($row['name']) . "/"); if (count($back) > 0) { $nav[$row['id']]['sub'] = $back; }
} return $nav; }
Wie schaffe ich es nun nicht nur die help_text sondern auch die produkte in die Navigation mit aufzunehmen.
|

02.01.2013, 23:35:39
|
 |
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 76
Beiträge: 4.001
|
|
AW: Datenbank Modell Frage
Du solltest Dich mal mit nested sets - Baumdarstellung in SQL - beschäftigen
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
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.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 12:37:26 Uhr.
|