创建一个带有字段(带有外键)的表,它可以引用许多表并保持参考完整性?

时间:2013-11-12 11:09:59

标签: sql sybase sqlanywhere

创建一个可以容纳很多其他表的键的表的最佳方法是什么? 据我所知,我有两个选择:
1)我创建了一个包含许多外键字段的表 2)我创建了两个字段,一个表示引用的表,另一个字段表示该表的主键。

后者存在很多问题,因为没有办法保持参照完整性(因为每个表都没有外键)。

除了这个表的链接,我想添加一个描述,以便我可以在网格中显示所有通知。通过单击网格中的一行,我想打开相应的程序并修复该程序中的问题。

这有点难以解释,也许这个例子解释得更好:
我需要创建一个系统来处理业务应用程序中每个程序的任务/注释/通知。我们有发票,销售订单,交货,生产订单等 我们的软件检测到其中任何一个都出错了。例如,如果销售订单上的利润不够高,则无法自动验证订单。在这种情况下,我想为销售经理创建一个通知,以便他可以查看销售订单的错误。

仅供参考:我使用的是Sybase SQL Anywhere 12。

它有意义吗?

1 个答案:

答案 0 :(得分:0)

这可以以相反的方式解决。假设您有表Alerts,您将在其他位置发出有关不良事件的所有警报。您可以从系统中的所有其他表引用此表,并从中创建非强制关系。简而言之,它可能看起来像(我正在使用MSSQL语法):

create table Alerts(
   ID int not null identity,
   SomeInfoAboutTheProblem varchar(255),
   constraint PK_Alerts primary key (ID)
)

create table Invoices(
   ID....
   AlertID int NULL,
  ....
   constraint FK_Invoices2Alerts foreign key (AlertID) references Alerts(ID)
)

如果您无法使用商家信息修改表格,您可以为Alerts创建“扩展”表格,该表格可能存储某些特定问题信息以及对有问题记录的实际参考。例如:

create table Alerts(
   ID int not null identity,
   SomeInfoAboutTheProblem varchar(255),
   constraint PK_Alerts primary key (ID)
)
create table Alerts_for_Invoices(
   AlertID int NOT NULL,
   InvoiceID int NOT NULL,
   SomeAdditionalInvoiceProblemInfo ....,
   constraint FK_Alerts_for_Invoices2Alerts foreign key (AlertID) references(ID),
   constraint FK_Alerts_for_Invoices2Invoices foreign key (InvoiceID) references Invoices(ID)
)

要显示问题列表,您可以在打开对话框时从警报表中选择常规信息,您可以选择所有适当的信息来解决问题。