【发布时间】:2011-08-06 21:43:39
【问题描述】:
问题:是否可以在表中使用“快捷方式”标识符,这样我就不必执行一长串连接来获取所需的信息?
为了理解我在说什么,我将不得不在这里举一个看起来很复杂的例子,但我已经在这里简化了很多问题,它应该很容易理解(我希望) .
基本设置:“company”可以是“affiliate”、“client”或两个都。每个“公司”可以有多个“contacts”,其中一些可以是具有登录权限的“users”。
我们的数据库中有四家公司。
`附属机构`表 --------------------- ID公司_ID价格销售 -- ---------- ----- ----- 1 1 50 456 2 4 50 222 3 1 75 14每家公司可以有多个附属 ID,以便它们可以向不同市场展示不同定价水平的产品。
我们的两家公司是附属公司(Acme, Inc. 和 Stark Industries),Acme 有两个附属 ID
`客户`表 -------------------------------------- ID Company_ID Referring_affiliate_id -- ---------- ---------- 1 2 1 2 3 1 3 4 3每家公司只能成为客户一次。
我们的三个公司是我们的客户(Spacely Space Sprockets、Cogswell Cogs 和 Stark Industries,它们也是附属公司)
在所有这三个案例中,他们都是由 Acme, Inc. 使用他们的两个附属 ID 之一推荐给我们的
每个公司至少有一个联系人,但在此表中,没有说明每个联系人工作于哪个公司,并且还有一个额外的联系人(#5)。我们稍后会讨论。
这些联系人中的每一个都可能有也可能没有系统上的登录帐户。
将联系人与一家或多家公司联系起来。
每个联系人都与一家公司相关联,此外,联系人 5 (Homer Simpson) 是 Acme, Inc 的技术联系人,联系人 4 (Tony Stark) 既是公司 4 (Stark Industries) 的管理联系人,也是技术联系人公司 3(Cogswell Cogs)的联系人
users 表本质上是一个允许登录系统的联系人列表。
每个联系人零个或一个用户;每个用户一个联系人。
联系人 1 (Wylie Coyote) 为公司 1 (Acme) 工作,是客户 (1) 也是附属公司 (1)
联系人 2 (Cosmo Spacely) 为公司 2 (Spacely Space Sprockets) 工作,是客户 (2) 但不是附属公司
等等……
现在终于解决问题了,如果有的话......
我是否通过Users 表中的client_id 和affiliate_id 列进行循环引用?这是坏事吗?我很难理解这一点。
当有人登录时,它会根据用户表检查他们的凭据,并使用 users.contact_id、users.client_id 和 users.affiliate_id 进行快速查找,而不是使用必须将一串表连接在一起才能找出相同的信息。但这会导致数据重复。
如果users 表中没有client_id,我将不得不像这样找到以下信息:
在每种情况下,我都不一定知道用户是否在affiliate 表或clients 表中有一个条目,因为他们可能只在其中一个表中有一个条目,而不是两个。
是做这些类型的连接和线程通过多个表来获取我想要的信息更好,还是有一个“快捷方式”字段来获取我想要的信息更好?
我有一种感觉,总的来说,这在某些方面过于复杂,但我不明白如何。
我正在使用 MySQL。
【问题讨论】:
-
为什么不使用“as”别名?
标签: mysql sql one-to-many foreign-key-relationship one-to-one