Zeitliche Gültigkeit und Primär- / Fremdschlüsselbeziehungen

11

Ich habe einige der Orakel-Tutorials gelesen, die zeitliche Gültigkeit und Zeitmerkmale zeigen. In den Beispielen, die ich gelesen habe, wird in den Demo-Tabellen jedoch kein Primärschlüssel verwendet.

http://docs.oracle.com/cd/E16655_01/appdev.121/e17620/adfns_design.htm#ADFNS1005 http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/12c/r1/ilm /temporal/temporal.html

Sollten diesen Tabellen Primärschlüssel hinzugefügt werden? Ich frage, weil ich mich frage, wie eine dieser temporalen Tabellen von einer anderen Tabelle referenziert werden soll. Kann ich einen Fremdschlüssel von einer Zeittabelle zu einer anderen hinzufügen?

Wenn ich eine pk / Fremdschlüssel-Beziehung hinzufüge und dann die in der Tabelle referenzierte mit dem pk aktualisiere, zeigt die Tabelle mit dem fk auf einen Datensatz, der nicht mehr relevant ist. Brechen zeitliche Daten den normalen Primärschlüssel - Fremdschlüssel Beziehungen? Und wenn ja, wie wirkt sich dies auf die Leistung aus? Verwende ich einfach eine normale Spalte als 'Fremdschlüssel' und wähle die richtige für einen referenzierten Zeitraum in einer Abfrage aus?

Kennt oder hat jemand Beispiele oder Tutorials zur Hand, die zeitliche Daten bei normaler oder pseudo-normaler pk / fk-Nutzung anzeigen?

Vielen Dank

user1778606
quelle

Antworten:

2

Leider unterstützt SQL oder seine Implementierungen in allen RDBMS-Produkten zeitliche Beziehungen nicht vollständig.

Nur Teradata und DB2 verfügen über einige Funktionen, die Einschränkungen implementieren, die Zeit in zwei oder mehr Spalten haben.

Mein Beispiel:

SET SCHEMA TEST;

TABELLENPRODUKT ERSTELLEN (
product_ID INT NOT NULL,
suplier NVARCHAR (50),
PRIMARY KEY (product_ID)
);

CREATE TABLE CAMPAIGN (
Kampagnen-
ID INT NICHT NULL,
Produkt- ID INT NICHT NULL, Preis DECIMAL,
PRIMARY KEY (Kampagnen- ID )
)
;

ALTER TABLE CAMPAIGN
ADD CONSTRAINT XFK_campaign_productid AUSLÄNDISCHER
SCHLÜSSEL (product_ID) REFERENZEN PRODUKT (product_id)
ON DELETE NO ACTION;

Wenn Sie temporäre Spalten business_startdate und business_enddate sowie optional
transaction_starttime und transaction_endtime hinzufügen , können Sie die referenzielle Integrität nicht mehr erzwingen.

Möglicherweise müssen Sie Trigger oder gespeicherte Prozeduren oder Codierung auf Anwendungsebene implementieren, wenn Sie eine Einschränkung wie die folgende implementieren möchten:

CREATE TABLE CAMPAIGN (
Kampagnen- ID INT NICHT NULL,
Produkt-ID INT NICHT NULL,
Geschäftsstartdatum DATUM NICHT NULL,
Geschäftsenddatum DATUM NICHT NULL,
Transaktionsstartzeit TIMESTAMP NICHT NULL,
Transaktionsendzeit TIMESTAMP NICHT NULL,
Preis DECIMAL,
PRIMARY KEY (Kampagnen- ID , Geschäftsstartdatum
)
;

Für DB2 gibt es eine zeitliche Primärschlüsselkonstante in der folgenden Syntax:

TABELLENKAMPAGNE ERSTELLEN (
Kampagnen- ID INT NICHT NULL,
Produkt-ID INT NICHT NULL,
Geschäftsstartdatum DATUM NICHT NULL,
Geschäftsenddatum DATUM NICHT NULL,
Preis DEZIMAL,
ZEITRAUM BUSINESS_TIME (Geschäftsstartdatum, Geschäftsenddatum),
PRIMARY KEY (Kampagnen-ID, BUSINESS_T
)
;

Analytiker
quelle
Können Sie einen Link zu Funktionen bereitstellen, die Einschränkungen implementieren, die Zeit in zwei oder mehr Spalten haben?
AK
@AlexKuznetsov hier ist Link ibm.com/developerworks/data/library/techarticle/…
Analyst