Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 简单数据库模式:优点和缺点?以身作则_Sql_Mysql_Database Design_Schema_Data Modeling - Fatal编程技术网

Sql 简单数据库模式:优点和缺点?以身作则

Sql 简单数据库模式:优点和缺点?以身作则,sql,mysql,database-design,schema,data-modeling,Sql,Mysql,Database Design,Schema,Data Modeling,我为这些冗长、咆哮的话道歉,但我凌晨3点就起床了,担心明天要去上班处理这个数据库。。。只是感觉不对,但也许我错了,就像事情按照我的方式进行一样。。。请告诉我你的想法 我们的数据库架构类似于: page: id, label, contentid, parentpageid content: id, xmldata 我们在页面表中有大约4000个条目 我已经包括了一个大大简化的页面层次结构,它看起来有点像本文底部的代码清单 问题的根源在于数据库中充满了以下内容: 对于每个带有“标签”的“页面

我为这些冗长、咆哮的话道歉,但我凌晨3点就起床了,担心明天要去上班处理这个数据库。。。只是感觉不对,但也许我错了,就像事情按照我的方式进行一样。。。请告诉我你的想法

我们的数据库架构类似于:

page: id, label, contentid, parentpageid

content: id, xmldata
我们在页面表中有大约4000个条目

我已经包括了一个大大简化的页面层次结构,它看起来有点像本文底部的代码清单

问题的根源在于数据库中充满了以下内容:

  • 对于每个带有“标签”的“页面” 一套(有3套)有16套 子项,每个子项都标有节 数字
  • 每个部分都有一个 名为“About”和 名为“Info”的子项
  • 每个“关于”页面都有一组 贴上“关于事物”、“关于事物”标签的儿童 和“关于其他事情”
注意:虽然孩子们的标签相同,但他们可能有不同(但相似)的内容

考虑到数据,我对这个模式有一些主要的问题,我想知道我是否有理由,是否有一个好的解决方案或一些我应该阅读的东西

主要问题是:存在大量重复条目和重复层次结构。

编辑:另一个问题是,如果一个页面有子页面,它的contentid将被忽略。浪费空间

我也有一个问题,那就是很难找出我在树上的位置。。。我在看什么类型的物体

例如,任务节点需要以不同于其他节点的方式显示。。。判断节点是否为任务的唯一方法是,它的父节点的标签是否为“任务”(或“作业”或“待办事项”)。我尝试使用节点的“深度”,但这不起作用,因为有时其他项目需要在同一深度上显示不同的内容

提出的解决方案是增加一个“类型”字段。。。然后UI决定如何显示一个节点(例如“导航”节点在主选项卡栏中显示(例如“关于”),任务类型节点在侧栏中显示下拉列表),但同样,这也感觉不正确

此外,目前还没有对项目进行排序的方法。到目前为止,我们很幸运,数据以他们希望的正确顺序进入数据库,并且到目前为止还没有删除

他们希望添加一个“排序顺序”字段来解决此问题。这似乎需要很多手动设置,特别是如果他们想要重新排列特定的菜单集。。。(例如在每个关于节点中插入一个新的子节点),尽管我想可以编写一个简单的脚本来完成它。。。虽然我的论点是,我应该能够在一个位置改变它,然后它就完成了

我从未见过这样设置数据库,但他们声称,所有数据库都是这样设置的。这就是他们的目的。我是不是疯了,或者这是一种荒谬的方式,用这种重复的层次结构来建立任何数据库(还要记住,下面的层次结构与真正的页面层次结构相比,重复的条目和重复的树要少得多)

老实说,我想建议一个更好的解决方案,但我不确定这是什么,因为在真正的层次结构中有8种不同类型的“关于”样式的节点,其中一些包含更多的节点和更多的子节点。。。但是孩子们的标签和顺序总是一样的。我是否需要为每种类型的页面创建一个表

我注意到这似乎也是网站的一个常见问题,他们可能有一堆页面,所有页面都有完全相同的子页面集。。。但是没有办法说:好的,我希望这个页面继承这组子元素,但是我希望它们都有不同的内容。现在我想在一个位置重新排列孩子们,并让他们全部更新。有没有一种可靠、简单的方法来解决这个问题

SET1
    SECTION1
        -About 
             -About Things
             -About Stuff
             -About Other Stuff
        -Info
        -Tasks
             -A
             -B
             -C
              ...
             -H
        -Data
    SECTION2
        -About
             -About Things
             -About Stuff
             -About Other Stuff
        -Info
        -Tasks
             -A
             -B
             -C
              ...
             -H
        -Data
...
    SECTION16

SET2
    SECTION1
        -About
             -About Things
             -About Stuff
             -About Other Stuff
        -Info
        -Jobs
             -1
             -2
             -3
              ...
             -8

        -ToDo
             -A
             -B
             -C
              ...
             -H
        -Other Data
    SECTION2
        -About
             -About Things
             -About Stuff
             -About Other Stuff
        -Info
        -Jobs
             -1
             -2
             -3
              ...
             -8

        -ToDo
             -A
             -B
             -C
              ...
             -H
        -Other Data
SET3 (Exact same setup as SET2)
       ...

谢谢

我认为你在用这些内容把自己打得死去活来。
如果不存在数据库的ER图,请绘制一个—您似乎已经对内容有了合理的把握,并对其进行规范化。

使用此ERD,您应该能够非常轻松地解决上面提到的大多数问题。

您可以这样创建表:

菜单项:Id,名称
MenuItemContent:Id,内容
MenuItemHierarchy:ParentMenuItemId、MenuItemId、ContentId、SortKey

不过,通常我会:

菜单项:Id、名称、内容Id
MenuItemContent:Id,内容
MenuItemHierarchy:ParentMenuItemId、MenuItemId、SortKey


不要重复使用我的菜单项来显示不同的内容。

如果他们称之为关系数据库是有原因的。如果没有多个表并使用联接,那么使用数据库的意义何在,最好使用平面文件。
您所谓的“其他员工”可以随心所欲地指指点点、开怀大笑,但数据库驱动应用程序的真正威力和有效性在于您开始使用连接和规范化数据。

关于您所说的一些事情,请您想一想:

“建议的解决方案是添加一个“类型”字段…”

如果您的某些业务内容显然需要“类型化”,因为在某种程度上,这些不同“类型”的对象之间存在一些相关的区别,那么从关系数据库的角度来看,这是您希望/需要设置多个表(每种类型一个表)的关键指示,至少在逻辑层面

如何在物理上组织这一点是另一回事,SQL未能正确区分逻辑/物理是一个悲哀但真实的现实,更悲哀和真实的现实是,由于SQL在这一层面上的失败,许多开发人员在这一层面上也没有线索

此外,目前没有对项目进行排序的方法

请记住,在逻辑级别,关系数据库不知道