数据库设计对我来说非常困惑。我理解这些概念,但“好的设计”很复杂,我希望它是正确的。
所以我有非常基本的问题。
问题1)如果我有三个表,tbl_lenders,tbl_programs,tbl_products,将tbl_lenders的主键链接到每个tbl_programs和tbl_products的一个外键,它被认为是好的或好的设计。所以基本上,一个主键从一个表到两个不同的表。
问题2)在这个数据库中是一个各种问卷。我需要打电话给一堆银行,询问他们订购的政府计划以及他们可能提供的任何内部产品。有一堆是/否问题。我多次读过不要在Access上使用Yes / No数据类型。所以我创建了一个名为tbl_options的表,它有一些记录,其中包括Yes,No和N / A.我可以从tbl_options到tbl_programs(和tbl_products)中的多个字段建立关系。因此,一个表中的同一主键与位于不同但单个表中的多个外键之间存在多个关系。
图一是问题一的视觉示例,其中我有一对多的关系,从tbl_lenders中的主键到一个表再到另一个表。
第二张图片是第二个问题的一个例子,其中tbl_options和tbl_options_1是同一个表(只是MS Access做它的事情),它的主键是与第二个表中的多个字段建立关系。
这可以吗?
答案 0 :(得分:1)
回答问题1:
当我进行逻辑设计时,我会尽力命名关系的两端,看看它是否有意义。例如,它看起来像你有 LENDERS和PROGRAMS之间的多对多关系。
xxxxxxx
PROGRAM >-------------------------< LENDERS
yyyyyy
因此,如果您命名关系的每一端,您可以机械地构建两个sentanecs
每个程序都是xxxxxx一个或多个贷方 每个贷方都是yyyyyy一个或多个程序
查看此网站的简单示例:http://www.entitymodelling.org/
现在你不能只用两个表来实现多对多关系;你必须通过交叉实体来解决它(有时也称为 作为桥牌表)。交集实体通常只是两个表的主键,例如
PROGRAM ---------< LENDERPROGRAM >--------- LENDER
所以对你的问题的答案是肯定的,这是一个有效的设计,只要它具有商业意义。