首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有多个空列的单个表与多个表

具有多个空列的单个表与多个表
EN

Database Administration用户
提问于 2020-03-13 10:32:04
回答 1查看 800关注 0票数 0

我读过。但我不确定我是否正确理解,或者我的情况略有不同。

So,下面是我的情况:我有一个表,其中包含客户的传递地址,并且有两种类型的传递地址--主传递地址(每一列都是必需的)&替代传递地址(可选)。

这是我的delivery_info桌:

代码语言:javascript
运行
复制
id(PK) 
city_id(FK) 
area_id(FK)
recipient_name(NULL)
street_address(NULL)
contact_no(NULL)  

我的orders表:

代码语言:javascript
运行
复制
id(PK)
delivery_info_id(FK)
alt_delivery_info_id(FK)
status
...

两个地址的城市(city_id)和区域(area_id)总是可用的,并且必须是相同的,这意味着可选的递送地址必须位于同一个城市和主递送地址的相同区域。但是其他3列-- recipient_namestreet_addresscontact_no是主传递地址所必需的,但对于可选的传递地址则是可选的。

因此,我的问题是,我是否应该将这两种类型的传递地址分离到两个不同的表中,例如delivery_infoalt_delivery_info,还是保持原样?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2020-03-24 21:00:36

没有硬性规定。这是我在做出决定时所使用的逻辑。

一般来说,将一组东西(传递地址)分散在多个列中是很笨拙的。

我会取出整个“传递”列集,并为它们制作一个表。这个新表中将有一两行。

然后,我会做一个这样的方法:

图A:主表中有两栏:

代码语言:javascript
运行
复制
delivery INT UNSIGNED NOT NULL,
alt_delivery INT UNSIGNED  NULL, -- note Nullable

计划B:delivery表将有一个列,其中包含1或2,指示1=preferred。(或对此作出某种变体)。JOIN中的包含该列。

计划B特别适合电话号码之类的东西,因为可以有任意数量的电话号码(手机、家庭、工作、传真等)。另一方面,对于delivery,您可能有一个相当强的限制,今天正好有一个或两个地址。

在这两种情况下,对地点或电话进行任何类型的脱钩可能都是不明智的。那么,如果有一个偶然的dup;毕竟,同居是常见的。

在稍微不同的用例中,计费UI可能会问用户“发货地址与计费地址相同吗?”这让用户可以选择将两者结合在一起。在这种情况下,主表有两个非空列bill_tosend_to,它们可能链接到同一个address,也可能不链接到同一个D6

在“位置”表中,‘正常化’城市、国家等都是笨拙的。这是不合理的,因为这两个原因都没有正常化:它没有节省太多的空间,而且你很可能不需要在某个中心位置更改城市/国家的拼写。(捷克斯洛伐克)

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/261868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档