Ich suche eine Datenbank-Lösung für den Umgang mit Szenario wie folgt:Erstellen Sie eine Tabelle, um gemeinsam genutzte Attribute zwischen Tabellen zu speichern, wie Sie mit Composite Keys umgehen?
Eine Menge Tabellen: TableA, TableB, TableC ... teilen einige Attribute (Felder), möchte ich diese gemeinsamen Attribute in einer Tabelle speichern , nennen wir es Shared Table. wie folgt aus:
TableA:
| KeyA | Shared Attr.1 | ... | Other Attr. |
| A_1 | A_SValueA1 | ... | A_OValueA1 |
TableB:
| KeyB | Shared Attr.1 | ... | Other Attr. |
| B_1 | B_SValueA1 | ... | B_OValueA1 |
Shared Table:
| KeyShare | EntityType | Shared Attr.1 | ... |
| A_1 | A | A_SValueA1 | ... |
| B_1 | B | B_SValueA1 | ... |
Natürlich werde ich eine Tabelle erstellen für jede Tabelle bestimmte Attribute zu speichern.
Aber ich brauche dieses Problem zu lösen, Tabelle C, die ich auch seine gemeinsame Attribute in SharedTable speichern möchten, hat zusammengesetzte Schlüssel, wie folgt aus:
TableC:
| KeyC1 | KeyC2 | Shared Attr.1 | ... | Other Attr. |
| C1_1 | C1_2 | C_SValueA1 | ... | C_OValueA1 |
So kann ich nicht nur damit umgehen wie TableA und TableB. Gibt es ein gutes Design, um Composite-Tasten in Tabelle wie C zu behandeln? Ich bin mir sicher, dass das nicht ein paar neue Fragen sind, viele Leute haben vielleicht konfrontiert und es gelöst, aber ich habe viel gesucht und konnte keine vorhandenen Fragen finden.
In der Tat ist dieses Szenario als Alternative von EAV Antipattern entwickelt, weil TableA/B/C der gleichen Klasse sind, so haben sie Attribute geteilt, und sie wirken als Unterklasse, so dass sie spezielle Attribute .
In Klassenebene sind sie die gleichen Dinge, sie können verglichen, sortiert, berechnet werden, so dass sie in einer Tabelle platziert werden können.
Ich bedaure haben. Ich habe mich sehr angestrengt und kann nicht verstehen, was Sie erreichen wollen. Ich weiß, wie ich eine SharedTable aus TableA und TableB erstelle. Aber was Sie mit TableC machen wollen, ist mir ein Rätsel. –
@Boris Shchegolev Ich möchte geteilte Attribute von TableC in SharedTable speichern, genau wie ich es mit TableA und TableB mache. Aber TableC hat mehr als einen Primärschlüssel, wenn SharedTable nur einen hat. – Blangero
Scheint wie eine Variante der One True Lookup Table Anti-Pattern. –