相互链接文本的数据库模式

时间:2010-11-23 01:50:05

标签: c# sql tsql sqlite

我的任务是设计一个非附属于任何组的圣经数据库;)

问题是这样的,我有1个圣经经文,18个不同的圣经经文评论,5个评论评论。计划是制作一个可用的WPF应用程序,以便用户在屏幕一侧显示带有不同评论员评论的文本。

我想做的是以下内容:当一个人看这节经文时,评论将在屏幕一侧的按钮上突出显示,当他看到评论时,该节目将被突出显示,我也会喜欢突出显示和搜索其他经文引号。

我需要将所有内容预编译到sql中,然后将其导出到SQLite中。我已将数据分解为以下形式。

BOOK
CHAPTER
PARAGRAPH
VERSE
CommentatorName
CommentatorComment
VerseINComment location

所以我有以下问题

1:数据以停滞的形式输入(将多次输入一个经文,但只有一个来自同一作者的评论)我们将在数据库中有一个数据块。我将需要处理在Verse引号的注释中查找的数据。该怎么做?是否应将所有数据输入数据库然后运行程序以搜索数据库,或者我可以以某种方式使用tsql搜索评论员对经文的评论然后标记它们吗?

2:存储VerseINComment位置的最佳方式是什么?意思是我在考虑某种形式的映射,就像它们在真实地图中使用一样,1,1,1,1表示GENISIS,第1章第1段第1节(实际=在开头......)。对此有任何想法将不胜感激。

ETT(ehost Think Tank)

2 个答案:

答案 0 :(得分:0)

最好防止错误的数据进入数据库,而不是在事后删除它。

在输入数据时,您应检查现有数据中是否存在重复项,并在发生这种情况时提示用户。

答案 1 :(得分:0)

我可能会选择这样的基础数据结构。

-- (UI1) = UniqueIndex1

Book (Id (PK), Name)
Verse (Id (PK), BookId (FK / UI1), ChapterNo (UI1), ParagraphNo (UI1), 
        VerseNo (UI1), VerseText)
Commentator (Id (PK), Name)
Comment (Id (PK), VerseId (FK), CommentatorId (FK), CommentText)
CommentOnComment (Id (PK), CommentorId (FK), CommentId (FK), CommentText)

将Chapter / Paragraph / Verse分割到自己的表中没有多大意义,因为每个都只是一个整数值。 评论员可以评论已经输入的一节经文而无需自己重新输入文本。

对某些正在进行的对话框中的注释提出意见,因此您可能希望添加某种方法来识别这些对象的顺序(例如,记录创建日期/序列号)。我假设你不是在寻找“对评论评论的评论”,这是一个树状的,需要一个自我参照表。

如果你想提供一种机制来轻松地引用这节经文(建议使用1,1,1,1),这应该在数据输入时映射到Verse表中的相应Id。在这种情况下,您必须注意分配给每本书的ID。

跨版本比较?

如果您的应用允许对不同版本进行评论/比较,您可以将Edition作为一个表格与Book一起使用:

Edition (Id (PK), Name)
Book (Id (PK), Name)
Verse (Id (PK), EditionId (FK / UI1), BookId (FK / UI1), ChapterNo (UI1),  
        ParagraphNo (UI1), VerseNo (UI1), VerseText)

当谈到圣经版本之间的差异时,我不是专家,但你可以通过过滤BookId,CapterNo,ParagraphNo,VerseNo轻松识别不同版本中的相同段落,如果那是你的话

希望这有帮助, 布雷特。