请原谅我,如果我做错了,因为我是这个论坛的新手。我正在试图找出外键的列...我的老师重新编写我的数据库,我无法理解该怎么办。这是我的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)
);
希望我没有做错任何事,谢谢!
答案 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字段 - 但这只是个人意见