|
|
1
9
好吧,第一个就是一对多的关系(一个员工对许多产品)。这有时被称为O:M关系(零到多),因为它是可选的(不是每个产品都有一个产品经理)。也不是每个员工都是产品经理,所以在另一方面也是可选的。 第二个是联接表,通常用于多对多关系。但是,由于一方只有一对一(每个产品只在表中出现一次),这实际上只是一种复杂的一对多关系。 就我个人而言,我更喜欢第一个,但都不是错的(或坏的)。 第二种方法有两个原因。
|
|
|
2
2
在我看来,这两种行为模式是不同的。在第一个示例中,每个产品可以有一个产品经理,一个员工可以是多个产品(一对多)的产品经理。第二种似乎允许每个产品有多个产品经理(多对多)。这表明这两种解决方案在不同的情况下同样有效,您使用哪一种解决方案取决于业务规则。 |
|
|
3
0
第一种方法有一个缺陷。设想一下,业务需求已经改变,现在您需要能够将2个产品经理设置为一个产品。你会怎么做?是否向表产品添加另一列?讨厌。这显然违反了1nF。 第二种方法提供的另一种选择是能够存储特定产品经理产品关系的某些属性。例如,如果一个产品有两个产品经理,那么可以将其中一个设置为主要的… 或者,例如,员工可以有一个电话号码,但作为产品经理,他/她可以有另一个电话号码…这也会被放到特别的桌子上。 |
|
|
4
0
方法1)
方法2)
两张桌子之间的连接频率是多少? 有多少其他查询使用产品表? 产品表中有多少记录? |
|
|
5
0
在您给出的特定情况下,我认为两个表的主要动机是避免丢失数据的空值,这就是我将如何描述这两种方法的原因。 有一个关于优缺点的讨论 on wikipedia . 我敢肯定,鉴于C-Date不喜欢这个,他定义了关系理论,所以只有多表解决方案才是“有效的”。例如,您可以调用单表方法“类型不佳”(因为空值的类型是 unclear -参见第4页的引用)。 |
|
|
Johnny T · 基于当前值的SQL合并表[重复] 1 年前 |
|
John D · 需要为NULL或NOT NULL的WHERE子句 1 年前 |
|
ojek · 如何对SQL结果进行分组和编号? 1 年前 |
|
|
senek · 如何在PL/SQL中将选择结果(列)放入数组中 1 年前 |
|
|
Sax · 规范化Google表格(第一步) 1 年前 |
|
|
Jatin · 检索卷计数的动态sql抛出错误语法错误[关闭] 1 年前 |
|
|
Andrus · 如何在sql中查找第二个匹配项 1 年前 |