Mysql 使用唯一索引好吗?

Mysql 使用唯一索引好吗?,mysql,database,database-design,Mysql,Database,Database Design,我有一个学生登记簿,主表就是这个,我只想确保不会有学生有重复的姓名、电子邮件等。ID是主键,所以我不需要使用PK CREATE TABLE student( id INT UNSIGNED NOT NULL, campus_id SMALLINT UNSIGNED NOT NULL, first_career_id SMALLINT UNSIGNED NOT NULL, second_career_id SMALLINT UNSIGNED NULL, name VARCHAR(70) NOT N

我有一个学生登记簿,主表就是这个,我只想确保不会有学生有重复的姓名、电子邮件等。ID是主键,所以我不需要使用PK

CREATE TABLE student(
id INT UNSIGNED NOT NULL,
campus_id SMALLINT UNSIGNED NOT NULL,
first_career_id SMALLINT UNSIGNED NOT NULL,
second_career_id SMALLINT UNSIGNED NULL,
name VARCHAR(70) NOT NULL,
password CHAR(60) NOT NULL,
email VARCHAR(100) NOT NULL,
phone TINYINT UNSIGNED NULL,
UNIQUE(id),
UNIQUE(name),
UNIQUE(email),
UNIQUE(phone),
FOREIGN KEY(first_career_id)
    REFERENCES career(id)
    ON DELETE CASCADE,
FOREIGN KEY(second_career_id)
    REFERENCES career(id)
    ON DELETE CASCADE
) ENGINE=INNODB;

我可以在通过应用程序插入这些字段时验证这些字段,哪种方法更好?

如果唯一性是一个域约束(在您的示例中),则在列上创建一个唯一约束,为您创建一个唯一索引

ALTER TABLE student 
ADD CONSTRAINT ux_student_email
UNIQUE (email)

如果您能够百分之百地确定并且证明没有其他应用程序会插入数据,那么确保应用程序中的唯一性就可以了。如果您重视正确性,除了签入应用程序之外,还可以在数据库级别添加一个约束。

学生可以有相同的名字!电子邮件不能。因为我不会使用带有名称、电子邮件、电话的WHERE子句,我想我会明确删除唯一索引并通过应用程序验证。它不能是相同的名称,因为输入全名是的,学生可以有相同的全名!任何不允许这样做的系统都是垃圾!他们可以拥有同样的手机;两个学生住在同一所房子里的固定电话……好吧,我会重新考虑这个设计,它不是最终的yetSure型号,这很好,我不以纯文本形式存储密码,而是60个字符长的散列文本,这就是为什么我使用CHAR60