Pergunta

Eu ouvi muito sobre subtipagem tabelas ao projetar um banco de dados, e eu estou plenamente consciente da teoria por trás deles. No entanto, eu nunca realmente visto subtipos mesa em ação. Como você pode criar subtipos de tabelas? Estou usando o MS Access, e eu estou procurando uma maneira de fazê-lo em SQL, bem como através do GUI (Access 2003).

Felicidades!

Foi útil?

Solução

Um exemplo fácil seria ter uma tabela Pessoa com uma chave primária e algumas colunas nessa tabela. Agora você pode criar uma outra tabela chamada Student que tem uma chave estrangeira para a tabela pessoa (seu supertipo). Agora a tabela aluno tem algumas colunas que o supertipo não tem como GPA, Major, etc. Mas o nome, sobrenome e como seriam na tabela pai. Você sempre pode acessar o nome do aluno para trás na tabela Pessoa através da chave estrangeira na tabela de Student.

De qualquer forma, lembre-se o seguinte:

  • A hierarquia retrata relação entre supertipos e subtipos
  • Os supertipos tem atributos comuns
  • Os subtipos têm atributos uniques

Outras dicas

Os subtipos de tabelas é uma coisa conceitual em diagramas EER. Eu não vi um RDBMS (excluindo SGBDs objeto-relacional) que o suporta diretamente. Eles são geralmente implementadas em qualquer

  1. Um conjunto de colunas anuláveis ??para cada propriedade do subtipo em uma única tabela
  2. Com uma mesa para propriedades do tipo de base e algumas outras mesas com no máximo uma linha por tabela base que irá conter propriedades subtipo

A noção de mesa sub-tipos é útil quando se utiliza um mapeador ORM para a classe de produtos sub-tipo de hierarquia que exatamente modelos de domínio.

A tabela de sub-tipo terá tanto uma volta de chave estrangeira a seu pai que também é a chave primária da tabela sub-tipos.

Tenha em mente que na concepção de uma aplicação dependente, como com um aplicativo do Access, subtipos impor um custo pesado em termos de junta.

Por exemplo, se você tem uma tabela supertipo com três tabelas subtipo e você precisa exibir todos os três em um único formulário de uma vez (e você precisa mostrar não apenas a data supertipo), você acaba com uma escolha de usar três junções externas e Nz (), ou precisa de um UNION ALL de três instruções SELECT mutuamente exclusivas (um para cada subtipo). Nenhuma delas será editável.

Eu estava indo para colar alguns SQL a partir do primeiro aplicativo principal onde eu trabalhava com mesas super-/ subtipo, mas olhando para ele, o SQL é tão complicado que seria apenas pessoas Confuse. Isso não é tanto porque meu aplicativo foi complicado, mas é porque a natureza do problema é complexo - apresentando o conjunto completo de dados para o usuário, tanto super e subtipos, é por sua complexa natureza. Minha conclusão de trabalhar com ele foi que eu teria sido melhor com apenas uma mesa subtipo.

Isso não quer dizer que não é útil em algumas circunstâncias, só que formas encadernados de acesso não necessariamente torná-lo fácil para apresentar esses dados para o usuário.

Eu tenho um problema semelhante que eu estava trabalhando.

Embora a procura de um padrão repetitivo, eu queria me certificar de que não abandonou a integridade referencial, o que significava que eu não usaria uma solução (TABLE_NAME, PK_ID).

Eu finalmente liquidada em:

Base de mesa: CLIENTE

Tabelas Sub Tipo: pessoa, empresa, GOVT_ENTITY

Eu coloquei anuláveis ??campos PRERSON_ID, BUSINESS_ID e GOVT_ENTITY_ID no CLIENTE, com chaves estrangeiras em cada, e uma restrição de verificação que apenas um não é nulo. É fácil adicionar novos sub-tipos, só precisa adicionar a chave estrangeira anulável e modificar a restrição de verificação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top