考虑一个包含表 Products 和 Employees 的数据库。对当前产品经理建模有一个新要求,即负责产品的唯一员工,并指出某些产品足够简单或成熟,不需要产品经理。也就是说,每个产品可以有零个或一个产品经理。
方法一:修改表Product
添加一个新的 NULL
能列product_manager_employee_ID
所以没有产品经理的产品由 NULL
建模值(value)。
方法二:新建表ProductManagers
与非 NULL
能列product_ID
和 employee_ID
,对 product_ID
具有唯一约束,因此没有产品经理的产品通过此表中缺少行来建模。
还有其他方法,但这些是我似乎最常遇到的两种。
假设这些都是合法的设计选择(正如我倾向于相信的那样)并且仅代表不同的风格,它们有名字吗?我更喜欢方法 2,并且发现很难在不使用实际示例的情况下向喜欢方法 1 的人传达风格上的差异(就像我在这里所做的那样!)如果我能说,“我更喜欢我自己倾向于 6NF(或其他)风格。”
假设这些方法之一实际上是一种反模式(我只是怀疑方法 1 可能是这种情况,方法是将两个实体之间的关系建模为其中一个实体的属性)这种反模式有名字吗?
最佳答案
嗯,第一个只不过是一对多的关系(一个员工对许多产品)。这有时被称为 O:M 关系(从零到多),因为它是可选的(并非每个产品都有产品经理)。也不是每个员工都是产品经理,所以在另一边也是可选的。
第二个是连接表,通常用于多对多关系。但由于一侧只是一对一(每个产品只在表中出现一次),因此它实际上只是一种复杂的一对多关系。
我个人更喜欢第一个,但都没有错(或不好)。
出于想到的两个原因,将使用第二个。
关于sql - 这些数据库设计风格(或反模式)有名字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/954988/