您如何设计一个包含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◀适用于不熟悉关系建模标准的读者。
有些评论者认为此模型中存在“重复”或FileName连接在一起。这显然是由于无法读取标准表示法中提供的模型。或者无法识别高度标准化的结构。
没有任何重复
FileNames是 atomic ,例如CHAR(30),而不是整个路径或网址。
原子意味着文件名未连接
节点内的 不重复。如果在另一个节点中使用相同的FileName,那不是重复,那就是现实,这是允许的。
高度规范化的结构实际上非常小,而且很简洁。
我会问任何有理解这个模型的人发布一个特定的问题,而不是对他们不知道的主题做出陈述。
任何认为他们发现此模型存在“问题”的人同样被要求表现得像技术人员一样,并发布他们认为已发现的特定错误,而不是发布一般性和个人意见。