MODELAGEM CONCEITUAL DE SISTEMAS DE INFORMAÇÃO Restrições de Cardinalidade Cardinalidade A B • a1 R • b1 • a2 • b2 • a3 • b3 • a4 • b4 • a5 • b5 Tipos de Relacionamento Binário Seja R(p1:E1, p2:E2) a cardinalidade entre p1 e p2 em R Card (p1; p2; R) = (min, max) onde min e max são os números mínimo e máximo de entidades do tipo E2 que podem estar relacionadas em R a qualquer entidade do tipo E1 a qualquer tempo Card (p2; p1; R) é definida analogamente obviamente: min ≥ 0 max > 0 e max ≥ min Cardinalidade A B • a1 pA R pB • b1 • a2 • b2 • a3 • b3 • a4 • b4 • a5 • b5 R(pA:A, pB,B) Card(pA, pB, R) = (0, 3) Card(pA, pB, R) = (1, 3) Exemplo Seja o tipo de relacionamento: Lê(leitor: Pessoa, materialDeleitura: Livro) cardinalidades Card (leitor; materialDeLeitura; Lê) = (0, 3) Card (materialDeLeitura; leitor; Lê) = (0, 1) Definição formal Seja R(p1:E1, p2:E2) Card (p1; p2; R) = (min, max) ↔ E1(e1) → min ≤ | {e2 | R(e1, e2)}| ≤ max Simplificações: Cmin (p1; p2; R) Cmax (p1; p2; R) Resultado Card (p1; p2) = (min, max) → min’ ≤ min e max’ ≥ max → Card (p1; p2) = (min’, max’) Definições Cmin (p1; p2; R) > 0 ↔ participação de E1 em R com papel p1 é TOTAL ou MANDATÓRIA Cmin (p1; p2; R) = 0 ↔ participação de E1 em R com papel p1 é PARCIAL ou OPCIONAL Cmax (p1; p2; R) = 1 ↔ há uma DEPENDÊNCIA FUNCIONAL entre p1 e p2 ↔ {p1} → {p2} Cmax (p1; p2; R) > 1 ↔ a correspondência é NÃO FUNCIONAL Cardinalidades não restritivas Cmin (p1; p2; R) = 0 Cmax (p1; p2; R) = ∞ Card (p1; p2; R) = (0, ∞) Representação em UML Mora ► pai(mãe) 0..2 * filho(a) 1..* residente Pessoa {«permanente»} * nativo * Nasceu 1 localDeNascimento 1 trabalhador localDeResidência Cidade {«permanente»} 0..1 localDeTrabalho Trabalha Card (p1; p2; R) = (min, max) representado na forma min..max próximo a p2 se min = max escreve-se um número se max = ∞ então escreve-se max = *. se min = 0 e max = ∞ então escreve-se apenas o * Representação em UML Mora ► pai(mãe) 0..2 * filho(a) 1..* residente Pessoa {«permanente»} * nativo * Nasceu 1 localDeNascimento 1 trabalhador localDeResidência Cidade {«permanente»} 0..1 localDeTrabalho Trabalha uma pessoa pode ter de 0 a muitos filhos e de 0 a 2 pais. todas as pessoas nasceram e moram numa cidade e opcionalmente trabalham pelo menos uma pessoa mora numa cidade pode ser que ninguém trabalhe nem seja nativo em alguma cidade Representação em UML Mora ► pai(mãe) 0..2 * filho(a) 1..* residente Pessoa {«permanente»} * nativo * Nasceu 1 localDeNascimento 1 trabalhador localDeResidência Cidade {«permanente»} 0..1 localDeTrabalho Trabalha a participação de Pessoa e Cidade em Mora é total a participação de Pessoa em Nasceu é total há uma correspondência funcional entre Pessoa e Cidade em Mora, Trabalha e Nasceu. Atributos Um atributo P(E1, E2) correspondente ao tipo de relacionamento R(e1: E1, p:E2) é dito ser monovalorado se a correspondência entre e1 e p é funcional, ou seja Cmax (e1, p, R) = 1 Se Cmax (e1, p, R) > 1 o atributo P é dito ser multivalorado O atributo é total se a participação de de E1 em R é total, ou seja Cmin (e1, p, R) = 1 Se Cmin (e1, p, R) = 0 o atributo é parcial. Atributos Em UML, a cardinalidade é mostrada perto do nome do atributo. A cardinalidade default é (1, 1), ou seja total e funcional. Pessoa nome: String hobby: String [*] fone: String [0..1] Tipos de Relacionamento n-ários Seja o tipo de relacionamento: Usa(Programador, Linguagem, Projeto) com o seguinte padrão de sentença: O programador <programador>usa a linguagem <linguagem> no projeto <projeto>. e a seguinte representação gráfica: Programador Usa Projeto Linguagem Tipos de Relacionamento n-ários Tipos ternários têm 12 cardinalidades. 1. 2. 3. 4. 5. 6. Card Card Card Card Card Card (programador, linguagem) (programador, projeto) (linguagem, programador) (linguagem, projeto) (projeto, programador) (projeto, linguagem) Tipos de Relacionamento n-ários 7. 8. 9. 10. 11. 12. Card Card Card Card Card Card (programador, linguagem; projeto) (programador, projeto; linguagem) (linguagem, projeto; programador) (programador; projeto, linguagem) (linguagem; programador; projeto) (projeto; programador, linguagem) Tipos de Relacionamento n-ários 7. 8. 9. 10. 11. 12. Card Card Card Card Card Card (programador, linguagem; projeto) (programador, projeto; linguagem) (linguagem, projeto; programador) (programador; projeto, linguagem) (linguagem; programador; projeto) (projeto; programador, linguagem) representadas em UML Definição formal Card (p1; p2; R) = (min, max) ↔ E1(e1) → min ≤ | {e2 | R(e1, e2)}| ≤ max Seja R(p1:E1,...,pn:En) e sejam p = {p1,...,pi} e q = {pi+1,...,pk} subconjuntos disjuntos dos papéis {p1,...,pn} Card (p; q; R) = (min, max) ↔ E1(e1) ... En(en) → min |{(ei+1,…,ek) | R(e1,…,ei.ei+1,…,ek,…,en)}| max Exemplos 1. 2. 3. 4. 5. 6. 7. 8. Card Card Card Card Card Card (programador, linguagem) = (0,2) (programador, projeto) = (0,5) (linguagem, programador) = (0, ∞) (linguagem, projeto) = (0, ∞) (projeto, programador) = (1, ∞) (projeto, linguagem) = (1, ∞) Card (programador, linguagem; projeto) = (0,5) Card (programador, projeto; linguagem) = (0,1) Exemplos 9. 10. 11. 12. Card (linguagem, projeto; programador) = (0, ∞) Card (programador; projeto, linguagem) = (0, 5) Card (linguagem; programador; projeto) = (0, ∞) Card (projeto; programador, linguagem) = (1, ∞) Cardinalidades insatisfatíveis Gerencia gerente 1 Empregado 0..1 subordinado Cardinalidades insatisfatíveis 2..* Pessoa 1 Trabalha 0..1 Éproprietário 1..* Empresa Outras notações Notação original (Chen) - máximo 1:1 1:N N:M cardinalidade (máximo) e modalidade (mínimo) máximo 1: dependência funcional 1:1 (0,1): (0,1) – (0,1): (1,1) – (1,1): (0,1) – (1,1): (1,1)