我正在构建一个金融应用程序,它需要以下表格:
问题的:
发票必须能够包含3类电子邮件:
到目前为止,我只有一个收件人/cc/bcc专栏,但我不认为这是好的,因为我基本上需要连接在一起的电子邮件,并将他们用逗号或其他什么。
我还考虑了一个通用电子邮件表,但接下来我必须分别创建invoice_recipient_email、invoice_cc_email和invoice_bcc_email表,以便将电子邮件链接回特定的发票ID,并按3种类型对它们进行分类。
有人能在我的第二个解决方案上给我建议吗,或者提供一个更好的解决方法?
下面是我当前的模式:
CREATE TABLE tax (
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
rate INT(3) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE item (
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
description VARCHAR(1000) NOT NULL,
quantity INT(10) NOT NULL,
price INT(10) NOT NULL,
CONSTRAINT `f_tax_item_tax_id` FOREIGN KEY (`tax_id`) REFERENCES `tax` (`id`),
PRIMARY KEY (id)
);
CREATE TABLE invoice (
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
invoice_number VARCHAR(255) NOT NULL,
recipients VARCHAR(1000) NOT NULL,
cc VARCHAR(1000) NOT NULL,
bcc VARCHAR(1000) NOT NULL,
discount INT(10) NOT NULL,
note VARCHAR(500) NOT NULL,
terms VARCHAR(2000) NOT NULL,
due_date TIMESTAMP NOT NULL,
PRIMARY KEY (id)
);发布于 2017-07-12 22:04:51
我将添加一个带有id (pk), invoice_id (fk), email, recipient_type字段的收件人表,其中收件人类型可以具有以下值之一: to、cc或bcc。收件人类型字段将告诉您如何使用电子邮件地址,因此您不需要3个单独的表来保存3种不同的收件人类型。
1条记录将只保存一个电子邮件地址。
发布于 2017-07-12 22:06:13
您可以将您的电子邮件标准化到一个表中,并在其上放置一个标志来对其类型进行分类。
CREATE TABLE invoice (
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
invoice_number VARCHAR(255) NOT NULL,
discount INT(10) NOT NULL,
note VARCHAR(500) NOT NULL,
terms VARCHAR(2000) NOT NULL,
due_date TIMESTAMP NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE email(
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
invoice_id INT(10) not null references invoice(id),
email_type int not null,
addresses varchar(1000),
PRIMARY KEY (id)
);您也可以在另一个表中定义电子邮件类型。您可以查看在生产环境中为MSSSQL中的电话号码实现的这种方法,但概念相同。然而,我们将记录标准化为每个记录的一个电话号码,我也建议您这样做。
CREATE TABLE [dbo].[ActorPhones](
[PKId] [int] IDENTITY(0,1) NOT NULL Primary Key,
[FKActorId] [int] NOT NULL References Actor(PKID),
[FKPhoneTypeId] [int] NOT NULL,
[Number] [varchar](20) NOT NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[PhoneTypes](
[PKId] [int] IDENTITY(0,1) NOT NULL Primary Key,
[PhoneTypeName] [varchar](50) NOT NULL References ActorPhones(PKId),
[PhoneTypeDescription] [varchar](250) NULL,
[ModifiedDate] [datetime] NULL,
[ModifiedBy] [varchar](50) NULL
) https://stackoverflow.com/questions/45068116
复制相似问题