2009-05-28 4 views

Antwort

4

Es ist ein Kompromiss. Das übliche Argument gegen Fremdschlüssel ist, dass der Index für einen Fremdschlüssel beim Einfügen/Aktualisieren/Löschen einen gewissen Leistungsaufwand verursacht. Genau wie jeder Index.

Aber ein Index bietet auch einen großen Vorteil, wenn Sie über diese Spalte suchen.

SELECT * FROM Child WHERE parent_id = :id 

auch nicht unterschätzen den Aufwand für Waisenkinder des Suchens und bollixed Referenzen Reinigung, die die unvermeidliche Folge des Weglassens Fremdschlüssel-Constraints sind.

-- Typical chore: searching for orphaned child rows. 

SELECT c.* FROM Child c LEFT OUTER JOIN Parent p 
    ON (c.parent_id = p.parent_id) 
WHERE p.parent_id IS NULL; 

Es gibt auch einige Datenbankentwürfe, in denen Sie können keine Fremdschlüssel verwenden, wie Polymorphe Verbände oder Entity-Attribut-Wert. Aber diese Designs sind selbst Anti-Patterns.

1

Leistung. Beim Einfügen eines untergeordneten Datensatzes entstehen Kosten, um festzustellen, ob ein übergeordneter Datensatz vorhanden ist. Sie können immer noch auf den übergeordneten Datensatz zugreifen (vorausgesetzt, Sie haben eine parentID-Spalte in der untergeordneten Tabelle, nur keine referenzielle Integrität).

Verwandte Themen