当前位置:  开发笔记 > 编程语言 > 正文

一个表中或单独表中的三个客户地址?

如何解决《一个表中或单独表中的三个客户地址?》经验,为你挑选了2个好方法。

在我的应用程序中,我有一个Customer类和一个Address类.该Customer班有三个实例Address类:customerAddress,deliveryAddress,invoiceAddress.

什么是在数据库中反映这种结构的最佳方法?

直接的方式是客户表和单独的地址表.

更加非规范化的方式只是一个客户表,每个地址都有列("street"的示例:customer_street,delivery_street,invoice_street)

你有什么经历?这些方法有什么优点和缺点吗?



1> Mitch Wheat..:

如果您100%确定客户将只拥有您描述的3个地址,那么这是可以的:

CREATE TABLE Customer
(
    ID int not null IDENTITY(1,1) PRIMARY KEY,
    Name varchar(60) not null,
    customerAddress int not null
        CONSTRAINT FK_Address1_AddressID FOREIGN KEY References Address(ID),
    deliveryAddress int null
            CONSTRAINT FK_Address2_AddressID FOREIGN KEY References Address(ID),
    invoiceAddress int null
            CONSTRAINT FK_Address3_AddressID FOREIGN KEY References Address(ID),
    -- etc
)

CREATE TABLE Address
(
    ID int not null IDENTITY(1,1) PRIMARY KEY,
    Street varchar(120) not null
    -- etc
)

否则我会像这样建模:

CREATE TABLE Customer
(
    ID int not null IDENTITY(1,1) PRIMARY KEY,
    Name varchar(60) not null
    -- etc
)

CREATE TABLE Address
(
    ID int not null IDENTITY(1,1) PRIMARY KEY,
    CustomerID int not null
        CONSTRAINT FK_Customer_CustomerID FOREIGN KEY References Customer(ID),
    Street varchar(120) not null,
    AddressType int not null 
    -- etc
)



2> Gabriele D'A..:

我将(作为数据库理论教导)用于两个单独的表:Customer和Address.

正如您所说,将三个字段放在Customer表中的想法很糟糕,因为它会违反规范化规则(并且当地址变为三个以上时会失败).

编辑:另外,我将地址表记录分成几个字段,一个用于地名前缀,一个用于街道等,并在其中放置一个唯一的密钥.否则,您将以一个完整的重复数据库结束.


不能记住所有5个标准化级别,但客户表中的三个地址字段意味着(1)DB中的空间浪费和(2)三个地址的限制.单独的地址表可以删除这两个问题.
推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有