visão atualizável no mysql com várias tabelas e valores calculados
-
19-08-2019 - |
Pergunta
banco de dados enorme no MSSQL2005 com grande base de código, dependendo da estrutura do banco de dados.
Eu tenho cerca de 10 tabelas semelhantes todos eles contêm o nome do arquivo ou o caminho completo para o arquivo. O caminho completo é sempre dependente do artigo ID de modo que não faz sentido para armazená-lo no banco de dados. Obtendo dados úteis a partir dessas tabelas vai um pouco como isto:
SELECT a.item_id
, a.filename
FROM (
SELECT id_item AS item_id
, path AS filename
FROM xMedia
UNION ALL
-- media_path has a different collation
SELECT item_id AS item_id
, (media_path COLLATE SQL_Latin1_General_CP1_CI_AS) AS filename
FROM yMedia
UNION ALL
-- fullPath contains more than just the filename
SELECT itemId AS item_id
, RIGHT(fullPath, CHARINDEX('/', REVERSE(fullPath))-1) AS filename
FROM zMedia
-- real database has over 10 of these tables
) a
Eu gostaria de criar uma visão única de todas essas tabelas para que o novo código usando este desastre de dados não precisa saber sobre todas as diferentes tabelas de mídia. Eu também gostaria de usar essa exibição para inserir e atualizar declarações. Obviamente código antigo ainda contar com as tabelas para ser atualizado.
Depois de ler a página do MSDN sobre criação de pontos de vista em MSSQL2005 Eu não acho que uma exibição com SCHEMABINDING seria suficiente.
Como eu poderia criar uma visão tão atualizável?
Este é o caminho certo a seguir?
Solução
Você pode modificar vistas particionado, desde que satisfaçam determinadas condições.
Estas condições incluem ter um partitioning column
como uma parte da chave primária em cada tabela, e tendo um conjunto em que não se sobrepõe restrições de verificação para a coluna de particionamento.
Este não parece ser o seu caso.
No seu caso, você pode fazer qualquer um dos seguintes:
- Recriar você tabelas como de visualizações (com colunas computadas) para o seu legado macio para o trabalho, e referem-se a toda a tabela da nova macia
- Use gatilhos
INSTEAD OF
para atualizar as tabelas.
Outras dicas
Role para baixo na página que você ligado e você verá um parágrafo sobre as visões atualizáveis. Você não pode atualizar uma visão baseada em sindicatos, entre outras limitações. A lógica por trás disso é provavelmente simples, como deve Sql Server decidir sobre o que a tabela de origem / vista devem receber a atualização / inserir?
Se uma vista é baseado em várias tabelas de base, instrução UPDATE na visão pode ou não funcionar, dependendo do instrução UPDATE. Se a instrução UPDATE afeta várias tabelas base, servidor SQL gera um erro. Considerando que, se a actualização afecta apenas uma tabela base na vista, em seguida, a actualização irá trabalhar (Não corretamente sempre). As demonstrações inserir e excluir sempre falhará.
Em vez de gatilhos, são usados ??para corretamente UPDATE, inserção e exclusão de uma visão que é baseado em várias tabelas base. Os links a seguir tem exemplos, juntamente com um tutorial em vídeo sobre o mesmo.
EM VEZ DE INSERÇÃO Gatilho
EM VEZ DE ATUALIZAÇÃO gatilho
em vez de eliminar gatilho