国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

MySQL – komplexe hierarchische Beziehungen – mehrere M:N?
P粉354948724
P粉354948724 2024-03-29 18:28:45
0
1
600

Ich habe eine MySQL-Abfrage, die ich mit PHP verwende, um hierarchisches JSON für einen d3.js-Baum/Dendrogramm zu erstellen.

Fiddle zum Anzeigen des Schemas und vorhandener Abfragen.

Ich denke jetzt darüber nach, wie ich eine zus?tzliche Datenbeziehung D zwischen ProgrammergebnisdatenO und EinheitendatenU und Entwicklungsebenendaten hinzufügen kann, bei der es sich um eine Viele-zu-Viele-Beziehung handelt.

Es gibt nur drei Arten von D, wie im Bild unten gezeigt.

Konzeptzeichnung, die ich brauche:

Jedes U ist nur mit einem D von jedem O verbunden (aus Gründen der übersichtlichkeit wird nur ein O-Zweig angezeigt).

Du musst also ein Nachkomme von D und ein Enkel von O sein. Für andere O-Zweige kann dasselbe U den gleichen oder einen anderen Typ von D haben.

Wie Sie in der Geige sehen k?nnen, wird die Beziehung zwischen O und U derzeit über eine Nachschlage-/Beziehungstabelle program_outcome_unit_lookup implementiert.

Au?erdem ist es m?glich, die Nachschlagetabelle zu ?ndern, sodass Sie anstelle der program_outcome_unit_lookup-Tabelle zwei Nachschlagetabellen haben k?nnen, die m?glicherweise funktionieren:

O -> U

D -> U

Irgendwelche Ideen, wie man das erreichen kann?

Das PHP nach der Abfrage (nicht in der Datenbank-Fiddle...) lautet wie folgt, ist jedoch m?glicherweise nicht für die L?sung relevant, da es sich im Wesentlichen um ein Datenbankproblem handelt.

$result = $connection->query($query);
$data = array();
while ($row = $result->fetch_object()) {
    $data[$row->global_id] = $row;
}

$roots = array();
foreach ($data as $row) {   
    $row->type = end(explode(",",(implode(array_slice(explode ( ':',  $row->global_id), -2, 1)))));
    if ($row->parent_global_id === null) {
        $roots[]= $row;
    } else {
        $data[$row->parent_global_id]->children[] = $row;
    }
    unset($row->parent_global_id);
    unset($row->global_id);
}

$json = json_encode($roots);

$json = trim($json, '[]');

$fp = fopen('data.json', 'w');
fwrite($fp, $json);
fclose($fp);

Aktualisiert

Sehen Sie sich das erweiterte Konzeptdiagramm mit zwei Zweigen an:

P粉354948724
P粉354948724

Antworte allen(1)
P粉427877676

您的模型似乎是:每個(唯一)元組 (O, U) 都被分配了一個強制值 D

您可以通過向 program_outcome_unit_lookup 表添加 D 列來實現(xiàn)此模型:

CREATE TABLE `program_outcome_unit_lookup` (
  `program_outcome_unit_lookup_pk` int(6) NOT NULL AUTO_INCREMENT,
  `program_outcome_fk` int(2) NOT NULL,
  `devdata_fk` int(2) NOT NULL,
  `unit_fk` int(2) NOT NULL,
  PRIMARY KEY (`program_outcome_unit_lookup_pk`),
  UNIQUE KEY (`program_outcome_fk`, `unit_fk`)
);

(program_outcome_fk, unit_fk) 也可以是您的主鍵,但無論哪種方式,它都必須是唯一的(您當前沒有強制執(zhí)行此約束)。

現(xiàn)在,每個 U 都可以是任意多個 O 的成員,但根據(jù)要求,“每個 U 將僅與每個 D 關聯(lián)”。

例如從更新的圖表中存儲 U1O1-D2-U1O2-D1-U1),您可以將值 ((1,2,1),(2,1, 1))。根據(jù)要求,您還不能添加例如O2-D2-U1,因為它會違反唯一約束。

您還應該為 D 添加一個新表。如果不是每個 O 都允許使用每個 D (例如,如果不允許 O2 分支使用 D1),則還需要一個表 (O, D),否則沒有必要。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage