这可以以相反的方式解决。假设您有一张桌子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)
)
要显示问题列表,您可以在打开对话框时从警报表中选择一般信息,您可以选择所有与问题相关的适当信息。