Anfänerfrage zur Tabellenerstellung

Anfänerfrage zur Tabellenerstellung

am 20.10.2007 13:10:39 von Helmut Weber

Hallo,

ich möchte zu MySQL wechseln und habe gleich ein Problem bei dem ich hier um Hilfe bitte.

Ich habe eine Tabelle mit mehreren Millionen Datensätzen.
Um Platz zu sparen möchte ich z.B. die Spalte "Produkte" auslagern.
(Diese Spalte benötigt 255 Zeichen.)

Dazu wollte ich eine ReferenzDatei mit
Ref-Id Integer Auto-Zähler (Automatische ID erzeugen)
Produkt Char(255) Primärindex (Zur Vermeidung von Duplikaten)

Aber die Spalte Ref-ID kann ich nur mit Primärindex anlegen. Damit sind doppelte
Produkteinträge möglich.


Wo liegt hier mein Fehler?

M.f.G. Helmut Weber

Re: Anfänerfragezur Tabellenerstellung

am 20.10.2007 13:37:45 von Andreas Kretschmer

Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)

Re: Anfänerfrage zur Tabellenerstellung

am 20.10.2007 13:52:41 von Helmut Weber

Andreas Kretschmer schrieb:
> begin Helmut Weber wrote:
>> Hallo,
>
>> ich möchte zu MySQL wechseln und habe gleich ein Problem bei dem ich hier um Hilfe bitte.
>
> Von was, wenn man fragen darf?
Von Access mit einem kurzen Zwischenstepp mit MSDE
>
>> Ich habe eine Tabelle mit mehreren Millionen Datensätzen.
>> Um Platz zu sparen möchte ich z.B. die Spalte "Produkte" auslagern.
>> (Diese Spalte benötigt 255 Zeichen.)
>
>> Dazu wollte ich eine ReferenzDatei mit
>> Ref-Id Integer Auto-Zähler (Automatische ID erzeugen)
>> Produkt Char(255) Primärindex (Zur Vermeidung von Duplikaten)
>
>> Aber die Spalte Ref-ID kann ich nur mit Primärindex anlegen. Damit sind doppelte
>> Produkteinträge möglich.
>
>
>> Wo liegt hier mein Fehler?
>
> Erstelle einen unique index auf der Spalte Produkt. Entweder gleich im
> CREATE TABLE oder später.
>
> In PG geht das so:
>
> test=*# create table produkte (id serial primary key, name text unique);
> NOTICE: CREATE TABLE will create implicit sequence "produkte_id_seq" for serial column "produkte.id"
> NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "produkte_pkey" for table "produkte"
> NOTICE: CREATE TABLE / UNIQUE will create implicit index "produkte_name_key" for table "produkte"
> CREATE TABLE
> test=*# insert into produkte (name) values ('prod1');
> INSERT 0 1
> test=*# insert into produkte (name) values ('prod2');
> INSERT 0 1
> test=*# insert into produkte (name) values ('prod2');
> ERROR: duplicate key violates unique constraint "produkte_name_key"
>
>
>
>
> end
> Andreas

Tausend Dank.

Re: Anfänerfrage zur Tabellenerstellung

am 20.10.2007 14:06:00 von Dominik Echterbruch

Helmut Weber schrieb:
>
> Ich habe eine Tabelle mit mehreren Millionen Datensätzen.
> Um Platz zu sparen möchte ich z.B. die Spalte "Produkte" auslagern.
> (Diese Spalte benötigt 255 Zeichen.)

Platz sparen ist (zunächst mal) kein Argument für die Auslagerung von
Daten in eine andere Tabelle. Fehler durch Redundanzen oder Probleme mit
der Such-Performance sind Argumente für eine Auslagerung. Und nicht
zuletzt natürlich die Theorie der relationalen Datenbanken ;)

> Dazu wollte ich eine ReferenzDatei mit
> Ref-Id Integer Auto-Zähler (Automatische ID erzeugen)
> Produkt Char(255) Primärindex (Zur Vermeidung von Duplikaten)
>
> Aber die Spalte Ref-ID kann ich nur mit Primärindex anlegen.

Diese Aussage ist nicht 100%ig korrekt. Die Spalte mit dem
auto_increment muß indiziert sein. Von welchem Typ der Index ist, ist
aber egal.
Grundsätzlich ist es eine hervorragende Idee, einen Fremdschlüssel als
Primärindex zu definieren. Insofern ist deine Aussage OK.

> Damit sind
> doppelte Produkteinträge möglich.

Auch das stimmt so nicht. UNIQUE existiert. Nähere Infos dazu und auch
zu auto_increment findest du unter [1].

Aber mal eine ganz andere Frage: Von welcher Plattform kommen die Daten?
Dort scheinen ja eindeutige Indizes und Joins unbekannt zu sein. Wenn
du nicht von mehreren Millionen Datensätzen gesprochen hättest, hätte
ich Excel vermutet...

Ohne dich angreifen zu wollen: Nimm dir ein paar gute Bücher zum Thema
relationale Datenbanken und lies sie gründlich, bevor du anfängst, ernst
zu nehmende Projekte zu stemmen. Das wird dir *sehr* viel Ärger ersparen.

[1] http://dev.mysql.com/doc/refman/5.1/de/create-table.html

Grüße,
Dominik
--
Wo kämen wir denn hin, wenn jeder sagen würde wo kämen wir hin, aber
niemand gehen würde um zu sehen, wohin wir kämen, wenn wir gingen?
(Autor unbekannt)

Re: Anfänerfragezur Tabellenerstellung

am 20.10.2007 14:11:35 von Andreas Kretschmer

Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)

Re: Anfänerfrage zur Tabellenerstellung

am 20.10.2007 14:57:21 von Helmut Weber

Dominik Echterbruch schrieb:
> Helmut Weber schrieb:
>>
>> Ich habe eine Tabelle mit mehreren Millionen Datensätzen.
>> Um Platz zu sparen möchte ich z.B. die Spalte "Produkte" auslagern.
>> (Diese Spalte benötigt 255 Zeichen.)
>
> Platz sparen ist (zunächst mal) kein Argument für die Auslagerung von
> Daten in eine andere Tabelle. Fehler durch Redundanzen oder Probleme mit
> der Such-Performance sind Argumente für eine Auslagerung. Und nicht
> zuletzt natürlich die Theorie der relationalen Datenbanken ;)
>
>> Dazu wollte ich eine ReferenzDatei mit
>> Ref-Id Integer Auto-Zähler (Automatische ID erzeugen)
>> Produkt Char(255) Primärindex (Zur Vermeidung von
>> Duplikaten)
>>
>> Aber die Spalte Ref-ID kann ich nur mit Primärindex anlegen.
>
> Diese Aussage ist nicht 100%ig korrekt. Die Spalte mit dem
> auto_increment muß indiziert sein. Von welchem Typ der Index ist, ist
> aber egal.
> Grundsätzlich ist es eine hervorragende Idee, einen Fremdschlüssel als
> Primärindex zu definieren. Insofern ist deine Aussage OK.
>
>> Damit sind doppelte Produkteinträge möglich.
>
> Auch das stimmt so nicht. UNIQUE existiert. Nähere Infos dazu und auch
> zu auto_increment findest du unter [1].
>
> Aber mal eine ganz andere Frage: Von welcher Plattform kommen die Daten?
> Dort scheinen ja eindeutige Indizes und Joins unbekannt zu sein. Wenn
> du nicht von mehreren Millionen Datensätzen gesprochen hättest, hätte
> ich Excel vermutet...
>
Aus einer Anwendung in meiner Fa. Zu importieren und auszuwerten sind
ca. 5 GB im Datenformat CSV.

> Ohne dich angreifen zu wollen: Nimm dir ein paar gute Bücher zum Thema
> relationale Datenbanken und lies sie gründlich, bevor du anfängst, ernst
> zu nehmende Projekte zu stemmen. Das wird dir *sehr* viel Ärger ersparen.
>
Welche Bücher kannst du empfehlen?
(Eine Tabelle aufzusplitten und Importieren ist ein Kinderspiel!
Und schon hier habe ich Probleme bekommen! Hätte ich nicht geglaubt.)

> [1] http://dev.mysql.com/doc/refman/5.1/de/create-table.html
>
> Grüße,
> Dominik

Re: Anfänerfrage zur Tabellenerstellung

am 20.10.2007 15:06:16 von Helmut Weber

Andreas Kretschmer schrieb:
> begin Helmut Weber wrote:
>> Andreas Kretschmer schrieb:
>>> begin Helmut Weber wrote:
>>>> Hallo,
>>>> ich möchte zu MySQL wechseln und habe gleich ein Problem bei dem ich hier um Hilfe bitte.
>>> Von was, wenn man fragen darf?
>> Von Access mit einem kurzen Zwischenstepp mit MSDE
>
> Okay. Da kommt ja nun schon echtes DB-Feeling auf, gell?
>
>
>> Tausend Dank.
>
> Bitte. Möglicherweise ist ja MySQL auch nur ein kurzer Zwischenstepp...
>
>
> end
> Andreas
Ich hoffe, dass es kein Zwischenstepp ist.
Access & MSDE ist zu klein (2 GB).
Oracle und Co sind für einen PC überdimensioniert und einfach teuer.
Ich glaube mir MySQL eine guten Kompromiss zu haben.

Wie befürchtet habe ich aber noch zu wenig Kenntnisse von MySQL.
Hier muss ich noch an mir arbeiten. Leider

Gruß Helmut

P.S. Tausend Dank für die Antworten. Ich möchte nur eins sagen. SUPER !!!

Re: Anfänerfragezur Tabellenerstellung

am 20.10.2007 15:18:57 von Andreas Kretschmer

Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)

Re: Anfänerfrage zur Tabellenerstellung

am 20.10.2007 16:07:01 von Gregor Kofler

Helmut Weber meinte:

> Welche Bücher kannst du empfehlen?
> (Eine Tabelle aufzusplitten und Importieren ist ein Kinderspiel!
> Und schon hier habe ich Probleme bekommen! Hätte ich nicht geglaubt.)

Bücher zum Thema "relationale Datenbanken" oder "MySQL"? Die
Online-Ressourcen sind ohnedies üppigst etwa [1] oder [2], aber Google
erschlägt dich ja mit Treffern bei "relationale Datenbank" (die
Prinzipien kann man durchaus auch mit Access ausprobieren und üben).

Als Buch verwende ich den MySQL5-Wälzer von Michael Kofler [3] (keine
Verwandschaft), das _ich_ gut lesbar finde.

Gruß, Gregor


[1]
http://dev.mysql.com/doc/
[2]
http://www.edm2.com/0612/msql7.html
[3]
http://www.kofler.cc/mysql/mysqlbuch.html



--
http://www.gregorkofler.at ::: Landschafts- und Reisefotografie
http://www.licht-blick.at ::: Forum für Multivisionsvorträge
http://www.image2d.com ::: Bildagentur für den alpinen Raum