0

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

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

除了指向该表的链接之外,我还想添加说明,以便可以在网格中显示所有通知。通过单击网格中的一条线,我想打开相应的程序并修复该程序中的问题。

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

仅供参考:我正在使用 Sybase SQL Anywhere 12。

这有什么意义吗?

4

1 回答 1

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)
)

要显示问题列表,您可以在打开对话框时从警报表中选择一般信息,您可以选择所有与问题相关的适当信息。

于 2013-11-12T12:00:12.380 回答