mysql - 使用外键的数据库

标签 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) 您应该更改 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);

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

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

5) 对于客户和项目之间的关系,您将需要一个额外的表(因此一个项目可以有多个用户 | 可能是对您的 erd 的更改)。具有字段“Project_ID”和“Customer_ID”的交叉关系表(称为“CustomerProject”)。然后向项目表添加外键,向客户表添加外键。 (为“Project_ID”+“Customer_ID”添加唯一键可加分)

对于付款和用户,只需在“付款”表中添加“Customer_ID”字段并添加外键,如#4 中所述。

(题外话):你的命名约定有点奇怪。应避免混合使用下划线和驼峰命名法。您可以坚持使用驼峰命名法 - 即使对于您的 id 字段 - 但这只是个人意见

关于mysql - 使用外键的数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34168936/

相关文章:

mysql - 如何触发 Chef-solo 配置更改

database - ORA-12505, TNS :listener does not currently know of SID given in connect des

使用 GROUP BY 需要 Mysql 查询帮助吗?

mysql - 如果某个值连接到多个不需要的值,我如何确保不返回该值?

mysql - 外键可以作为主键吗?

php - 如何使用文本文件创建SQL表条目?

php和mysql显示date_begin和date_end之间的每日收入

mysql - 将不同的行合并为一个

php - 循环匹配。 PHP/MySql

mysql - 插入没有表格的查询symfony 2