Search the FirstSpirit Knowledge Base
Hallo,
wir haben eine externe MySQL Datenbank an das CMS angebunden.
Das Datenbankschema - basierend auf der Struktur der externen Datenbank - wird im CMS angelegt; allerdings ohne Views.
Hier ein Test für den Zugriff auf die besagte DB mit einer Tabelle und zwei Views:
Wir benutzen MySQL DB 5 und den dazu passenden JDBC-Treiber.
Voraussetzung dafür, dass Views im CMS erscheinen / zum Datenbankschema hinzugefügt werden können, ist, dass die Views einen Primary Key vom Typ NUMBER (also integer oder long) oder STRING (also varchar oder text) haben müssen.
Bei der folgenden View wäre der produkt_sys_pk eindeutig, was man aber wohl nicht wirklich in MySQL 5 definieren kann!?
Ich habe bereits einen SQL-Dump und einen Projekt-Export an den FirstSpirit Helpdesk gesendet und bekam folgende Antwort:
"ich habe heute das DDL auf unserer MySQL-DB (ebenfalls V5.0) eingespielt und konnte das Problem reproduzieren - sprich: bei der Aktion "Schema aus Datenbank erzeugen" wurde das View nicht mitimportiert.
Nach einer kurzen Recherche fand ich aber heraus, dass es unter MySql wohl gar nicht möglich ist einen Primary Key für ein View zu definieren (http://drupal.org/node/610896 z.B. unter Oracle dagegen geht es aber http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_8004.htm)
Ohne Primary Key kann also kein View zum Schema hinzugefügt werden. So einen Primary Key braucht aber FS, um einen Datensatz eindeutig zu verlinken."
Meine Frage ist nun, gibt es einen anderen Workaround bzw. eine Möglichkeit wie man für eine View in MySQL 5 einen PK festlegen kann?
Du kannst versuchen, die Informationen "per Hand" in das Schema zu integrieren. Über "Extern bearbeiten / XML-Schema" bekommt man die interne Beschreibung der Struktur. Wenn man sich an einer bestehenden Tabelle orientiert, sollte es möglich sein, das hinzubekommen. Statt des Tabellennames einfach den Datenbank-Namen des Views eintragen.
Hallo, ich habe es zwar in die externe Bearbeitung des XML-Schemas geschafft, allerdings wurde hier nur ein XML-Eintrag für die Tabelle an sich gemacht. Einträge für die beiden Views fehlen komplett.
Vor dem Test hatte ich das komplette Schema nochmal aus dem CMS entfernt und erneut wieder aufgenommen. Trotzdem erscheint nur die Tabelle:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element dbName="test" name="test" temporal="0" version="4.0">
<xs:complexType dbName="t_languages" name="TLanguages" readonly="1">
<xs:sequence>
<xs:element dbName="active" javaType="java.lang.String" length="1" name="Active" nullable="1" type="xs:string"/>
<xs:element dbName="cms_sprach_kuerzel" javaType="java.lang.String" length="3" name="CmsSprachKuerzel" nullable="1" type="xs:string"/>
<xs:element dbName="fk_adb_asset" javaType="java.lang.Integer" length="10" name="FkAdbAsset" type="xs:integer"/>
<xs:element dbName="fk_adb_asset2" javaType="java.lang.Integer" length="10" name="FkAdbAsset2" type="xs:integer"/>
<xs:element dbName="fk_language_parent" javaType="java.lang.Integer" length="10" name="FkLanguageParent" type="xs:integer"/>
<xs:element dbName="flagge" javaType="java.lang.String" length="250" name="Flagge" nullable="1" type="xs:string"/>
<xs:element dbName="icon" javaType="java.lang.String" length="250" name="Icon" nullable="1" type="xs:string"/>
<xs:element dbName="kopfbild" javaType="java.lang.String" length="250" name="Kopfbild" nullable="1" type="xs:string"/>
<xs:element dbName="kuerzel" javaType="java.lang.String" length="3" name="Kuerzel" nullable="1" type="xs:string"/>
<xs:element dbName="land_kennzeichen" javaType="java.lang.String" length="5" name="LandKennzeichen" nullable="1" type="xs:string"/>
<xs:element dbName="land_kurzbezeichnung" javaType="java.lang.String" length="12" name="LandKurzbezeichnung" nullable="1" type="xs:string"/>
<xs:element dbName="name" javaType="java.lang.String" length="80" name="Name" nullable="1" type="xs:string"/>
<xs:element dbName="sort" javaType="java.lang.Integer" length="7" name="Sort" nullable="1" type="xs:integer"/>
<xs:element dbName="sys_del" javaType="java.lang.String" length="2" name="SysDel" type="xs:string"/>
<xs:element dbName="sys_dlm" javaType="java.util.Date" length="19" name="SysDlm" type="xs:date"/>
<xs:element dbName="sys_doc" javaType="java.util.Date" length="19" name="SysDoc" type="xs:date"/>
<xs:element dbName="sys_klm" javaType="java.lang.Integer" length="10" name="SysKlm" type="xs:integer"/>
<xs:element dbName="sys_koc" javaType="java.lang.Integer" length="10" name="SysKoc" type="xs:integer"/>
<xs:element dbName="sys_pk" javaType="java.lang.Integer" length="10" name="SysPk" type="xs:integer"/>
<xs:element dbName="sys_state" javaType="java.lang.Integer" length="3" name="SysState" type="xs:integer"/>
</xs:sequence>
</xs:complexType>
<xs:key autoIncrement="1" dbName="primary" name="PRIMARY">
<xs:selector xpath="TLanguages"/>
<xs:attribute xpath="SysPk"/>
</xs:key>
</xs:element>
</xs:schema>
Herr Jodeleit meinte, dass sie sich das fehlende XML für die Views selbst zusammen bauen können. Dabei können Sie sich an der Definition für die bestehende Tabelle orientieren. Ggf. hilft auch Rough description of FirstSpirit internal database structures etwas weiter.
Als Alternative könnten sie noch folgendes probieren, sofern sie selbst Views definieren können:
Bauen Sie einen View, der den momentanen View entspricht, zusätzlich aber einen JOIN mit einer anderen Tabelle enthält, welche einen Primary Key besitzt. Vielleicht klappt es dann.
>das fehlende XML für die Views selbst zusammen bauen können
genau das wurde nun erfolgreich gemacht und nach folgender Syntax:
---------------------------
<xs:complexType dbName="my_view" name="my_view" readonly="1">
<xs:sequence>
<xs:element dbName="column0" javaType="java.lang.Integer" length="10" name="column0" type="xs:integer"/>
<xs:element dbName="column1" javaType="java.lang.String" length="255" name="column1" nullable="1" type="xs:string"/>
<xs:element dbName="column2" javaType="java.lang.Long" length="19" name="column2" nullable="1" type="xs:long"/>
</xs:sequence>
</xs:complexType>
<xs:key dbName="primary" name="PRIMARY">
<xs:selector xpath="my_view"/>
<xs:attribute xpath="column0"/>
</xs:key>
---------------------------
Was nur noch bleibt: die möglichen Änderungen in dem View "automatisch" (über eine eigene Implementierung) nach FirstSpirit zu übernehmen.
Danke für die Klarstellung.
Als Alternative könnten sie noch folgendes probieren, sofern sie selbst Views definieren können:
Kann man sich sparen, Views werden generell nicht unterstützt.
Durch die externe Bearbeitung des XML-Schemas klappt es nun wunderbar Views - egal ob sie nun tatsächlich einen Primary Key haben oder nicht - im CMS anzubinden.
Hierzu bearbeite ich das XML-Schema, kopiere mir einen bereits vorhanden XML-Eintrag (complexType) und passe die Felder entsprechend dem gewünschten View an.
Was mir noch aufgefallen ist und für andere User vielleicht auch hilfreich