| home | help | back | first | fref | pref | prev | next | nref | lref | last | post |
To: sapr3-news@mit.edu Date: Wed, 31 Aug 2005 12:30:18 +0000 (UTC) From: Christian Knappke <chknews@gmx.net> Message-ID: <Xns96C3938DF62AEHZqjX8Z9@news.sap-ag.de> From the keyboard of "Sascha Kiefer" <Kiefer.Sascha.Spam@web.de>: > Hallo, > > ich hatte neulich folgende Diskussion: > Ist es sinnvoller eine Tabelle mit einer GUID als > Primärschlüssel anzulegen und somit alle semantischen Attribute > unabhängig vom Schlüssel (und somit z.B. leichter änderbar zu > machen) und einen Sekundärindex über den "semantischen > Schlüssel" zu erzeugen, oder ist ein Design, wie es im R/3 > meistens vorkommt einen semantischen Schlüssel (Bsp. > Materialnummer) zu nehmen besser. > > Ein Kollege meinet, der semantische Schlüssel sei performanter, > da der Zugriff über Primärindizes schneller sei, weil diese > anders verwaltet werden würden. Ich konnte das eigentlich nicht > glauben (und nach allem was ich über Oracle weiß ergibt diese > Aussage IMHO auch keinen Sinn). Die Suche im Netz zu diesem > Thema war auch nicht sehr ergiebig. Was mich nur irritiert hatte > war, dass ein anderer Kollege ebenfalls meinte, er hätte im > Performanckurs mal sowas gehört. > > Kann einer von euch darüber eine Aussge machen? Ich versuch's mal. Üblicherweise soll der Primärschlüssel (Beispiel MARA: MANDT+MATNR) auch eine Eindeutigkeit der Schlüsselfelder(- kombination) über seine UNIQUE-Eigenschaft sicherstellen. Damit ist hier auf jeden Fall ein unique Index erforderlich, ob jetzt ein GUID-Feld existiert oder nicht. Außerdem ist ein Datenmodell nach der Implementierung statisch, so dass das Argument "leichter änderbar" IMHO nicht zieht. Bei MaxDB/SAP DB liegt eine Besonderheit in der Architektur vor. Hier ist nämlich jede Tabelle nach dem Primärschlüssel sortiert gespeichert (aka Clustered Index). Das bedeutet, dass INSERTs ggfs. Umsortierungen und Page-Splits erfordern. Das gilt besonders, wenn der GUID-Algorithmus gleichverteilte und keine stetig aufsteigenden Werte liefert. Bei Masseninserts können dann Performanceprobleme auftreten. Vielleicht meinte der Kollege das? Bei DBMSen, die INSERTs einfach hinten anhängen, spielt das natürlich keine Rolle. Auch sind die Pimärschlüssel den Sekundärindizes in keiner Weise bevorrechtigt, abgesehen von semantischen Überlegungen. Ebenso könnte bei MaxDB/SAP DB die Tabelle ohne Primärschlüssel angelegt werden, dann wird für die Tabelle ein interner Primärschlüssel (SYSKEY, 64 bit INT) generiert, der für jedes INSERT einfach hochgezählt wird. Ein semantischer "Primärschlüssel" ist dann einfach ein (unique) Sekundärindex. HTH Christian -- #include <std_disclaimer.h> /* The opinions stated above are my own and not necessarily those of my employer. */ Das Musical-Projekt zum Mitmachen: http://www.mitmachmusical.de/
| home | help | back | first | fref | pref | prev | next | nref | lref | last | post |