没有行的数据库

时间:2017-02-12 08:15:42

标签: mysql database

我正在尝试为个人项目构建关系数据库,这是我第一次设计数据库。我不是这方面的专家,但我精通技术并精通技术。我的问题非常具体,同时也很广泛。以下是一个例子......

Table 1: "Region"
Columns: "Houses", "Apartments"

Table 2: "Appliances"
Columns: "Fridge", "Washer"

在这种情况下,公寓单元不允许使用垫圈,因此该数据库的要点是知道什么是相关的,不一定要在列下插入值。在创建表单时,搜索最小的公分母将向我显示与其相关的所有内容。在这种情况下,如果我搜索" Washer" - > "房屋"结果会出现,而不是公寓。而寻找"冰箱"会给我两个" Houses"和"公寓"结果是。显然,这是一个简单的例子,真正的数据库会有更多细节,甚至与此无关。

由于我是新手,我需要知道如何设计它。在这种情况下,我甚至不需要每列下面的行:" Houses"," Apartments"," Fridge"," Washer&# 34;因为我不会在那里插入值。我只想过滤复杂的相关数据。

仅构建表和列(没有行)的含义是什么?这是一个合适的设计吗?它会正常工作吗?我怎么能以这种方式创建查询?你有什么建议?

1 个答案:

答案 0 :(得分:1)

对于Region可以拥有多个设备和设备可以属于许多区域的情况,最典型的数据库设计如下所示:

Table 1: "Region"
Columns: "Id", "Name"
Row:    1 , Houses
Row:    2 , Apartments

Table 2: "Appliance"
Columns: "Id", "Name"
Row:       1 , Fridge
Row:       2 , Washer

Table 3: "RegionApplianceCombination"
Columns: "ApplicanceId", "RegionId"
Row:                 1 ,         1
Row:                 2 ,         1
Row:                 1,          2

您可以像这样查询 - 对于House中允许的所有设备:

select Region.Name, Appliance.Name
from Region
inner join RegionApplianceCombination on Region.Id = RegionId
inner join Appliance on Appliance.Id = ApplicanceId
where Region.Name = "Houses"

您可以像这样查询 - 对于允许冰箱的所有区域:

select Region.Name, Appliance.Name
from Region
inner join RegionApplianceCombination on Region.Id = RegionId
inner join Appliance on Appliance.Id = ApplicanceId
where Appliance.Name = "Fridge"

您可以像这样查询以检查是否允许组合:

select Region.Name, Appliance.Name
from Region
inner join RegionApplianceCombination on Region.Id = RegionId
inner join Appliance on Appliance.Id = ApplicanceId
where Appliance.Name = "Washer" and Region.Name = "Apartments"