오늘 다른 사람들과 마찬가지로 "벽"기능을 가진 소셜 네트워킹 사이트를 디자인하고 있습니다. 데이터베이스에는 친구들과 공유 할 가치가있는 사용자 행동을 저장하는 알림 테이블이 있습니다. 예를 들어 사용자가 자신의 상태를 업데이트하면 모든 친구에게 알림이 전송됩니다. 아래 표는 두 명의 고유 사용자로부터 두 개의 상태 업데이트를 보여줍니다. 첫 번째 (AlertId 689 및 690)는 AccountId 53에 의해 제출됩니다. 그는 AccountId 57이라는 하나의 프렌드를 가지고 있으므로이 행이 테이블에 추가되므로이 사용자가 로그온하면 계정 53의 업데이트가 자신의 벽에 표시됩니다. 같은 방식으로 다른 사용자의 상태 업데이트에는 3 명의 친구가 있기 때문에 4 개의 행이 있습니다.SQL Server 2005 : 기본 삽입/기록 논리 도움 필요
[AlertId] [AccountId] [CreateDate] [Timestamp] [AlertTypeId] [IsHidden] [Body]
689 57 2010-08-10 0x0000000000018725 10 0 HTML
690 53 2010-08-10 0x0000000000018726 10 0 HTML
691 53 2010-08-10 0x000000000001872B 10 0 HTML
692 52 2010-08-10 0x000000000001872C 10 0 HTML
693 51 2010-08-10 0x000000000001872D 10 0 HTML
694 57 2010-08-10 0x000000000001872E 10 0 HTML
이제 사용자는 주어진 항목 (이 경우에는 statusupdate)에 대해 설명 할 수 있습니다.
public void AddComment(string comment)
{
if (_webContext != null)
{
var c = new Comment
{
Body = comment,
CommentByAccountId = _webContext.CurrentUser.AccountId,
CommentByUserName = _webContext.CurrentUser.UserName,
CreateDate = DateTime.Now,
SystemObjectId = _view.ObjectId,
SystemObjectRecordId = _view.ObjectRecordId
};
_commentRepository.SaveComment(c);
}
_view.ClearComments();
LoadComments();
}
: - (ObjectId가 우리에게 자사의 statusupdate을 알려줍니다 참고하시기 바랍니다)
AddComment이 제출 된 경우에 댓글되고있는 statusupdate 식별하기 위해, 우리는 (경고의 기본 키에 댓글을되는) ObjectRecordId를 사용하는
이제 문제는 친구의 상태 업데이트에 댓글을 달려고 할 때 경고 표의 해당 계정에 해당하는 AlertId (또는 Comments 테이블의 ObjectRecordId)를 사용한다는 것입니다. 결과는 의견이 그의 친구의 주석과 없음들만 볼 수 있다는 것입니다 :
이에 대한 해결책은 내가 경고 테이블에서했던 것과 비슷한 일을하는 것입니다 물론[CommentId] [Body] [CommentById] [CommentByName] [ObjectId] [ObjectRecordId] [Delete]
97 hello world. 57 GrumpyCat 7 690 0
- 누군가가 코멘트를한다, 댓글 테이블의 모든 친구에 해당하는 행을 만듭니다. 하지만 경고 테이블의 모든 친구 상태 업데이트에 대한 AlertId에 액세스하고 코멘트 테이블의 ObjectRecordId 열에 어떻게 매핑합니까? 내 계정 (및 해당 alertids)에 해당하는 상태 업데이트에만 액세스 할 수 있기 때문에 친구 계정에서 동일한 상태 업데이트에 대한 alertids가 무엇인지 알 수 없습니다.
내가 생각할 수있는 유일한 해결책은 숨겨진 필드를 내 친구의 해당 alertIds로 채우는 것입니다. 따라서 항목에 댓글을 달면 이미 무엇인지 알 수 있습니다. 그러나 이것은 기분이 좋지 않고 거기에 더 좋은 아이디어가 있는지 알고 싶습니다.
그것은 가치가 무엇인지에 대한, 여기 dbo.Alerts의 CREATE TABLE입니다 :
CREATE TABLE [dbo].[Alerts](
[AlertId] [bigint] IDENTITY(1,1) NOT NULL,
[AccountId] [int] NOT NULL,
[CreateDate] [datetime] NOT NULL CONSTRAINT [DF_Alerts_CreateDate] DEFAULT (getdate()),
[Timestamp] [timestamp] NOT NULL,
[AlertTypeId] [int] NOT NULL,
[IsHidden] [bit] NOT NULL CONSTRAINT [DF_Alerts_IsHidden] DEFAULT ((0)),
[Message] [varchar](max) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
CONSTRAINT [PK_Alerts] PRIMARY KEY CLUSTERED
(
[AlertId] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
그리고, 여기 dbo.Comments입니다 :
CREATE TABLE [dbo].[Comments](
[CommentId] [bigint] IDENTITY(1,1) NOT NULL,
[Timestamp] [timestamp] NOT NULL,
[Body] [varchar](2000) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[CreateDate] [smalldatetime] NOT NULL,
[CommentByAccountId] [int] NOT NULL,
[CommentByUserName] [varchar](250) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[SystemObjectId] [int] NOT NULL,
[SystemObjectRecordId] [bigint] NOT NULL,
[FlaggedForDelete] [bit] NOT NULL CONSTRAINT [DF_Comments_FlaggedForDelete] DEFAULT ((0)),
CONSTRAINT [PK_Comments] PRIMARY KEY CLUSTERED
(
[CommentId] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
나는 2005 년 감사 SQL 서버를 사용하고 미리.
감사합니다. 각 경고 (상태 업데이트)는 포스터 및 친구의 AccountID에 대한 경고 테이블에 복제됩니다. 계정 17에 의한 단일 업데이트는 친구 계정 1,6,3,8,2,13,5 및 9에 대해 복제됩니다. 경고에서 FK를 CommentID에 추가하는 것이 좋습니다. 이것은 원래의 포스터와 코멘트 작성자 사이의 관계에만 영향을 미칠 것입니다 - 다른 모든 계정은 어떻게이 커미션을 볼 수 있습니까? 모든 친구 계정에서 단일 상태 업데이트에 대한 의견이 여러 개있을 때 (각 친구 계정은 알리미 테이블에서 상태 업데이트 사본을 얻습니다.) –