MySQL加入多个表+ FK

时间:2014-04-18 22:25:23

标签: mysql sql database

作为练习,我正在构建我的第一个SQL数据库。我试图为我的数据库中的所有表创建语句。我想知道是否可以删除任何外键?

我的第二个问题是如何对这个在4个或更多表上使用连接的数据库进行查询。

任何答案都会得到满足!

CREATE TABLE CLUB(
cl_id       INT     PRIMARY KEY     NOT NULL,
naam        TEXT                    NOT NULL,
adres       VARCHAR(200)                NOT NULL,
dtm_oprichta    TEXT                    NOT NULL
);


CREATE TABLE STADION(
sta_id      INT     PRIMARY KEY     NOT NULL,
cl_id       INT     REFERENCES CLUB(cl_id),
naam        TEXT                    NOT NULL,
adres       VARCHAR(200)                NOT NULL,
capaciteit  INT                 NOT NULL,
dtm_bouw    TEXT                    NOT NULL
);

CREATE TABLE TECHNISCHDIRECTEUR(
td_id       INT     PRIMARY KEY     NOT NULL,
cl_id       INT     REFERENCES CLUB(cl_id),
naam        TEXT                    NOT NULL,
adres       VARCHAR(200)                NOT NULL,
salaris     REAL                    NOT NULL,
nationaliteit   TEXT                    NOT NULL,
geslacht    CHAR                    NOT NULL,
dtm_geboorte    TEXT                    NOT NULL
);

CREATE TABLE FINANCIEELDIRECTEUR(
fd_id       INT     PRIMARY KEY     NOT NULL,
cl_id       INT     REFERENCES CLUB(cl_id),
naam        TEXT                    NOT NULL,
adres       VARCHAR(200)                NOT NULL,
salaris     REAL                    NOT NULL,
nationaliteit   TEXT                    NOT NULL,
geslacht    CHAR                    NOT NULL,
dtm_geboorte    TEXT                    NOT NULL
);


CREATE TABLE HOOFDTRAINER(
ht_id       INT     PRIMARY KEY     NOT NULL,
cl_id       INT     REFERENCES CLUB(cl_id),
td_id       INT     REFERENCES TECHNISCHDIRECTEUR(td_id),
naam        TEXT                    NOT NULL,
adres       VARCHAR(200)                NOT NULL,
salaris     REAL                    NOT NULL,
nationaliteit   TEXT                    NOT NULL,
geslacht    CHAR                    NOT NULL,
dtm_geboorte    TEXT                    NOT NULL
);


CREATE TABLE ASSISTENTTRAINER(
at_id       INT     PRIMARY KEY     NOT NULL,
cl_id       INT     REFERENCES CLUB(cl_id),
ht_id       INT     REFERENCES HOOFDTRAINER(ht_id),
naam        TEXT                    NOT NULL,
adres       VARCHAR(200)                NOT NULL,
salaris     REAL                    NOT NULL,
nationaliteit   TEXT                    NOT NULL,
geslacht    CHAR                    NOT NULL,
dtm_geboorte    TEXT                    NOT NULL
);

CREATE TABLE SPELER(
sp_id       INT     PRIMARY KEY     NOT NULL,
cl_id       INT     REFERENCES CLUB(cl_id),
ht_id       INT     REFERENCES HOOFDTRAINER(ht_id),
naam        TEXT                    NOT NULL,
adres       VARCHAR(200)                NOT NULL,
salaris     REAL                    NOT NULL,
nationaliteit   TEXT                    NOT NULL,
geslacht    CHAR                    NOT NULL,
dtm_geboorte    TEXT                    NOT NULL,
positie     TEXT                    NOT NULL,
rugnummer   INT                 NOT NULL
);

1 个答案:

答案 0 :(得分:0)

1)你可以删除外键吗?看看你的表名:

STADION: cl_id     - Identifies a club associated to a stadium. 
TECHNISCHDIRECTEUR cl_id     - Identifies a club associated to a Technical Director
FINANCIEELDIRECTEUR cl_id     - Identifies a club associated to a Financial Director

如果您删除任何这些外键,您将失去识别他们属于哪个俱乐部的能力!所以,我会说,保留它们。

2)所以这是一个连接所有四个表的示例查询。这个例子显示了每个俱乐部的体育场,技术总监和财务总监,如果有的话!假设每个俱乐部只有一个体育场\技术总监\财务总监。如果他们有多个,你会看到俱乐部行重复(但正如我所说,这只是一个简单的例子)。

Select c.cl_id as ClubId, c.naam as Club, td.naam as TechnicalDirector, fd.naam as FinancialDirector
From Club c
left join STADION s on s.cl_id = c.cl_id
left join TECHNISCHDIRECTEUR td on td.cl_id = c.cl_id
left join FINANCIEELDIRECTEUR fd on fd.cl_id = c.cl_id