Hallo zusammen!
Ich bin gerade dabei ein Datenbankprojekt durchzuführen. Datenbankdesign steht soweit, der Import aus xml ist ebenfalls am laufen. Allerdings weiß ich nicht wie ich die Relationen zwischen den Tabellen hinbekomme, sprich wie ich die Tabellen untereinander verknüpft bekomme.
Hat vielleicht jemand Lust mir dabei zu helfen?
Datenbankdesign und SQL-Tabellen stelle ich dann gerne bereit.
Vielen dank schonmal!
Gruß
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören
Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler
PostgreSQL Service & Support
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Hallo Andreas!
Vielen Dank schonmal für deine Antwort! Ja ich habe mich schon näher mit SQL und PostgreSQL beschäftigt und auch bereits die Datenbank erstellt. Ich denke die Beziehungen stimmen soweit auch (Das ERM findet man im Anhang!) Doch jetzt stehe ich vor der Aufgabe die Datenbank mit Daten zu füllen. Die INSERT Statements sind dabei nicht das Problem, wohl aber wie ich die Relationen zwischen den Tabellen beim Einfügen der Daten per SQL Statements herstelle. Ich habe 6 "normale" Tabellen und 5 Relationstabellen.
Wenn du dir die Datenbank selbst anlegen möchtest hier der komplette SQL-Dump ohne die OWNED BY statements:
Die Tabellen werden nun mit Daten gefüllt die aus einer XML-Datei stammen, die folgendes Aussehen hat -> siehe Anhang!Code:CREATE TABLE artikel ( artikel_id integer DEFAULT nextval('public.artikel_artikel_id_seq'::text) NOT NULL, dok_nr integer, titel character varying(1000), inhalt text, anfangsseite integer, endseite integer, erfassungsdatum character varying(12), korrekturdatum character varying(12), fk_ausgabe_id integer ); CREATE SEQUENCE artikel_artikel_id_seq INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER SEQUENCE artikel_artikel_id_seq OWNED BY artikel.artikel_id; SELECT pg_catalog.setval('artikel_artikel_id_seq', 1, true); CREATE TABLE ausgabe ( ausgabe_id integer DEFAULT nextval('public.ausgabe_ausgabe_id_seq'::text) NOT NULL, heft_nr integer, jahr integer, jahrgang integer, fk_zeitschrift_id integer ); CREATE SEQUENCE ausgabe_ausgabe_id_seq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER SEQUENCE ausgabe_ausgabe_id_seq OWNED BY ausgabe.ausgabe_id; SELECT pg_catalog.setval('ausgabe_ausgabe_id_seq', 1, false); CREATE TABLE beteiligte_koerperschaften ( fk_artikel_id integer NOT NULL, fk_koerperschaft_id integer NOT NULL ); CREATE TABLE beteiligte_personen ( fk_person_id integer NOT NULL, fk_artikel_id integer NOT NULL ); CREATE TABLE keywords ( keywords_id integer DEFAULT nextval('public.keywords_keywords_id_seq'::text) NOT NULL, keywords character varying(100) ); CREATE SEQUENCE keywords_keywords_id_seq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER SEQUENCE keywords_keywords_id_seq OWNED BY keywords.keywords_id; SELECT pg_catalog.setval('keywords_keywords_id_seq', 1, false); CREATE TABLE koerperschaft ( koerperschaft_id integer DEFAULT nextval('public.koerperschaft_koerperschaft_id_seq'::text) NOT NULL, nachname character varying(1000) ); CREATE SEQUENCE koerperschaft_koerperschaft_id_seq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER SEQUENCE koerperschaft_koerperschaft_id_seq OWNED BY koerperschaft.koerperschaft_id; SELECT pg_catalog.setval('koerperschaft_koerperschaft_id_seq', 1, false); CREATE TABLE person ( person_id integer DEFAULT nextval('public.person_person_id_seq'::text) NOT NULL, nachname character varying(200), vorname character varying(200) ); CREATE SEQUENCE person_person_id_seq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER SEQUENCE person_person_id_seq OWNED BY person.person_id; SELECT pg_catalog.setval('person_person_id_seq', 1, false); CREATE TABLE rel_keywords_artikel ( fk_artikel_id integer NOT NULL, fk_keywords_id integer NOT NULL ); CREATE TABLE rel_koerperschaft_artikel ( fk_artikel_id integer NOT NULL, fk_koerperschaft_id integer NOT NULL ); CREATE TABLE rel_person_artikel ( fk_artikel_id integer NOT NULL, fk_person_id integer NOT NULL ); CREATE TABLE zeitschrift ( zeitschrift_id integer DEFAULT nextval('public.zeitschrift_zeitschrift_id_seq'::text) NOT NULL, name character varying(1000), kurzname character varying(200), issn character varying(9) ); CREATE SEQUENCE zeitschrift_zeitschrift_id_seq START WITH 1 INCREMENT BY 1 NO MAXVALUE NO MINVALUE CACHE 1; ALTER SEQUENCE zeitschrift_zeitschrift_id_seq OWNED BY zeitschrift.zeitschrift_id; SELECT pg_catalog.setval('zeitschrift_zeitschrift_id_seq', 1, false); COPY artikel (artikel_id, dok_nr, titel, inhalt, anfangsseite, endseite, erfassungsdatum, korrekturdatum, fk_ausgabe_id) FROM stdin; \. COPY ausgabe (ausgabe_id, heft_nr, jahr, jahrgang, fk_zeitschrift_id) FROM stdin; \. COPY beteiligte_koerperschaften (fk_artikel_id, fk_koerperschaft_id) FROM stdin; \. COPY beteiligte_personen (fk_person_id, fk_artikel_id) FROM stdin; \. COPY keywords (keywords_id, keywords) FROM stdin; \. COPY koerperschaft (koerperschaft_id, nachname) FROM stdin; \. COPY person (person_id, nachname, vorname) FROM stdin; \. COPY rel_keywords_artikel (fk_artikel_id, fk_keywords_id) FROM stdin; \. COPY rel_koerperschaft_artikel (fk_artikel_id, fk_koerperschaft_id) FROM stdin; \. COPY rel_person_artikel (fk_artikel_id, fk_person_id) FROM stdin; \. COPY zeitschrift (zeitschrift_id, name, kurzname, issn) FROM stdin; \. ALTER TABLE ONLY artikel ADD CONSTRAINT pk_artikel PRIMARY KEY (artikel_id); ALTER TABLE ONLY ausgabe ADD CONSTRAINT pk_ausgabe PRIMARY KEY (ausgabe_id); ALTER TABLE ONLY beteiligte_koerperschaften ADD CONSTRAINT pk_beteiligte_koerperschaften PRIMARY KEY (fk_artikel_id, fk_koerperschaft_id); ALTER TABLE ONLY beteiligte_personen ADD CONSTRAINT pk_beteiligte_personen PRIMARY KEY (fk_person_id, fk_artikel_id); ALTER TABLE ONLY keywords ADD CONSTRAINT pk_keywords PRIMARY KEY (keywords_id); ALTER TABLE ONLY koerperschaft ADD CONSTRAINT pk_koerperschaft PRIMARY KEY (koerperschaft_id); ALTER TABLE ONLY person ADD CONSTRAINT pk_person PRIMARY KEY (person_id); ALTER TABLE ONLY rel_keywords_artikel ADD CONSTRAINT pk_rel_keywords_artikel PRIMARY KEY (fk_artikel_id, fk_keywords_id); ALTER TABLE ONLY rel_koerperschaft_artikel ADD CONSTRAINT pk_rel_koerperschaft_artikel PRIMARY KEY (fk_artikel_id, fk_koerperschaft_id); ALTER TABLE ONLY rel_person_artikel ADD CONSTRAINT pk_rel_person_artikel PRIMARY KEY (fk_artikel_id, fk_person_id); ALTER TABLE ONLY zeitschrift ADD CONSTRAINT pk_zeitschrift PRIMARY KEY (zeitschrift_id); ALTER TABLE ONLY beteiligte_koerperschaften ADD CONSTRAINT fk_artikel_id FOREIGN KEY (fk_artikel_id) REFERENCES artikel(artikel_id); ALTER TABLE ONLY beteiligte_personen ADD CONSTRAINT fk_artikel_id FOREIGN KEY (fk_artikel_id) REFERENCES artikel(artikel_id); ALTER TABLE ONLY rel_keywords_artikel ADD CONSTRAINT fk_artikel_id FOREIGN KEY (fk_artikel_id) REFERENCES artikel(artikel_id); ALTER TABLE ONLY rel_koerperschaft_artikel ADD CONSTRAINT fk_artikel_id FOREIGN KEY (fk_artikel_id) REFERENCES artikel(artikel_id); ALTER TABLE ONLY rel_person_artikel ADD CONSTRAINT fk_artikel_id FOREIGN KEY (fk_artikel_id) REFERENCES artikel(artikel_id); ALTER TABLE ONLY artikel ADD CONSTRAINT fk_ausgabe FOREIGN KEY (fk_ausgabe_id) REFERENCES ausgabe(ausgabe_id); ALTER TABLE ONLY rel_keywords_artikel ADD CONSTRAINT fk_keywords_id FOREIGN KEY (fk_keywords_id) REFERENCES keywords(keywords_id); ALTER TABLE ONLY beteiligte_koerperschaften ADD CONSTRAINT fk_koerperschaft_id FOREIGN KEY (fk_koerperschaft_id) REFERENCES koerperschaft(koerperschaft_id); ALTER TABLE ONLY rel_koerperschaft_artikel ADD CONSTRAINT fk_koerperschaft_id FOREIGN KEY (fk_koerperschaft_id) REFERENCES koerperschaft(koerperschaft_id); ALTER TABLE ONLY beteiligte_personen ADD CONSTRAINT fk_person_id FOREIGN KEY (fk_person_id) REFERENCES person(person_id); ALTER TABLE ONLY rel_person_artikel ADD CONSTRAINT fk_person_id FOREIGN KEY (fk_person_id) REFERENCES person(person_id); ALTER TABLE ONLY ausgabe ADD CONSTRAINT fk_zeitschrift_id FOREIGN KEY (fk_zeitschrift_id) REFERENCES zeitschrift(zeitschrift_id);
Was mich nun interessiert ist wie die Herangehensweise speziell in meinem Fall hier oder generell bei dem Einfügen und Verknüpfen von Daten aussieht. Es gibt ja sicher einen Ansatz wie man dem Problem Herr wird. Damit wende ich mich mal an euch als Experten, da ich sowas wie gesagt noch nie gemacht habe
Schon mal vielen Dank für eure Hilfe!
Gruß
Geändert von andetsa (24.02.2010 um 11:46 Uhr)
Ich versteh noch immer nicht genau, was Dein Problem ist. Du hast eine Reihe von Tabellen, die untereinander via FK-Beziehungen verknüpft sind. Das sind diese Zeilen, hier mal ein Beispiel:
Damit kannst Du nur Werte für fk_person_id in der Tabelle rel_person_artikel eintragen, für die vorher in der Tabelle person ein Eintrag mit der gleichen person_id gemacht wurde.Code:ALTER TABLE ONLY rel_person_artikel ADD CONSTRAINT fk_person_id FOREIGN KEY (fk_person_id) REFERENCES person(person_id);
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen