[contentPage_id]
) ON DELETE CASCADE
可以看到表的命名方式和数据类型与CSK中的其它模块都是一致的,这样的编程习惯在国内实在是难以做到。
我们存储FAQ的答案和参考索引的字段是ntext类型,这是为了能支持大数据量的文本(可高达1GB)。还要注意的是Faq_Answer是一个必要字段而Faq_Reference可以是空值。我们的主键(Faq_ContentpageID)关联到Community_Contentpages表中的附加内容。另外一个要注意的细节是外键的约束(级联删除)的使用,保证的数据关联的完整性,并且节省了程序代码。
CSK使用名为Community_ContentpagesDeleteContentPage(太长了吧)的存储过程删除Community_ContentPages表中的记录。当这个存储过程删除记录时,服务器根据外键自动删除FAQ表中的对应记录。
下面我们要做的是建立增加、编辑、读取单个、读取多个记录的存储过程,在代码中不会出现SQL的代码。从封装性和安全性来看,这样做是一种很好的习惯。
下面是增加一条新的FAQ记录的存储过程。我们不需要给两个表中的每个字段填充数值。例如,我们不需要填充Contentpage_ViewCount列(默认为0),也不需要在ContentPage_DateCommented中填写日期。
CREATE PROCEDURE Community_FaqsAddFaq
(
@communityID int,
@sectionID int,
@username nvarchar(50),
@topicID int,
@question nvarchar(100),
@introduction nvarchar(500),
@metaDescription nvarchar(250),
@metaKeys nvarchar(250),
@moderationStatus int,