gpt4 book ai didi

mysql - 使用外键的数据库

转载 作者:行者123 更新时间:2023-11-29 21:45:09 24 4
gpt4 key购买 nike

如果我做错了,请原谅,因为我是这个论坛的新手。我正在尝试弄清楚外键应包含哪些列...我的老师重新编写了我的数据库,但我无法理解该怎么办。这是我的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com