Estoy de acuerdo con Michael McLosky, hasta cierto punto.
La pregunta en mi mente es: ¿Cuál es el costo técnico de tener varias tablas de notas?
En mi opinión, es preferible consolidar la misma funcionalidad en una sola tabla. También facilita la creación de informes y otros desarrollos posteriores. Sin mencionar mantener la lista de tablas más pequeña y fácil de administrar.
Es un acto de equilibrio, debe intentar predeterminar tanto los beneficios como los costos de hacer algo como esto. Mi preferencia -personal es la integridad referencial de la base de datos. La administración de la integridad de la aplicación debería, en mi opinión, limitarse a la lógica comercial. La base de datos debe asegurar que los datos siempre es coherente y válido ...
Para responder a su pregunta en realidad ...
La opción que yo usaría es una restricción de comprobación utilizando un usuario definido Función para verificar los valores. Esto funciona en 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
En ese ejemplo, la instrucción de inserción final fallaría.
¿Se requiere integridad referencial a nivel de base de datos, o puede vivir con integridad referencial gestionada por la aplicación? – tschaible