Mam ten model:

enter image description here

Mam pracowników, którzy zawsze wykonują te same zadania w każdym projekcie, w którym się znajduje. Ponadto, aby uzyskać zadanie, pracownik potrzebuje jakiegoś materiału, ale nie zawsze jest to samo dla zadania, ale zależy to od projektu, który należy wykonać zadanie.

Cóż, w moim przypadku, chcę poznać pracowników projektu, więc zgodnie z tym modelem muszę uzyskać wszystkie zadania projektu, a później pracownicy zadań. Czasami może to zrobić, aby uzyskać wiele wierszy.

Zastanawiałem się jednak, czy wyznaczę bezpośredni związek między projektami a pracownikami, mogłem bezpośrednio uzyskać te informacje. Ale jeśli się nie mylę, może to być cykl, a ja przeczytałem, że cykle należy unikać.

Z materiałami byłoby mniej więcej taki sam, jeśli chciałbym poznać materiały, których potrzebuję do projektu, muszę uzyskać wszystkie zadania, a następnie materiały z każdego zadania. Myślałem w ten sam sposób, jeśli chcę potrzebnych materiałów do projektu, mogłem ustawić bezpośredni związek między projektem a materiałami, więc uniknęłbym duplikatów, ponieważ w wielu zadaniach może być również potrzebny w wielu zadaniach.

Jeśli bezpośredni związek nie byłby dobrym pomysłem, czy był lepszy sposób na pobieranie informacji, bez konieczności uzyskania wszystkich zadań we wszystkich zapytaniach?

Dzięki.

-1
Álvaro García 24 październik 2020, 21:43

1 odpowiedź

Najlepsza odpowiedź

Może to być bliższe, czego się szukasz. Należy jednak pamiętać, że nie ma to nic wspólnego z "wydajnością", zobacz mój komentarz.

-- Employee EMP exists.
--
employee {EMP}
      PK {EMP}
-- Task TSK exists.
--
task {TSK}
  PK {TSK}
-- Employee EMP is qualified for task TSK.
--
emp_tsk {EMP, TSK}
     PK {EMP, TSK}

FK1 {EMP} REFERENCES employee {EMP}
FK2 {TSK} REFERENCES task     {TSK}
-- Project PRO exists.
--
project {PRO}
     PK {PRO}
-- Project PRO requires task TSK.
--
pro_tsk {PRO, TSK}
     PK {PRO, TSK}

FK1 {PRO} REFERENCES project {PRO}
FK2 {TSK} REFERENCES task    {TSK}
-- Employee EMP is assigned to task TSK
-- of project PRO.
--
emp_pro_tsk {EMP, PRO, TSK}
         PK {EMP, PRO, TSK}

FK1 {PRO, TSK} REFERENCES pro_tsk {PRO, TSK}
FK2 {EMP, TSK} REFERENCES emp_tsk {EMP, TSK}
-- Material MAT exists.
--
material {MAT}
      PK {MAT}
-- Material MAT is associated with task TSK.
--
tsk_mat {TSK, MAT}
     PK {TSK, MAT}

FK1 {MAT} REFERENCES material {MAT}
FK2 {TSK} REFERENCES task     {TSK}

-- Note: "associated" means
-- may (or may not) be required.
-- Material MAT is required for task TSK of project PRO.
--
pro_tsk_mat {PRO, TSK, MAT}
         PK {PRO, TSK, MAT}

FK1 {PRO, TSK} REFERENCES pro_tsk {PRO, TSK}
FK2 {TSK, MAT} REFERENCES tsk_mat {TSK, MAT}

Uwaga:

All attributes (columns) NOT NULL

PK = Primary Key
AK = Alternate Key   (Unique)
FK = Foreign Key
1
Damir Sudarevic 25 październik 2020, 12:59