情况:
我有两张桌子:
表1
TrackID PK
random columns
ActionID FK
表2
ActionID PK
random columns
TrackID FK
问题: 上面的设置是否存在问题(规范化?)或需要更多信息......?
由于
菅
答案 0 :(得分:0)
提供的模式模拟两个由两个不同关系连接的实体。
第一个关系R1 Track - * ---- 1 - Action
由表1中的字段ActionID建模
第二个关系R2 Track - 1 ---- * - Action
由表2中的字段TrackID建模。
如果您的要求表明您有两种不同的关系,那么这可能是一个有效的架构。
此案例的简化示例包括两个实体Employee
和Project
关系
manages
Employee - 1 ---- * - Project
和关系
works
Employee - * ---- 1 - Project
假设一名员工最多只能为一个项目工作。
这里的问题是你想建模一两个关系吗?
如果您想在实体之间建立一个关系模型,那么您的架构有些错误,否则它是正确的。
答案 1 :(得分:0)
上面的设置有问题吗?
不,没有"问题"在这个词的经典含义。你可以坚持你的设计,它没有问题。但是,它是标准的吗?这将是我将在下一节讨论的内容。
什么(规范化?)或需要更多信息......?
是的,正如我上面暗示的那样,我可以为您提供信息,以便标准化或正常化"你的设计。不幸的是,您对此数据库设计的目的并不十分清楚。知道这个目的对于充分回答问题至关重要。但是,我将解决两个可能的目的,我想你已经有了其中一个。
目的1:每个曲目最多只能有一个动作:在这种情况下,您不需要两个表格。你可以:
TrackID PK
random columns
random columns of actions /*(will stay null if no action takes place)*/
目的2:每个曲目可以有零个或多个动作:在这种情况下,您需要两个表格如下:
表1:
TrackID PK
random columns
表2:
ActionID PK
random columns
CreateDate /*(search for creating a DateTime column with default to current date)*/
TrackID FK
因此,如果您想要最新或当前的操作,请选择前1,其中CreateDate desc
的订单与“跟踪”相关。