在数据库中,我有帖子,产品和其他表格 帖子和产品都可以有相同结构的评论。
create table dbo.Posts (
Id int not null
Title nvarchar (120) not null
)
create table dbo.Products (
Id int not null
Name nvarchar (120) not null
)
create table dbo.Comments (
Id int not null
Content nvarchar (2000) not null,
Created datetime not null
)
create table dbo.PostComment (
PostId int not null,
CommentId int not null
)
create table dbo.ProductComment (
ProductId int not null,
CommentId int not null
)
我正在使用一个公共的评论表,因为它们都有相同的列。
这有意义吗?另一种方法是拥有以下内容:
create table dbo.PostComments (
Id int not null,
PostId int not null,
Content nvarchar (2000) not null,
Created datetime not null
)
create table dbo.ProductComments (
Id int not null,
ProductId int not null,
Content nvarchar (2000) not null,
Created datetime not null
)
我有几个问题:
答案 0 :(得分:1)
为了保证一个评论仅由一个帖子使用,您可以在表格上创建唯一索引。所以,解决方案是使用索引。另一方面,它是一对一的关系。
CREATE TABLE dbo.Post (
Id INT NOT NULL IDENTITY(1, 1),
Title NVARCHAR(120) NOT NULL
);
CREATE TABLE dbo.Product (
Id INT NOT NULL,
Name NVARCHAR(120) NOT NULL
);
CREATE TABLE dbo.Comment (
Id INT NOT NULL IDENTITY(1, 1),
Content NVARCHAR(2000) NOT NULL,
Created DATETIME NOT NULL
);
CREATE TABLE dbo.PostComment (
PostId INT NOT NULL,
CommentId INT NOT NULL
);
CREATE TABLE dbo.ProductComment (
ProductId INT NOT NULL,
CommentId INT NOT NULL
);
CREATE UNIQUE INDEX IX_PostComment_CommentId ON dbo.PostComment(CommentId);
CREATE UNIQUE INDEX IX_ProductComment_CommentId ON dbo.ProductComment(CommentId);
另外,请使用单数作为表名。
希望,它是heelps。我们也可能对Post和Product之间的关系感兴趣。
使用单个Comment表和PostId和ProductId +两个可为空的列的解决方案是一个非常棘手的解决方案。我不建议你这样做。
修改强>: 帖子或产品可以有零个或多个评论。