我的问题涉及针对特定场景的数据库中表的最佳实践设计。
假设我们有一家公司出售办公设备,比如打印机。这家公司还向购买了一台或多台打印机的客户提供服务合同。
根据上述信息,我们可以为数据库推导出三个表:
顾客
打印机
服务合同
因此,对于给定的服务合同,我们指定为哪个客户创建合同,并分配一个或多个构成合同协议的打印机。
对于作为服务合同协议一部分的打印机,有两种方法可以处理数据库设计。
第一种方法是在printers表中创建一个servicecompracted列,并在它和servicecompracts表之间创建一个基本的主键/外键关系。我看到的唯一的问题是,打印机不必是服务合同的一部分,因此数据库中可能有数百甚至数千个打印机记录,其中许多记录不是合同的一部分,因此没有将此外键列用于许多记录。
第二个选项是创建一个链接表,其中包含两个外键,引用servicecontracts表(它是主键)和printers表(它是主键)。组合此新表中的两列以生成唯一的组合主键。
好吧,这是我的窘境。我不认为这两个选择都是一个典型的坏主意,但我坚持知道这两个设计决策中的哪一个是最佳实践。
欢迎所有评论。
最佳答案
我想,在不知道你的全部问题的情况下,第二种选择更可取。(即更适当的标准化-一般)
第二个选项将允许一些业务规则灵活性,您可能还没有提出(或者您的业务模型可能会改变)。
例如:日期可能变得很重要。例如,即使业务部门决定了某些规则,也可以使用相同的服务合同,例如,该客户购买后,所有打印机的保修期为一年。同一协议只包括许多购买。
因此,选项2为您在关系中添加其他属性提供了灵活性。