设计包含许多表的数据库,并希望添加常规Note
表。我希望Note
对象能够附加到其他几个表。因此,一个Note
可以与特定Contact
,可能是Job
以及一些不同的Equipment
对象相关联。我希望能够通过与之关联的特定对象来过滤Note
个对象。
答案 0 :(得分:0)
你需要两张桌子。结构就像以下一样简单。
注意表:
NotePK | tableFK | note
还有一张列出所有表格的表格。 您可以创建一个(然后您可以完全控制但需要维护它),或者您可以使用
sys.tables t
您是通过SELECT * FROM sys.tables t
列object_id
将是您在第一个表格中的tableFK
您可以根据需要存储任意数量的评论。如果您想获取该笔记,只需查询笔记表并过滤tableFK
。
答案 1 :(得分:0)
嗯,这是一种方式:
CREATE TABLE NoteTables
(
TableID INT NOT NULL Identity(1,1),
TableName SysName NOT NULL,
CONSTRAINT PK_NoteTables PRIMARY KEY CLUSTERED(TableID)
)
GO
CREATE TABLE TableNotes
(
TableID INT NOT NULL,
RowID INT NOT NULL,
NoteID INT NOT NULL,
CONSTRAINT PK_NoteAttachments PRIMARY KEY CLUSTERED(TableID, RowID, NoteID)
)
GO
CREATE TABLE Notes
(
NoteID INT NOT NULL Identity(1,1),
Note NVARCHAR(MAX),
CONSTRAINT PK_Notes PRIMARY KEY CLUSTERED(NoteID)
)
请注意,我假设SQL Server并在此处使用IDENTITY列(如果是Oracle,则可以使用Sequences)。
Notes
表包含所有注释,并为它们提供一个ID,用作引用和主键。
NoteTables
只列出所有可以在其行上附加注释的表。
TableNotes
将注释链接到它们附加到的表和行。请注意,此设计假定所有这些表都有INT
个ID列,可用于唯一引用。