Roland Kruggel wrote:
Am Dienstag Juni 17 2003 22:59 schrieb Yevgen Reznichenko:Guten Tag zusammen,
Am 06/17/2003 09:18 PM schrieb Roland Kruggel:
Falsch. Es wird zwar in der Adresstabelle eine Eindeutige NummerWas spricht gegen einen ID in jeder Tabelle?1. Im Falle des Kunden, Lieferanten, Rechnung, Lieferschein usw.
müssen wir sowieso eine *eindeutige* Nummer erzeugen und diese in
den Tabellen ablegen was hat es denn für ein Sinn eine zusätzliche
ID einzuführen? Für die Referenzierung ist Kundennummer usw.
vollkommen ausreichend da diese eindeutig ist. Was soll das
bringen?
gespeichert, das ist aber die ID. Die Adressnummer, Kundennummer,
Lieferantennummer etc. wird nicht in der AdressTabelle gespeichert
sondern in einer separaten Tabelle. VErknüpft über die ID.
Kann das sein dass wir immernoch uns die Tabellen unterschiedlich vorstellen? Mir schwingen vor den Augen:
Tabelle Attribute
Kunde Kundenummer, Name, .... Adresse Adr.-ID, Strasse, Nummer, Ort, PLZ, Land ... Kundadr. Kundennummer, Adr.-ID
usw.
Wie sieht deine Vorstellung von Tabellen?
Siehe meine Antwort auf Michaels Mail3. Man erzeugt eine ID für eine Tabelle, wenn diese zu eindeutigenDie eindeutige Referenz ist die ID. Integer sind viel schneller als
Referenzierung benötigt wird. Ist eine bereits vorhanden (egal ob
nummerisch oder alphanummerisch) so wird diese eindeutige Referenz
genommen.
char.
4. Zu der Aussage von Michael "der Overhead ist nicht so gross",Das werden wir nicht hinbekommen. Wir wollen uns ncht zu tode
kann ich folgendes sagen: Overhead ist riesig! Tabellen im
normalisierten Zustand sind normalerweise 2 bis 5 Spalten gross,
Normaliesieren.
Ich weiss nicht mit welchen Tabellen du gearbeitet hast, aber ich habe bis jetzt nur solche gesehen. Und die Normalisierung in die 3 Normalform muss schon sein.
nehmen wir nun die Mitte davon so bekommen wir 3,5 Spalten, die
wirklich benötigt werden, nun machen wir eine Spalte hinzu und
bekommen 4,5 Spalten im Durchschnitt! Ist es viel? Na, wenn man
sich DB im Bereich von 2 GB (und das sind die kleinen) anguckt so
mussten an deren Stelle nur durch die Hinzufügung von zusätzlicher
Spalte 2,57GB her, d.h. 570 MB umsonst! Ausserdem muss diese ID
von der DB verwaltet und erzeugt werden! Wozu dann der Aufwand,
wenn wir sowieso eine eindeutige Kundenummer, Lieferantennummer,
Rechnungsnummer, Lieferscheinnummer usw. haben?
Sag mir doch mal bitte, da wir gerade am rechnen sind, wieviel Adressen werden in deiner Tabellen mit 2,57GB gespeicher?
Du wirst auf einen Wert kommen den wir mit unserem System
warscheinlich nicht erreichen werden.
Warum? Das sind ganz realistische Werte, du darfst nicht vergessen dass nicht nur die Werte abgelegt werden müssen sondern auch Ihre Spezifikationen, Einschränkungen, Wertebreiche usw. Ausserdem wollen wir doch nicht nur Adressen speichern.
Zum anderen ob unsere Datenbank nun 2,5GB oder 3GB oder 5GB gr0ßDavon habe ich noch nichts gelesen, jedoch die Grösse von 2,57GB
wird, ist unerheblich. a) Mysql ist für solche größen durchaus
ausgelegt.
anstelle von 2 GB bedeutet dass unnötig viele Daten mitverwaltet
werden und diese müssen bei jeder Abfrage mitgeschleppt werden. Was
sehr in die Performance drückt.
Noch eine Berechnung
Wenn wir davon ausgehen das der User 25.000 AdressDaten gespeichert hat, und wir 8 Tabellen für die Adressenverwaltung benötigen, sieht die Rechnung folgender massen aus.
25.000 * 4Byte = 100.000 Byte * 8 Tabellen = 800.000 Byte / 1024 = 781,25 KB
Speicherplatz?
b) Die Geschwindigkeit ist auch bei diesen Größen sehr gut.
Nein. Bei der Geschwindigkeit kommt es nicht so sehr auf die wirkliche DB grösse an, sondern in wieweit diese optimiert für die Anfragen ist. Die Optimierung fängt schon bei der Erstellung von Tabellen an! Wir Diskutieren momentan nicht einmal um Optimierung sondern um Deoptimierung! Und wenn wir so oft auf die Kundennummer zugreifen sollten so legt man einen Index auf diese an um die Abfragezeit zu beschleunigen.
c) Plattenplatz kostet nichts mehr.
Oh doch, vielleicht auf der Festplatte nicht viel, aber bei den Backups schon.
Wie gesagt ich möchte nicht abstreiten dass in manchen Fällen esRichtig. Nicht in allen.
durch aus sinnvoll diese Nummer zu erzeugen nur weit nicht in
allen.
Jetzt verstehe ich etwas nicht, was ist nun in _JEDE_ oder "Nicht in allen"
Aber wenn wir das system erweitern müssen/wollen und wir brauchen
eine neue Tabelle kann es sehr vorteil sein eine ID zu haben um sie
zu verknüpfen.
Erstens, soweit ich weiss bittet DB eigene Mechanismen dafür um das statisch zu machen. Zweitens, wird eine neu Tabelle aus schon vorhanden benötigt so kann man immer einen VIEW erstellen. Und drittens warum kann zu dieser Referenzierung nicht die Kundennummer (oder was anderes) herangezogen werden?
cuYevgen.
--
Please do *not* send "Security Patch Notifications" or "Security
Updates"; this system isn't running a Micro$oft operating system.
And don't annoy me <mailto:postmaster@[127.0.0.1]> please :-D
cu
-- Projekt: Warenwirtschaft. Projektname: Jana Infos: http://jana.bbf7.de
-------------------------------------------------------------------- Zum AUSTRAGEN schicken Sie eine Mail an idefix-request@xxxxxxxxxxxxx mit dem Subject "unsubscribe". mailto:idefix-request@xxxxxxxxxxxxx?subject=unsubscribe
Mailarchive: //www.freelists.org/archives/idefix Probleme? Mail an mailto:rkruggel@xxxxxxx (deutsch)