Meine Datenbank hat 7 Tabellen: Die eine ist die übergeordnete (Feeds) und die andere 3 sind die untergeordneten (öffentliche Feeds, private Feeds, generierte Feeds) einer isA-Beziehung. Es gibt eine Tabelle "Subskriptionen" mit einem Fremdschlüssel in der Feed-Tabelle. Jeder Benutzer kann einen Feed eines beliebigen Typs abonnieren. Das Problem ist, dass die Ansicht für jeden Feedtyp unterschiedlich ist. Das bedeutet, dass ich für jeden abonnierten Feedtyp unterschiedliche Links generieren muss. Unter dem aktuellen Schema muss ich 3 Abfragen durchführen, um den Typ des Feeds aus der Feed-ID zu erhalten. Gibt es eine bessere Lösung für dieses Problem?Wiederherstellen von Typen über eine Isa-Beziehung
Antwort
Sie können eine Ansicht verwenden, um die untergeordneten Elemente den übergeordneten Elementen vorher beizuordnen, und um ein konsistentes Ergebnis unabhängig vom untergeordneten Typ zu erhalten. Zum Beispiel:
create view feed_links as
select f.feed_name
, case f.feed_type
when 'public' then pub.x + pub.y
when 'private' then pri.z
when 'generated' then gen.v + gen.w
end as link
from feeds f
left outer join public_feeds pub on pub.feed_id = f.feed_id
left outer join private_feeds pri on pri.feed_id = f.feed_id
left outer join generated_feeds gen on gen.feed_id = f.feed_id
where ...;
Oder wenn Ihre Feeds Tabelle nicht über eine feed_type Spalte (oder gleichwertig):
create view feed_links as
select f.feed_name
, case when pub.feed_id is not null then pub.x + pub.y
when pri.feed_id is not null then pri.z
when gen.feed_id is not null then gen.v + gen.w
end as link
from feeds f
left outer join public_feeds pub on pub.feed_id = f.feed_id
left outer join private_feeds pri on pri.feed_id = f.feed_id
left outer join generated_feeds gen on gen.feed_id = f.feed_id
where ...;
Hallo, danke für die Antwort. Allerdings habe ich es nicht bekommen, da es in der Elterntabelle kein feed_type-Feld gibt. –
Siehe aktualisierte Antwort –
- 1. Iterieren über eine Liste von Typen
- 2. Abstraktion über eine Folge von Typen
- 3. Anzeigen von Grenzen über höherwertige Typen
- 4. Abstraktion über Typen von Nicht-Typ-Vorlagenparametern
- 5. wiederherstellen/wiederherstellen Tabelle
- 6. Wiederherstellen der Anwendung über die Taskleiste
- 7. Reflexion über geerbte generische Typen
- 8. Wiederherstellen und Wiederherstellen Szenario
- 9. System.Management.ManagementEventWatcher - Wiederherstellen von Verbindung
- 10. Wiederherstellen von In-App-Kauftransaktionen
- 11. Wiederherstellen von Subversion Korruption
- 12. Wiederherstellen von Wurzelknoten
- 13. svn von changeset wiederherstellen
- 14. Mercurial: Wiederherstellen von Dateien
- 15. Wiederherstellen von WindowState von Minimiert
- 16. Wiederherstellen von Perforce-Arbeitsbereich
- 17. eine Datenbank in eine andere Instanz von tridion Wiederherstellen
- 18. UITableViewCells Anzeigen über Zellen anderer Typen
- 19. Wiederherstellen von Dateien von Git Checkout
- 20. Reduce mit undThen über Funktionen verschiedener Typen
- 21. Mime-Typen über FTP erhalten In PHP
- 22. Elasticsearch - Duplizieren von Typen?
- 23. Sammeln Individuelle Post-Typen über Tags
- 24. Über die nicht nullbare Typen Debatte
- 25. Unity 2.0 registriert generische Typen über XML
- 26. Wiederherstellen von verwaisten Andock-Volumes
- 27. Senden eines Arrays von primitiven Typen über einen ClientRPC-Aufruf
- 28. Wiederherstellen einer Datenbank von C#
- 29. Elasticsearch NEST Abfrage über mehrere Typen
- 30. Wiederherstellen von Android Studio Schriftart
Welche zusätzlichen Informationen in den untergeordneten Tabellen gespeichert wird - es ist wie du mir klingt wirklich brauche sie nicht. Wird ein Feed entweder öffentlich ODER privat ODER generiert? Können Sie die Dinge nicht vereinfachen, indem Sie den feed_type in der übergeordneten Feed-Tabelle speichern und die untergeordneten Tabellen wegwerfen? –
Es gibt andere Einschränkungen für jeden Feed, zum Beispiel private Feeds haben ein Passwort und Benutzernamen abgelegt, generierte Feeds können mit einem Editor usw. verbunden werden ... –