SQL:将单个类型与各种其他类型的多个记录相关联

时间:2013-08-02 14:17:11

标签: c# sql database database-design

设计包含许多表的数据库,并希望添加常规Note表。我希望Note对象能够附加到其他几个表。因此,一个Note可以与特定Contact,可能是Job以及一些不同的Equipment对象相关联。我希望能够通过与之关联的特定对象来过滤Note个对象。

2 个答案:

答案 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列,可用于唯一引用。