简单的SQL逻辑验证

时间:2019-01-09 10:04:22

标签: sql

我想请更多经验丰富的开发人员为我提供对真正简单的sql关系逻辑的快速评估。我是数据库领域的新手,所以我不想犯逻辑错误,一旦发现逻辑错误,就会导致我重写整个内容。

这就是事情

我有几种产品,比如冰箱,洗衣机和微波炉。 每个项目都有一些文件:手册,快速入门指南,照片等。

我在数据库中的实现基于以下方案:

1。表1:产品 这里的列是:

  1. 名称
  2. 说明

2。表2:文件

  1. 名称
  2. 说明
  3. 文件
  4. 产品(外键)

所以基本上,我只是通过给每个文件一个产品所属的产品来建立文件和产品之间的连接。

似乎有点违反直觉的艰难,但我真的不知道为什么。

因此,此逻辑是整个系统的基础,我想问一下我是否没有在这里犯一些简单的错误。

我想对于有经验的人来说,应该如何做显然。

预先感谢

2 个答案:

答案 0 :(得分:1)

鉴于文件和产品可能具有多对多关系,典型的处理方式是使用 junction 表:

product_file (product_id, file_id)

此表的唯一目的是维护产品及其文件之间的关系。但是请注意,实际上没有任何元数据存储在此处。而是将元数据存储在以下经过稍微修改的文件和产品表中:

product (id, name, description)
file (id, name, description)

要查看其工作原理,以下是一个查询,该查询查找与某个产品关联的所有文件的名称:

SELECT
    f.name
FROM file f
INNER JOIN product_file pf
    ON f.id = pf.file_id
INNER JOIN product p
    ON pf.product_id = p.id
WHERE
    p.name = 'some product';

答案 1 :(得分:0)

您可能会寻找以下解决方案或类似的解决方案:

  1. 产品(ProductId,名称,描述)
  2. CoverItem(CoverItemId,名称,说明)
  3. 文件(ProductId,CoverItemId,文件)

假设您有一台冰箱(ProductId = 1)和一台洗衣机(ProductId = 2)。

作为附加项(“ cover”或您喜欢的任何术语),您定义了以下内容:手动(CoverItemId = 1)和快速入门指南(CoverItemId = 2)。

到目前为止,这没有提供任何有意义的信息,但是现在您应该拥有可以使用的项目的存储库。

最后,将数据插入“文件”表,该表将产品与封面项目连接起来。例如,(ProductId = 1,CoverItemId = 1,File =“ D:\ SomeFolder \ FridgeManual.txt”)意味着路径“ D:\ SomeFolder \ FridgeManual.txt”中有一个护卫舰手册。 / p>

HTH