同时多个表的外键

Ger*_*hez 0 sql firebird foreign-keys

我在软件中使用 Firebird 数据库并发现了一个问题

\n\n

我有两张桌子,适合两种不同类型的客户:

\n\n
clientM(\n\n    rfcM varchar(12) primary key\n\n    some other data  \n\n)\n\nclientF(\n\n    rfcF varchar(13) primary key\n\n    some other data\n\n)\n
Run Code Online (Sandbox Code Playgroud)\n\n

(长度是固定的,因为它是 M\xc3\xa9xico 中我期望用户输入的数据的标准)

\n\n

问题来了,我需要创建第三个表:

\n\n
clientPayment(\n\n    rfcClient varchar(13)\n\n    some other data\n\n)\n
Run Code Online (Sandbox Code Playgroud)\n\n

并且该字段必须有一个引用 clientM.rfcM 和 clientF.rfcF 的外键,因此我可以使用同一个表来存储来自两种类型客户的付款

\n\n

我可以让第三个表不带外键,但希望添加一个并避免用户输入不正确的数据

\n

Rod*_*osp 6

在这种情况下,您有两个(推荐)选项:

  • 正如 Impaler 所说,在第三个表上使用两列,一列引用每个表并且可为空(因为理想情况下一列始终为空)

  • 或者您可以在表之间使用层次结构,您将在其中创建一个名为 的表,其中包含和Client之间的所有公共数据,并且您的表将包含每种类型客户端的特定数据,以及引用其父表的/ 。并且您的表将有一列引用父表ClientFClientMClientFClientMClientF.IDClientM.IDclientPaymentClient

  • 这实际上是一个很好的方法。对于 Gerardo 来说,这可能有些过分了,但它的思维方式却跳出了框框。赞成。 (2认同)