表中包含2个字段,但一次只能使用一个字段

时间:2010-11-23 21:18:25

标签: database database-design

您如何设计一个包含2个字段的表的数据库,其中只有一个可以一次设置,没有太多冗余?例如文件系统:

假设我们有一个带驱动器的表,一个带文件夹,另一个带文件。

驱动器和文件非常简单。但是,文件夹的父级可以是文件夹(在这种情况下引用是同一个表)或磁盘(在这种情况下引用是磁盘行)。

你会添加一些额外的表吗?

2 个答案:

答案 0 :(得分:3)

一个包含id,name,parentid和(如果需要)类型的表。文件夹和文件都指向他们的父母parentid。磁盘没有parentid。唯一的NULL字段是(相对较少)磁盘类型的记录的parentid字段。

答案 1 :(得分:0)

小错误已于10月26日修正

我不明白为什么你需要三个文件(它们在数据库中不是“表”,直到它们被一起规范化)。

如果您实际处理的内容是驱动器;文件夹;文件,然后它们都是文件。这导致着名的目录树问题,这在Unix I-Nodes中得到了解决,但在任何MS文件系统上仍然存在问题。

  • 最高级节点的文件名为“X:”(驱动器)

    • 他们没有父节点

    • 使用CHAR(0)代替Null(这是一个替代品,消除了数据库中Nulls的问题,因此消除了性能问题;它没有解决Null问题,因为Drives没有父级。还需要代码)

  • 没有两三个独立且不同的文件,包含大量数据重复和更新异常(您确实要求数据库设计答案,对吧?)。这不是一件轻而易举的事。

  • 不要盲目地在所有移动的东西上粘贴Id-iot“关键”列。

  • 如果是IsFolder,则Node是目录树中的一个分支,一个文件夹;另外,它是一个文件。

  • 可以将文件提升为文件夹:将“IsFolder”设置为true;之后可以用作ParentNode。如果您有ISO / IEC / ANSI标准SQL,则可以实现CHECK约束以确保ParentNodes为IsFolder

  • 如果行不是IsFolder,即文件,则不能将其用作文件夹或ParentNode。

  • 文件名在节点(文件夹)中必须是唯一的,因此提供了唯一索引。 AK 是替代密钥的标准符号,表示唯一索引。

Directory Data Model http://www.softwaregems.com.au/Documents/Student%20Resolutions/Andrew%20DM.pdf

▶Link to IDEF1X Notation◀适用于不熟悉关系建模标准的读者。

对评论的回应

  1. 有些评论者认为此模型中存在“重复”或FileName连接在一起。这显然是由于无法读取标准表示法中提供的模型。或者无法识别高度标准化的结构。

    • 没有任何重复

    • FileNames是 atomic ,例如CHAR(30),而不是整个路径或网址。

    • 原子意味着文件名未连接

    • 节点内的 不重复。如果在另一个节点中使用相同的FileName,那不是重复,那就是现实,这是允许的。

    • 高度规范化的结构实际上非常小,而且很简洁。

  2. 我会问任何有理解这个模型的人发布一个特定的问题,而不是对他们不知道的主题做出陈述。

  3. 任何认为他们发现此模型存在“问题”的人同样被要求表现得像技术人员一样,并发布他们认为已发现的特定错误,而不是发布一般性和个人意见。