创建一个可以容纳很多其他表的键的表的最佳方法是什么?
据我所知,我有两个选择:
1)我创建了一个包含许多外键字段的表
2)我创建了两个字段,一个表示引用的表,另一个字段表示该表的主键。
后者存在很多问题,因为没有办法保持参照完整性(因为每个表都没有外键)。
除了这个表的链接,我想添加一个描述,以便我可以在网格中显示所有通知。通过单击网格中的一行,我想打开相应的程序并修复该程序中的问题。
这有点难以解释,也许这个例子解释得更好:
我需要创建一个系统来处理业务应用程序中每个程序的任务/注释/通知。我们有发票,销售订单,交货,生产订单等
我们的软件检测到其中任何一个都出错了。例如,如果销售订单上的利润不够高,则无法自动验证订单。在这种情况下,我想为销售经理创建一个通知,以便他可以查看销售订单的错误。
仅供参考:我使用的是Sybase SQL Anywhere 12。
它有意义吗?
答案 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)
)
要显示问题列表,您可以在打开对话框时从警报表中选择常规信息,您可以选择所有适当的信息来解决问题。