Hab ich OIDs und PKs richtig verstanden?

Der Entwurf von Datenstrukturen ist mir nicht fremd. Daher ist die Regel, dass Daten von ihrer Identifikation getrennt sein müssen, für mich so normal wie das Atmen. (z.B. kein PrimaryKey aus Name und Geburstdatum bilden).
Ich erzeuge also normalerweise für jede Tabelle oder Klasse (je nach verwendeten DBMS-Paradigma) eine ObjectID (OID).

Nun ist die PostGreSQL-Doku voll davon und auch PgAdmin III zeigt hierzu HIlfetexte an. Vielleicht liegt es an meinem Englisch, aber scheinbar wird hier keine konkrete Empfehlung in irgendeine Richtung ausgesprochen.

Soweit ich verstehe:
Intern hat jede Tabelle OIDs, daher ist “OID” auch als Feldname für mich als User nicht nutzbar. Bezieht sich diese OID auf “WITH OID”, oder ist das eine “andere” OID? Wenn ich also “WITH OID” weglassen, hat die Tabelle gar keine “interne OID”?
PrimaryKeys werden mit CONSTRAINTS angelegt. Fein!
Soweit richtig verstanden?

Nun mal von der ganz technischen Ebene - also Aufbau der Speicherstruktur und daraus resultierende Geschwindigkeit diversers DB-Operationen.
Soll ich die internen OIDs verwenden (würde mir ja reichen; z.B. für die ForeignKeys). Oder spricht etwas dafür, jedesmal eigenen PrimaryKeys (mit CONSTRAINTS) anzulegen?

Die OID’s in PostgreSQL waren früher (bis vielleicht Version 7.3 oder 7.4 oder so, lange her) Default. Die OID war dabei Unique über den kompletten DB-Cluster, jeder Record einer jeden Tabelle hatte seine OID, 32Bit. Und sie sorgten immer wieder für Ärger, das auszurollen erspare ich mir jetzt. Von daher sind diese jetzt nur noch aus Kompatibilitätsgünden da, default werden keine mehr angelegt.

Aber Fakt ist auch: jede Tabelle sollte einen PK haben, ja. das kann ein Serial sein oder auch ein natürlicher Wert, egal.

Ah, danke. Das erhellt die Sache für mich.

Thx!!!