Sono d'accordo con Michael McLosky, in una certa misura.
La domanda nella mia mente è: qual è il costo tecnico di avere più tabelle di note?
Nella mia mente, è preferibile consolidare la stessa funzionalità in una singola tabella. Inoltre, rende più semplice la creazione di report e altri sviluppi. Per non parlare di mantenere l'elenco delle tabelle più piccolo e più facile da gestire.
È un atto di equilibrio, è necessario cercare di predeterminare sia i vantaggi che i costi di fare qualcosa di simile. La mia preferenza personale è l'integrità referenziale del database. La gestione dell'applicazione dell'integrità dovrebbe, a mio avviso, essere limitata dalla logica aziendale. La banca dati dovrebbe garantire i dati sono sempre coerenti e valide ...
Per rispondere alla tua domanda in realtà ...
L'opzione che userei è un vincolo di controllo utilizzando un utente definito Funzione per verificare i valori. Funziona in M $ SQL Server ...
CREATE TABLE Test_Table_1 (id INT IDENTITY(1,1), val INT)
GO
CREATE TABLE Test_Table_2 (id INT IDENTITY(1,1), val INT)
GO
CREATE TABLE Test_Table_3 (fk_id INT, table_name VARCHAR(64))
GO
CREATE FUNCTION id_exists (@id INT, @table_name VARCHAR(64))
RETURNS INT
AS
BEGIN
IF (@table_name = 'Test_Table_1')
IF EXISTS(SELECT * FROM Test_Table_1 WHERE id = @id)
RETURN 1
ELSE
IF (@table_name = 'Test_Table_2')
IF EXISTS(SELECT * FROM Test_Table_2 WHERE id = @id)
RETURN 1
RETURN 0
END
GO
ALTER TABLE Test_Table_3 WITH CHECK ADD CONSTRAINT
CK_Test_Table_3 CHECK ((dbo.id_exists(fk_id,table_name)=(1)))
GO
ALTER TABLE [dbo].[Test_Table_3] CHECK CONSTRAINT [CK_Test_Table_3]
GO
INSERT INTO Test_Table_1 SELECT 1
GO
INSERT INTO Test_Table_1 SELECT 2
GO
INSERT INTO Test_Table_1 SELECT 3
GO
INSERT INTO Test_Table_2 SELECT 1
GO
INSERT INTO Test_Table_2 SELECT 2
GO
INSERT INTO Test_Table_3 SELECT 3, 'Test_Table_1'
GO
INSERT INTO Test_Table_3 SELECT 3, 'Test_Table_2'
GO
In questo esempio, l'istruzione di inserimento finale non funzionerà.
È richiesta l'integrità referenziale a livello di database o si può vivere con integrità referenziale gestita dall'applicazione? – tschaible