Sql server 客户电子邮件地址

Sql server 客户电子邮件地址,sql-server,Sql Server,我是sql编程新手。这是我数据库课的家庭作业。我已经准备好了作业所需的所有桌子,我只挂了一部分。作业中的一行内容如下: 如果类型为“教员”,则电子邮件地址必须以“@xxx.edu”结尾 这是该表的外观: create table customer ( CID# char(10) primary key IDENTITY (1,1) NOT NULL, F_name varchar(20), M_name varchar(20), L_name varchar(20), type varchar(

我是sql编程新手。这是我数据库课的家庭作业。我已经准备好了作业所需的所有桌子,我只挂了一部分。作业中的一行内容如下:

如果类型为“教员”,则电子邮件地址必须以“@xxx.edu”结尾

这是该表的外观:

create table customer
(
CID# char(10) primary key IDENTITY (1,1) NOT NULL,
F_name varchar(20),
M_name varchar(20),
L_name varchar(20),
type varchar(20),
street varchar(20),
city varchar(20),
state varchar(20),
zip char(5),
password varchar (20) NOT NULL,
email varchar(20) NOT NULL
Constraint CK_customer_type check (type in ('student', 'faculty'))
)

如果有人能提供帮助,我们将不胜感激

此约束将检查电子邮件列是否以
@xxx.edu
结尾

Constraint CK_email_faculty check (
   type<>'faculty' OR 
   CHARINDEX('@xxx.edu',email)=LEN(email)-LEN('@xxx.edu')+1
)
客户
表中有一个外键,指向
客户类型
表:

CREATE TABLE customer(
    -- ...
    type INT NOT NULL,
    -- ...
    CONSTRAINT FK_type_customer_type FOREIGN KEY(type) REFERENCES customer_type(id)
)
然后,您将不会插入类型描述,而是插入类型标识符:

INSERT INTO customer(...,type,...)VALUES(...,1,...); -- for student
INSERT INTO customer(...,type,...)VALUES(...,3,...); -- fails, type doesn't exist
这样,当SQL Server缓存这些表时,可以节省磁盘空间和内存


备注2:varchar字段的宽度非常小。只有20个字符的电子邮件地址?

添加限制

Constraint CK_email check (email like case when type in ('faculty') then '%@xxx.edu' else email end )

对于您的特定情况,这样的约束可能是可以的:

Constraint CK_customer_email check (
   type <> 'faculty' OR
   email LIKE '%_%@_%.edu'  
   CHARINDEX('@xxx.edu',email)=LEN(email)-LEN('@xxx.edu')+1
)
然后,您的约束将如下所示:

Constraint CK_customer_email check (
   type <> 'faculty' OR
   [dbo].[fnAppEmailCheck] (email) = 1
)
Constraint检查客户电子邮件检查(
输入“教员”或
[dbo].[fnAppEmailCheck](电子邮件)=1
)

您的问题是什么?您具体需要哪些帮助?我想问题是:如何设置电子邮件地址列的约束?
CREATE FUNCTION [dbo].[fnAppEmailCheck](@email VARCHAR(255))   
--Returns true if the string is a valid email address.  
RETURNS bit  
as  
BEGIN  
     DECLARE @valid bit  
     IF @email IS NOT NULL   
          SET @email = LOWER(@email)  
          SET @valid = 0  
          IF @email like '[a-z,0-9,_,-]%@[a-z,0-9,_,-]%.[a-z][a-z]%'  
             AND LEN(@email) = LEN(dbo.fnAppStripNonEmail(@email))  
             AND @email NOT like '%@%@%'  
             AND CHARINDEX('.@',@email) = 0  
             AND CHARINDEX('..',@email) = 0  
             AND CHARINDEX(',',@email) = 0  
             AND RIGHT(@email,1) between 'a' AND 'z'  
               SET @valid=1  
     RETURN @valid  
END
Constraint CK_customer_email check (
   type <> 'faculty' OR
   [dbo].[fnAppEmailCheck] (email) = 1
)