我正在尝试为个人项目构建关系数据库,这是我第一次设计数据库。我不是这方面的专家,但我精通技术并精通技术。我的问题非常具体,同时也很广泛。以下是一个例子......
Table 1: "Region"
Columns: "Houses", "Apartments"
Table 2: "Appliances"
Columns: "Fridge", "Washer"
在这种情况下,公寓单元不允许使用垫圈,因此该数据库的要点是知道什么是相关的,不一定要在列下插入值。在创建表单时,搜索最小的公分母将向我显示与其相关的所有内容。在这种情况下,如果我搜索" Washer" - > "房屋"结果会出现,而不是公寓。而寻找"冰箱"会给我两个" Houses"和"公寓"结果是。显然,这是一个简单的例子,真正的数据库会有更多细节,甚至与此无关。
由于我是新手,我需要知道如何设计它。在这种情况下,我甚至不需要每列下面的行:" Houses"," Apartments"," Fridge"," Washer&# 34;因为我不会在那里插入值。我只想过滤复杂的相关数据。
仅构建表和列(没有行)的含义是什么?这是一个合适的设计吗?它会正常工作吗?我怎么能以这种方式创建查询?你有什么建议?
答案 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"