Cześć, próbuje znaleźć odpowiedź na pytanie jak powinna wyglądać struktura prostej bazy danych.
Założenia
Baza będzie przechowywać dane projektów, zleceń przypisanych do danego projektu, oraz użytkowników z przypisanymi zleceniami, czyli coś w stylu prostego task managera z podziałem na projekty.
Mój obecny pomysł na strukturę tabel
Projekty
CREATE TABLE projects (
project_id INT AUTO_INCREMENT PRIMARY KEY,
project_name VARCHAR(255) NOT NULL,
/* reszta kolumn dla projektów */
);
Użytkownicy
CREATE TABLE users (
user_id INT AUTO_INCREMENT PRIMARY KEY,
user_name VARCHAR(255) NOT NULL,
user_lastname VARCHAR(255) NOT NULL
/* reszta kolumn dla użytkowników */
);
Zlecenia
CREATE TABLE tasks (
task_id INT AUTO_INCREMENT PRIMARY KEY,
task_project_id INT NOT NULL
task_assigned_by_id INT NOT NULL
task_assigned_to_id INT NOT NULL
/* reszta kolumn dla zlecenia */
FOREIGN KEY (task_project_id) REFERENCES projects(project_id)
FOREIGN KEY (task_assigned_by_id) REFERENCES users(user_id)
FOREIGN KEY (task_assigned_to_id) REFERENCES users(user_id)
);
Powyższa struktura działa tak jak powinna, ale co jeżeli projektów będzie 100, gdzie do każdego projektu będzie przypisane powiedzmy 1000 zleceń? Jeżeli dobrze rozumiem, to z każdym nowym projektem przykładowo pobieranie wszystkich zleceń z danego projektu będzie coraz bardziej obciążać bazę. Czy nie byłoby zatem lepiej tworzyć nową tabelę ze zleceniami dla każdego projektu?
Zlecenia
CREATE TABLE tasks_{id_projektu} (
task_id INT AUTO_INCREMENT PRIMARY KEY,
task_assigned_by_id INT NOT NULL
task_assigned_to_id INT NOT NULL
/* reszta kolumn dla zlecenia */
FOREIGN KEY (task_assigned_by_id) REFERENCES users(user_id)
FOREIGN KEY (task_assigned_to_id) REFERENCES users(user_id)
);
Nie znalazłem jednoznacznej odpowiedzi na to pytanie stąd też mój post. Z góry dziękuję za każdą odpowiedź.