我正在为摄影师和模特建立一个社交网络协作网站,目前正在建立数据库架构来管理列表(又称图像相册)。
将列表视为一组图像,成员可以识别它们想要一起显示。例如,某成员创建了一个名为“ Amazing Outdoor Locations”的列表,当该成员遇到另一位成员的图像并看到他们想要包含在该列表中的特定图像时,他们选择该图像并将其添加到清单。然后,社区的任何成员都可以选择一张图像,然后查看该图像所包含的列表,然后向下钻取以查看该列表中还包含哪些其他图像。
我试图确定的是管理这些列表的最佳方法,包括创建列表名称,更改列表名称(具有这些名称更改的历史记录),是否/何时删除列表,如果命名不当以及该特定列表由哪些图像组成,则该列表已被另一个用户标记。
下面是我当前针对大型数据库的列表管理部分的状态。
CREATE TABLE member.lists (
list_id bigint IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
list_name varchar(60) NOT NULL
);
GO
CREATE TABLE member.profile_lists (
profile_id bigint NOT NULL,
list_id bigint NOT NULL,
deleted_yn varchar(1) NOT NULL DEFAULT 'n',
deleted_dts datetime,
flagged_yn varchar(1) NOT NULL DEFAULT 'n',
PRIMARY KEY CLUSTERED (profile_id, list_id),
FOREIGN KEY (profile_id) REFERENCES member.profiles(profile_id),
FOREIGN KEY (list_id) REFERENCES member.lists(list_id)
);
GO
CREATE TABLE member.lists_log (
list_log_id bigint IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
list_id bigint NOT NULL,
created_dts datetime NOT NULL DEFAULT GETDATE(),
prior_list_name varchar(60) NOT NULL,
FOREIGN KEY (list_id) REFERENCES member.lists(list_id)
);
GO
CREATE TABLE member.lists_flag_log (
flag_log_id bigint NOT NULL,
list_id bigint NOT NULL,
created_dts datetime NOT NULL DEFAULT GETDATE(),
flagger_profile_id bigint NOT NULL,
flagger_comments varchar(100)
PRIMARY KEY CLUSTERED (flag_log_id, list_id)
);
GO
CREATE TABLE member.lists_images (
list_id bigint NOT NULL,
image_id bigint NOT NULL
PRIMARY KEY CLUSTERED (list_id, image_id),
FOREIGN KEY (list_id) REFERENCES member.lists(list_id),
FOREIGN KEY (image_id) REFERENCES member.images(image_id)
);
GO