使用外键的数据库

时间:2015-12-09 00:54:04

标签: mysql database

请原谅我,如果我做错了,因为我是这个论坛的新手。我正在试图找出外键的列...我的老师重新编写我的数据库,我无法理解该怎么办。这是我的ERD:http://s1.postimg.org/3l2j6rh4v/Picture.png

我已经查找了教程,但我似乎无法找到如何使用它们。

这是我的MySQL代码:

DROP TABLE PaymentType;
DROP TABLE ProjectType;
DROP TABLE Projects;
DROP TABLE Payment;
DROP TABLE Customer;
CREATE TABLE Customer
(
Customer_ID            varchar(100)    NOT NULL,
FName                  varchar(15)     NOT NULL,
LName                  varchar(20)     NOT NULL,
CustAddress            varchar(20)     NOT NULL,
CustCity               varchar(30)     NOT NULL,
CustState              varchar(20),
CustZip                char(5),
CustBal                numeric(7,2)    NOT NULL,
PRIMARY KEY (Customer_ID)
);
CREATE TABLE Payment
(
Payment_ID             varchar(100)    NOT NULL,
PaymentType            varchar(15),
Date                   date            NOT NULL,
AmntPaid               numeric(7,2)    NOT NULL,
PRIMARY KEY (Payment_ID)
);

CREATE TABLE Projects
(
Project_ID             varchar(100)    NOT NULL,
ProjectType            varchar(30)     NOT NULL,
LaborHrs               char(3)         NOT NULL,
Date                   date            NOT NULL,
PRIMARY KEY (Project_ID)
);

CREATE TABLE ProjectType
(
Project_ID             varchar(100)    NOT NULL,
ProjectDesc             varchar(100)    NOT NULL,
PRIMARY KEY (Project_ID)
);

CREATE TABLE PaymentType
(
Payment_ID             varchar(100)    NOT NULL,
PaymentDesc             varchar(100)    NOT NULL,
PRIMARY KEY (Payment_ID)
);  

希望我没有做错任何事,谢谢!

1 个答案:

答案 0 :(得分:0)

1)您应该更改id列的类型。应该避免使用varchar作为id列,因为这会破坏性能(+可能发生的一些其他问题)。使用任何类型的int(int,tinyint,..)都会好得多。

2)表" ProjectType"应该有一个列" ProjectType_ID"而不是" Project_ID" - 同样适用于PaymentType(" PaymentType_ID")。

3)重命名"项目"中的字段。和"付款"表也​​是如此。

4)外键的代码如下:

ALTER TABLE Project
ADD CONSTRAINT Project_ProjectType
FOREIGN KEY (ProjectType_ID)
REFERENCES ProjectType(ProjectType_ID);

对付款表执行相同的操作。

重要提示:在您的sql文件末尾添加" alter table" -command,以便创建所有表 重要提示:您的数据库架构应该是innodb,或任何其他支持外键的架构(MyIsam不支持外键)

5)对于Customer和Projects之间的关系,您需要一个额外的表(因此一个项目可以有多个用户|可能是对您的erd的更改)。一个交叉关系表(称为类似CustomerProject的东西),带有字段" Project_ID"和" Customer_ID"。然后将一个外键添加到项目表中,并将一个外键添加到customer表中。 (将额外的关键点添加到" Project_ID" +" Customer_ID")

对于付款和用户,只需添加" Customer_ID"字段"付款"表并按#4中的说明添加外键。

(offtopic):你的命名惯例有点奇怪。应避免混合下划线和camelcase。你可以坚持使用camelcase - 即使是你的id字段 - 但这只是个人意见