Cos'è l'arco esclusivo nel database e perché è malvagio?

9

Stavo leggendo gli errori di progettazione di database più comuni fatti dallo sviluppatore Q & A sullo stackoverflow. Alla prima risposta c'era una frase sull'arco esclusivo:

An exclusive arc is a common mistake where a table is created with two or more foreign keys where one and only one of them can be non-null. Big mistake. For one thing it becomes that much harder to maintain data integrity. After all, even with referential integrity, nothing is preventing two or more of these foreign keys from being set (complex check constraints notwithstanding).

Davvero non capisco perché l'arco esclusivo sia malvagio. Probabilmente non ne capivo le basi. C'è qualche buona spiegazione sugli archi esclusivi?

    
posta Ali Arda Orhan 30.12.2014 - 11:03
fonte

3 risposte

7

Per quanto ho capito molto tempo fa, in un arco esclusivo una tabella contiene un numero di colonne che sono chiavi esterne ad altre tabelle, ma solo una di queste può essere impostata alla volta (a causa di qualche vincolo logico nel dominio che segue dal mondo reale). Poiché questa regola non può essere applicata al database, è possibile creare un record corrotto in cui più di una di queste chiavi esterne ha un valore.

Farò un esempio. Considera un'applicazione in cui un'azienda tiene traccia dei camion che utilizza per consegnare le merci. Un camion può essere solo in uno dei tre luoghi contemporaneamente: può essere con un dipendente, può essere in un garage o può essere in un negozio di manutenzione. Questo potrebbe essere modellato avendo un tavolo da carico con employeeId, parkingGarageId e maintenanceShopId, facendo riferimento alle tabelle Employee, ParkingGarage e MaintenanceShop. Non c'è modo di applicare la regola che solo uno di questi campi è compilato a livello del database. Un codice errato o qualcuno con accesso diretto al database potrebbe inserire un record con due o tre campi pieni, il che equivale a un danneggiamento dei dati nel database.

    
risposta data 30.12.2014 - 13:16
fonte
3

Non c'è nulla di male negli archi esclusivi. Applicare semplicemente la regola aziendale corrispondente utilizzando un vincolo di controllo. La maggior parte dei principali sistemi di gestione dei database supporta i vincoli di verifica (Oracle, SQL Server, PostgreSQL). Se utilizzi uno strumento di modellazione dei dati, è probabile che lo strumento generi automaticamente il codice per implementare il vincolo di controllo.

    
risposta data 13.03.2017 - 18:55
fonte
-1

L'arco esclusivo è molto utile nel design concettuale o logico. Ciò non significa che devi attuare in quel modo. Nell'esempio precedente, il progettista può decidere di implementare il progetto con tre tabelle. Uno per la posizione di parcheggio, uno per il dipendente e uno per il negozio di manutenzione.

    
risposta data 27.06.2018 - 16:47
fonte

Leggi altre domande sui tag