one*_*hen 8 sql database-design design-patterns anti-patterns
考虑一个包含表Products和Employees的数据库.对当前产品经理进行建模是一项新要求,他是负责产品的唯一员工,并指出某些产品简单或成熟,不需要产品经理.也就是说,每个产品可以有零个或一个产品经理.
方法1:alter table Product添加一个新的NULLable列,product_manager_employee_ID以便没有产品经理的产品由该NULL值建模.
方法2:创建一个新表ProductManagers与非NULL能柱product_ID和employee_ID,与独特的约束product_ID,使没有产品经理一个产品是由该表中没有行的建模.
还有其他方法,但这些是我似乎经常遇到的两种方法.
假设这些都是合法的设计选择(我倾向于相信)并且只代表不同的风格,他们有名字吗?我更喜欢方法2,并且发现很难将风格差异传达给那些喜欢方法1而没有使用实际例子的人(正如我在这里所做的那样!)如果我能说"我更喜欢我自己倾向于6NF(或其他)风格."
假设这些方法中的一个实际上是一个反模式(因为我只是怀疑方法1的情况可能是通过将两个实体之间的关系建模为这些实体之一的属性)这个反模式是否具有名称?
那么第一个只不过是一对多的关系(一个员工对很多产品).这有时被称为O:M关系(零到多),因为它是可选的(并非每个产品都有产品经理).同样不是每个员工都是产品经理,所以在另一方面也是可选的.
第二个是连接表,通常用于多对多关系.但由于一方只是一对一(每个产品只在表中一次),它实际上只是一个错综复杂的一对多关系.
就个人而言,我更喜欢第一个但不是错(或坏).
第二个用于考虑的两个原因.