I’m building a Project management DB, learning as I go along.
Is it better for tblProject to point to ClientID, TaskID, SupplierID, or is it better for tblClient, tblTask and tblSupplier to point to ProjectID? Why?
Thanks
Let me guess:
- Each project has one client.
- Each project has many tasks.
- Each project has many suppliers.
That gives 4 lists of clients, tasks, projects and suppliers plus 2 mapping tables for the many-to-many relations:
CREATE TABLE CLIENTS(
N VARCHAR(30) NOT NULL,
ID INT IDENTITY
);
CREATE TABLE PROJECTS(
CID INT NOT NULL,
N VARCHAR(30) NOT NULL,
ID INT IDENTITY,
FOREIGN KEY (CID) REFERENCES CLIENTS (ID)
);
CREATE TABLE SUPPLIERS(
N VARCHAR(30) NOT NULL,
ID INT IDENTITY
);
CREATE TABLE TASKS(
N VARCHAR(30) NOT NULL,
ID INT IDENTITY
);
CREATE TABLE PROJECTS_SUPPLIERS(
PID INT,
SID INT,
PRIMARY KEY (PID,SID),
FOREIGN KEY (PID) REFERENCES PROJECTS(ID),
FOREIGN KEY (SID) REFERENCES SUPPLIERS(ID)
);
CREATE TABLE PROJECTS_TASKS(
PID INT,
TID INT,
PRIMARY KEY (PID,TID),
FOREIGN KEY (PID) REFERENCES PROJECTS(ID),
FOREIGN KEY (TID) REFERENCES TASKS(ID)
);